realpath_cache_size配置未生效的直接原因是php进程未加载修改后的php.ini或被后续.conf文件覆盖,需用php --ini和php -i | grep realpath_cache_size验证实际值。

realpath_cache_size 配置项根本没生效
直接原因:PHP 进程压根没读到你改的 php.ini,或者读到了但配置被后续扫描目录里的 .conf 文件覆盖了。用 php --ini 查看实际加载路径,再用 php -i | grep realpath_cache_size 确认当前值——别信编辑器里你刚保存的那个文件。
extension_dir 是相对路径导致 realpath 缓存失效
PHP 8.3 默认 extension_dir = "ext",这是相对路径。Web 服务(如 php-fpm)启动时工作目录不固定,realpath() 解析失败,缓存无法建立,realpath_cache_size() 返回值始终偏低甚至为 0。这不是缓存大小设小了,是缓存根本没机会写入。
- Windows 必须写成
extension_dir = "C:/php/ext" - macOS/Homebrew 查
php -i | grep extension_dir,典型路径是/opt/homebrew/lib/php/20230831 - Linux 同时检查 CLI 和 FPM 的
php.ini,路径常分别为/etc/php/8.3/cli/php.ini和/etc/php/8.3/fpm/php.ini
realpath_cache_ttl 太短或 size 不够用
即使配置生效,realpath_cache_size 设太小(比如默认的 4096 字节)会导致频繁驱逐,realpath_cache_size() 返回值波动大;realpath_cache_ttl 设太短(比如 30 秒)会让缓存刚建好就过期。线上建议:
-
realpath_cache_size = 4096K(注意单位是 K,不是字节) -
realpath_cache_ttl = 3600(1 小时,静态资源多的站点可延长) - 改完必须重启 php-fpm 或 Apache,CLI 模式不重启也能看到新值,但 Web 请求不会
OPcache 启用后干扰 realpath 缓存统计
realpath_cache_size() 返回的是当前内存中已缓存的条目数,不是容量上限。如果 OPcache 开启且大量文件被缓存,realpath 调用可能被优化绕过,导致返回值偏小——这不代表配置无效,而是 PHP 在底层做了路径解析捷径。此时更应关注实际性能:用 strace -e trace=openat,stat php -r "realpath('vendor/autoload.php');" 看系统调用次数是否明显下降。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











