fread()创建文件和file_exists()文件缓存问题

fread()创建文件和file_exists()文件缓存问题

  ①fread('','w')调用当文件不存在时创建文件,其中参数使用了fread('',"w")导致无法创建文件,修改单引号之后操作正常.

  ②项目当中新建日志文件,需要判断日志文件是否存在

再用file_exists判断文件时,文件被删除,用file_exists或者is_file判断仍然返回true。

查看手册关于file_exists有如下注释

注释

Note:  此函数的结果会被缓存。参见 clearstatcache() 以获得更多细节。     

查看clearstatcache()

说明

void clearstatcache ([ bool $clear_realpath_cache = false [, string $filename ]] )

当使用 stat()lstat() 或者任何列在受影响函数表(见下面)中的函数时,PHP 将缓存这些函数的返回信息以提供更快的性能。然而在某些情况下,你可能想清除被缓存的信息。例如如果在一个脚本中多次检查同一个文件,而该文件在此脚本执行期间有被删除或修改的危险时,你需要清除文件状态缓存。这种情况下,可以用 clearstatcache() 函数来清除被 PHP 缓存的该文件信息。

必须注意的是,对于不存在的文件,PHP 并不会缓存其信息。所以如果调用 file_exists() 来检查不存在的文件,在该文件没有被创建之前,它都会返回 FALSE 。如果该文件被创建了,就算以后被删除,它都会返回 TRUE 函数 unlink() 会自动清除该缓存. 

本函数缓存特定文件名的信息,因此只在对同一个文件名进行多次操作并且需要该文件信息不被缓存时才需要调用 clearstatcache() 。 

 

 

void clearstatcache ([ bool $clear_realpath_cache = false [, string $filename ]] )

 

 2     $date = date('Ym',time());
 3     $dir = str_replace('\','/',(dirname(dirname(dirname(__FILE__)))."/control/wxpay/log/notify_".$date.".txt"));
 4     //清除文件缓存
 5     clearstatcache(TRUE,$dir);
 6     if(file_exists($dir)){
 7         $fh = fopen($dir,'a');
 8     }else{
 9         $fh = fopen($dir,'w');
10     }
11 
12     flock($fh,LOCK_EX);
13     fwrite($fh,"执行日期:".date("Y/m/d H:i:s",time())."
".$contents."

");
14     flock($fh,LOCK_UN);
15     fclose($fh);
16