我一直无法弄清楚实际做的实际路径缓存是什么。
以下是我的一些问题:
每个请求都有缓存吗?即多个缓存,或只是一个规范的实路缓存?
我注意到如果你转储缓存var_dump(realpath_cache_get())
并保持刷新页面 Ctrl + F5 ,缓存的转储有时会有一个不同的输出???这里发生了什么?
如何以及何时清除/清除缓存?后台进程,某种垃圾收集器。例如,它是一个垃圾收集器:什么时候运行,它运行的标准是什么?是每个请求,例如随机请求吗?我不知道,我只是在这里吐痰。
注意:您似乎可以通过调用clearstatcache(true)
手动清除缓存。
realpath_cache_size
"16K"
PHP_INI_SYSTEM
自PHP 5.1.0起可用。
realpath_cache_ttl
"120"
PHP_INI_SYSTEM
自PHP 5.1.0起可用。
(来自手册)
realpath_cache_size
integer
确定PHP使用的实际路径缓存的大小。在PHP打开许多文件的系统上应该增加这个值,以反映执行的文件操作的数量。
realpath_cache_ttl
integer
缓存给定文件或目录的实际路径信息的持续时间(以秒为单位)。对于文件很少更改的系统,请考虑增加该值。
答案 0 :(得分:5)
调用realpath()
时会填充Realpath缓存。
将从realpath()
缓存中快速提取对realpath
的同一文件的后续调用。
Realpath缓存与公共文件系统函数(stat
,file_exists
,...)使用的缓存不同。
Realpath缓存是针对每个进程的,并且其条目在realpath_cache_ttl
php.ini设置中指定的持续时间内保持活动状态。
答案 1 :(得分:-2)
PHP realpath函数测试$ path,指向目标文件/文件夹的路径检查文件是否退出,或者我们可以说相当于调用file_exists($ path)。
如果目标文件存在且不是符号链接(名称为“shortcut”的窗口),则返回文件名的绝对路径,不包含'/./'或'/../'
如果目标文件是符号链接,或者不存在,则realpath()返回FALSE。
var_dump (realpath (‘./Test.php’));
如果找到./Test.php文件路径,则输出为:
string ‘E: \ Dropbox \ My Dropbox \ code \ php \ test.php’ (length=48)
如果./path是查找test.php的符号链接,则输出为:
boolean false
如果./test.php找不到文件路径,则输出为:
boolean false
如果它在Windows平台下运行,则执行上面一行代码的结果,因为在Windows中,斜杠(/)和反斜杠()都可以用作目录分隔符。
var_dump (realpath (‘. \ Test.php’));
希望以上对PHP realpath路径的描述能够对每个人有所帮助。
缓存是按线程维护的,所以它不是灵丹妙药。
只有活动线程会清除其缓存,总共可能有几十个线程(例如php-fpm实例或prefork模式下的httpd子实例)。最重要的是,当启用open_basedir时,将禁用PHP实际路径缓存。
Filecache将文件缓存在Web服务器的本地磁盘上,但将所有stat()调用传递给dbstatcache。 Dbstatcache将统计信息缓存在数据库中,该数据库可供群集中的所有Web服务器访问(这是检测已缓存的文件是否已删除或更新所必需的)