10

我一直无法弄清楚真实路径缓存实际上在做什么。

以下是我的一些问题:

  • 究竟什么时候缓存了路径,在什么条件下它可能不会被缓存?

  • 它是如何缓存的?在内存中,在文件系统上,还有别的吗?如果在文件系统上,文件在哪里?

  • 每个请求都有缓存吗?即是多个缓存,还是只有一个规范的真实路径缓存?

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

4

2 回答 2

5

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

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

Realpath 缓存与常见文件系统函数 ( stat, file_exists, ...) 使用的缓存不同。

realpath_cache_ttlRealpath 缓存是每个进程的,并且它的条目在php.ini 设置中指定的持续时间内保持活动状态。

于 2015-12-04T11:09:20.880 回答
-2

PHP realpath 函数测试$path,指向目标文件/文件夹的路径来检查文件是否存在,或者可以说相当于调用file_exists($path)。

如果目标文件存在且不是符号链接(windows下名为“shortcut”),则返回文件名的绝对路径,不包含'/./'或'/../'</p>

如果目标文件是符号链接,或者不存在,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 realpath 缓存将被禁用。

Filecache 将文件缓存在网络服务器的本地磁盘上,但会将所有 stat() 调用传递给 dbstatcache。Dbstatcache 将统计信息缓存在集群中所有 Web 服务器都可以访问的数据库中(这是检测已缓存文件是否被删除或更新所必需的)

于 2013-03-04T05:47:41.157 回答