PHP文件包含错误

PHP文件包含错误,php,Php,我在PHP页面中有以下代码。有时候,当我删除cache2.html文件时,我希望php重新创建它,而下一个人将获得cache2.html,而不是执行php代码。我在页面上多次收到以下警告,但没有内容。是因为多个用户同时访问php吗?如果是,我如何修复它?多谢各位 警告:include(dir1/cache2.html)[function.include]:未能 open stream:中没有此类文件或目录 /第8行的home/content/54/site/index.php 对文件_exis

我在PHP页面中有以下代码。有时候,当我删除cache2.html文件时,我希望php重新创建它,而下一个人将获得cache2.html,而不是执行php代码。我在页面上多次收到以下警告,但没有内容。是因为多个用户同时访问php吗?如果是,我如何修复它?多谢各位

警告:include(dir1/cache2.html)[function.include]:未能 open stream:中没有此类文件或目录 /第8行的home/content/54/site/index.php


对文件_exists()的调用本身是缓存的,因此即使在删除该文件后,也可能会得到返回值true。见:

因此,你可以:

clearstatcache();
if (file_exists($cache)) {
    include($cache);
} else {
    // generate page
}
或者,您可以这样做:

if (file_exists($cache) && @include($cache)) {
    exit;
} else {
    // generate page
}

或者更好的方法是,如果要从PHP进程中删除缓存文件,那么在删除文件后只需调用clearstatcache()。

一种解决方法是在有人访问页面时不删除该文件。这不是一个听起来像巨魔的答案,但尝试做听起来像你想做的事情需要更多的复杂性,并且知道你是否需要它很重要。这是我构建的缓存,以避免对每个请求调用数据库。我很清楚,每当我的网站内容发生变化时(大约每小时发生一次)。我还有什么其他选择来实现这种缓存?您的缓存解决方案不错,只是错误处理可以改进。我喜欢下面AlexHowansky的第二个建议。我更喜欢第二个方法,因为它可以捕捉到文件从存在到被包含之间被删除的(可能是边缘)情况。在第二种情况下,如果include失败(即使它刚刚存在),页面仍然会生成。这是我不喜欢的。您可以尝试一个try/catch,这将更加优雅。失败的包含不抛出异常。
if (file_exists($cache) && @include($cache)) {
    exit;
} else {
    // generate page
}