2

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

警告:include(dir1/cache2.html) [function.include]:无法打开流:第 8 行的 /home/content/54/site/index.php 中没有此类文件或目录

<?php 
if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) ob_start("ob_gzhandler"); else ob_start();

$cachefile = "dir1/cache2.html";
if (file_exists($cachefile)) {
        include($cachefile); // output the contents of the cache file
} else {

/* HTML (BUILT USING PHP/MYSQL) */

$cachefile = "dir1/cache2.html";
$fp = fopen($cachefile, 'w'); 
fwrite($fp, ob_get_contents()); 
fclose($fp);
ob_flush(); // Send the output to the browser
}  
?>
4

1 回答 1

3

对 file_exists() 的调用本身会被缓存,因此即使在文件被删除之后,您也可能会获得 true 的返回值。看:

http://us.php.net/manual/en/function.clearstatcache.php

所以,你可以这样做:

clearstatcache();
if (file_exists($cache)) {
    include($cache);
} else {
    // generate page
}

或者,您可以执行以下操作:

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

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

于 2012-06-04T19:44:51.540 回答