6

问题很简单:当涉及到触摸磁盘时,这两个示例是否相等,或者场景#2 是否两次触摸磁盘?

情景#1

include '/path/to/file.php';

情景#2

if (file_exists('/path/to/file.php'))
    include '/path/to/file.php';

我知道场景#1 触及磁盘一次。现在,据我了解,它会file_exists()缓存路径以及文件是否存在。为了清除该缓存,您需要调用clearstatcache().

但是include,等人,是否也使用该缓存?还是专属于file_exists()?

4

2 回答 2

5

只需要提醒一点:include使用包含路径。file_exists没有。除此之外,您显然是在寻找问题而不是解决方案(这一定没有错,只是说,我的答案可能无法满足您的要求,仅涵盖一个片段)。

于 2012-12-23T01:43:05.887 回答
3

这两个例子都接触了磁盘两次——读取目录然后读取文件。在第一个示例中,这两者都发生在一个命令期间,第二个命令将它们拆分。include() 不太可能再次读取目录,因为您的操作系统应该包含某种 HD 缓存,至少应该持续这么长时间。

但是您显然是在尝试过度优化某些东西。除非您在脚本中执行 > 100 次,否则您的两个选项之间不会有任何性能差异。

于 2012-12-23T01:41:23.567 回答