缓存此函数的结果。请参阅clearstatcache() 更多细节。
但它没有提供有关php将这些信息保存在缓存中的时间的信息。我已查看clearstatcache()的文档 但没有这样的信息。谷歌搜索也没有帮助。
我正在构建一个调用file_exists来生成一些输出的应用程序,并且由于任何用户都可以随时删除正在检查的文件,因此在生成输出之前我需要确定它是否真的存在。 / p>
在file_exists()之前调用clearcache()将解决目的,但仅仅是为了好奇我想知道PHP将缓存文件信息的时间(默认时间)以及我可以通过哪个变量更改缓存到期时间?
编辑1:实际上,在删除文件后再次使用file_exists()进行检查会返回false,但如果是这样的话,那么缓存的含义是什么呢?
编辑2:
<?
var_dump(file_exists('/home/user/filecheck.php'));
sleep(20);
// after running script, sleep for 20 seconds just to quickly delete this file manually before file_exists is called again.
// unlink is not used since as per documentation it'll clear php cache.
var_dump(file_exists('/home/user/filecheck.php'));
?>
并且脚本的响应是
boolean true
boolean false
这意味着如果文件存在,即使是同一个执行,php也不会缓存file_exists信息,那么为什么它会在文档中写入&#34;此函数的结果被缓存&#34;?
答案 0 :(得分:1)
stat缓存将缓存信息的时间可以使用realpath_cache_ttl变量在php.ini文件中配置。默认似乎是120秒。
答案 1 :(得分:0)
您不需要clearstatcache()
,因为在manual中说:
您还应该注意PHP不会缓存有关的信息 不存在的文件。所以,如果你在一个文件上调用file_exists() 如果不存在,它将返回FALSE,直到您创建该文件。如果你 创建该文件,即使您删除该文件,它也将返回TRUE。 但是unlink()会自动清除缓存。
也是为了避免一些错误,如果你想检查文件的存在和is_file()
目录,最好使用is_dir()
,因为如果存在的路径都是文件或file_exists()
将返回true是目录。
P.S。证明如果文件被删除则不会被缓存:http://joxi.ru/eAO55BF4ojZjmo
关于缓存的含义:再次阅读本手册:http://php.net/manual/en/function.clearstatcache.php
使用stat(),lstat()或其中列出的任何其他函数时 受影响的函数列表(如下),PHP缓存那些信息 函数返回以提供更快的性能。
这意味着缓存用于文件统计,每次都不重读它,clearstatcache()
删除此文件的stat缓存并强制重新读取它们。
P.S。实际上,如果用户没有明确地启用统计数据来缓存统计数据是愚蠢的:ini_set('cache_file_stats', true)
最好将控制权交给用户。