You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何realpath()处理//localhost路径首次调用耗时约30秒?

问题解答:realpath() 异常耗时与后续请求加速原因分析

1. realpath() 首次执行耗时30秒的核心原因

你的代码里用了 realpath("//localhost/mywebsite/config/some_config_file.yml"),这个路径是Windows UNC格式的网络共享路径,结合你的Win10+PHP7.2+Apache环境,导致30秒耗时的关键因素有两个:

  • 网络路径解析超时:在Windows系统中,访问//localhost开头的UNC路径时,系统会尝试通过SMB协议查找对应的网络共享资源。但这个共享要么未配置、要么路径不存在,Windows网络操作的默认超时时间刚好在30秒左右——系统会一直等待共享连接响应,直到超时才返回失败(也就是realpath()返回false)。
  • Xdebug的额外影响:虽然不是主因,但开启Xdebug会增加PHP的运行开销,可能让原本的超时等待显得更突出,不过核心还是网络路径的解析超时。

2. 后续请求耗时大幅缩短的原因:不是OPcache,是PHP的Realpath Cache

你猜测的OPcache方向不对哦,OPcache主要负责缓存编译后的PHP脚本字节码,和文件路径解析的结果无关。真正起作用的是PHP内置的Realpath Cache:

  • PHP默认会缓存realpath()的调用结果(不管成功还是失败),缓存的配置可以在php.ini里通过realpath_cache_size(缓存大小)和realpath_cache_ttl(缓存有效期,默认120秒)调整。
  • 第一次调用realpath()后,PHP已经把“该路径解析失败,返回false”这个结果存在了Realpath Cache里,后续再调用相同的路径字符串时,直接从缓存取结果,完全跳过了网络路径解析的步骤,所以耗时骤降到毫秒级。

内容的提问来源于stack exchange,提问作者fridde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:02:42