PHP实时路径缓存如何工作?

时间:2013-03-04 01:30:03

标签: php caching realpath

我一直无法弄清楚实际做的实际路径缓存是什么。

以下是我的一些问题:

  • 什么时候缓存路径,并且在什么标准下可能不会缓存?
  • 如何缓存?在内存中,在文件系统上还有别的吗?如果在文件系统上,文件在哪里?
  • 每个请求都有缓存吗?即多个缓存,或只是一个规范的实路缓存?

    我注意到如果你转储缓存var_dump(realpath_cache_get())并保持刷新页面 Ctrl + F5 ,缓存的转储有时会有一个不同的输出???这里发生了什么?

  • 如何以及何时清除/清除缓存?后台进程,某种垃圾收集器。例如,它是一个垃圾收集器:什么时候运行,它运行的标准是什么?是每个请求,例如随机请求吗?我不知道,我只是在这里吐痰。

    注意:您似乎可以通过调用clearstatcache(true)手动清除缓存。

realpath_ *函数

配置选项

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缓存给定文件或目录的实际路径信息的持续时间(以秒为单位)。对于文件很少更改的系统,请考虑增加该值。

2 个答案:

答案 0 :(得分:5)

调用realpath()时会填充Realpath缓存。

将从realpath()缓存中快速提取对realpath的同一文件的后续调用。

Realpath缓存与公共文件系统函数(statfile_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服务器访问(这是检测已缓存的文件是否已删除或更新所必需的)