我有一个PHP文件时间函数的问题。在我的webapp中,我使用带有缓存选项的Smarty模板引擎。在我的webapp中,我可以做一些会产生错误的操作,但让我们只关注一个操作。当我点击页面上的链接时,一些内容被更新了-我可以点击几次,一切正常,但大约10个请求中有一个失败了。出现以下错误:
filemtime() [<a href='function.filemtime'>function.filemtime</a>]: stat failed for和导致问题的代码行:
return ($_template->getCachedFilepath() && file_exists($_template->getCachedFilepath())) ? filemtime($_template->getCachedFilepath()) : false ;如您所见,文件之所以存在,是因为它被选中了。
smarty_internal_cacheresource_file.php中包含有问题的代码行( Smarty lib v3.0.6的一部分)
应用程序在UNIX系统上运行,外部托管。
有什么想法吗?我应该发布更多详细信息吗?
发布于 2011-08-19 19:24:25
file_exists在内部使用access系统调用,以实际用户的身份检查权限,而filemtime使用stat,以有效用户的身份执行检查。因此,问题可能根源于有效用户和真实用户的假设,这是不成立的。另一种解释是文件在两次调用之间被删除。
既然$_template->getCachedFilepath()的结果和文件的存在都会在系统调用之间发生变化,那么为什么还要调用file_exists呢?相反,我建议你
return @filemtime($_template->getCachedFilepath());如果可以将$_template->getCachedFilepath()设置为虚拟值,如false,请使用以下命令:
$path = $_template->getCachedFilepath();
if (!$path) return false;
return @filemtime($path);发布于 2012-05-16 19:53:46
使用:
Smarty::muteExpectedErrors();阅读this和this
发布于 2011-09-06 03:08:25
几年来,我成功地使用了filemtime,而没有检查"file_exists“。我一直对文档的解释是,在出现任何错误时,应该从"filemtime“返回FALSE。然后几天前发生了一件非常奇怪的事情。如果该文件不存在,我的Cron作业将终止,并返回一个结果。结果不在程序输出中,而是在Cron输出中。消息为“文件长度已超出”。我知道Cron作业在filemtime语句中结束,因为我在该语句前后给自己发了一封电子邮件。“之后”的电子邮件再也没有收到。
我在文件上插入了一个file_exists检查来修复Cron作业。然而,这本不应该是必要的。我仍然不知道我使用的托管服务器上发生了什么变化。同一天,其他几个Cron作业开始失败。我还不知道它们是否与filemtime有关。
https://stackoverflow.com/questions/7120793
复制相似问题