如何查询当前运行PHP脚本已加载的.user.ini文件?
查看已加载的.user.ini文件的方法
你的思路基本是正确的——PHP目前没有提供直接返回已加载.user.ini文件路径的内置函数,最可靠的方式就是遍历当前脚本所在目录到文档根目录的所有层级,检查是否存在该文件。
具体实现逻辑
- 从当前脚本的目录出发(用
__DIR__可直接获取) - 逐层向上遍历父目录,直到到达文档根目录(通过
$_SERVER['DOCUMENT_ROOT']获取) - 对每个目录检查
.user.ini是否存在,存在则记录路径
示例代码
function findLoadedUserIniFiles() { $currentDir = realpath(__DIR__); $docRoot = realpath($_SERVER['DOCUMENT_ROOT']); $iniFiles = []; while ($currentDir && $currentDir !== $docRoot) { $iniPath = $currentDir . DIRECTORY_SEPARATOR . '.user.ini'; if (file_exists($iniPath)) { $iniFiles[] = $iniPath; } $parentDir = dirname($currentDir); // 防止到达系统根目录后无限循环 if ($parentDir === $currentDir) { break; } $currentDir = $parentDir; } // 最后检查文档根目录的.user.ini $rootIniPath = $docRoot . DIRECTORY_SEPARATOR . '.user.ini'; if (file_exists($rootIniPath)) { $iniFiles[] = $rootIniPath; } return $iniFiles; } // 使用示例 $loadedUserInis = findLoadedUserIniFiles(); print_r($loadedUserInis);
补充说明
- PHP加载
.user.ini的规则是:请求PHP文件时,从该文件所在目录开始向上遍历到文档根目录,加载所有存在的.user.ini文件,越靠近当前脚本的目录,配置优先级越高(后加载的同配置项会覆盖先加载的)。 - 注意
.user.ini的生效受user_ini.filename(默认值.user.ini)和user_ini.cache_ttl(默认缓存300秒)影响,修改文件后需等待缓存过期,或重启PHP-FPM(FastCGI模式下)才能立即生效。
内容的提问来源于stack exchange,提问作者Shores
相关产品推荐
相关产品推荐

