【发布时间】:2012-12-10 02:05:31
【问题描述】:
问题很简单:当涉及到触摸磁盘时,这两个示例是否相等,或者场景#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()独有的?
【问题讨论】:
-
你不应该关心这个。
file_exists将发出stat。与读取整个文件的 I/O 负载相比,stat相形见绌。听起来您正在尝试执行微优化。如果您真的想加快速度,请使用 xdebug 或 xhprof 分析您的代码。 -
我要补充一点,如果你真的想要一个文件而不是目录,最好使用
is_file()。不管上述评论如何,我认为这是一个公平的问题 - 但不是出于“优化”的原因。 -
所以你问这个问题。我要做的第一件事是查看 PHP 源代码。你试过吗? lxr.php.net - 另见:php.net/sites.php - 您可以做的另一件事是使用 strace 运行 PHP 并查看发生了什么。
-
@Charles 我分析了我所有的代码,这就是我问这个问题的原因。自动加载类出现在我的分析中,这就是我问这个的原因。数据库调用等应该占据分析的最大份额,但事实并非如此。我知道自动加载很慢,几乎按照定义,但如果我能加快一点速度,那将是值得的。
-
只有在某些情况下,将
is_file()/file_exists()与include结合起来才有意义...自动加载类不是其中之一,除非我在这里遗漏了一些东西。include只会默默地失败,那么为什么要先检查文件是否存在呢?你的问题似乎被你问它的理由淡化了。
标签: php caching file-exists