在老旧PHP 5服务器中如何查看PHP.ini的非默认配置项?
如何快速找出PHP 5中偏离默认值的INI配置项
完全懂你的痛点!在老旧PHP 5服务器上翻INI文件找修改项确实头疼,尤其是还要区分哪些是默认配置、哪些被改过——不管是来自主INI文件、.htaccess还是代码里的ini_set()调用。这里有几个实用的方法帮你高效排查:
1. 命令行一键对比默认与当前配置
直接在服务器终端运行这个命令,它会自动对比所有配置项的默认值和当前生效的全局值,把有差异的项列出来:
php -r '$defaults = ini_get_all(null, true); $current = ini_get_all(); foreach ($current as $key => $val) { if ($val["global_value"] !== $defaults[$key]["global_value"]) { echo "$key: default=" . $defaults[$key]["global_value"] . ", current=" . $val["global_value"] . "\n"; } }'
原理很简单:ini_get_all(null, true)会返回原生默认配置,不带参数的ini_get_all()返回当前生效的配置,循环对比后输出差异项,连默认值和当前值都给你标得清清楚楚。
2. 用phpinfo()做文本对比
如果需要更全面的视角,包括环境变量、模块信息等,可以用文本版phpinfo对比:
- 先导出当前服务器的PHP信息:
php -i > current_phpinfo.txt - 找一份同版本PHP 5的默认phpinfo文本(可以在干净的同版本测试环境里导出,或者参考官方文档里的默认配置)
- 用diff工具对比两个文件:
diff default_phpinfo.txt current_phpinfo.txt
这样所有被修改过的配置、加载的额外模块都会被高亮出来,适合彻底排查。
3. 网页版可视化差异表格
如果能访问服务器的网页,写个简单的PHP脚本就能生成直观的对比表格:
<?php // 获取默认配置和当前生效配置 $default_config = ini_get_all(null, true); $current_config = ini_get_all(null, true); // 输出HTML表格 echo "<h2>PHP 5 非默认INI配置项</h2>"; echo "<style>table {border-collapse: collapse;} th, td {border:1px solid #ccc; padding:8px; text-align:left;}</style>"; echo "<table>"; echo "<tr><th>配置项名称</th><th>默认值</th><th>当前全局值</th><th>当前局部值</th></tr>"; foreach ($current_config as $key => $config) { // 对比全局值,找出非默认项 if ($config['global_value'] !== $default_config[$key]['global_value']) { echo "<tr>"; echo "<td>$key</td>"; echo "<td>" . htmlspecialchars($default_config[$key]['global_value']) . "</td>"; echo "<td>" . htmlspecialchars($config['global_value']) . "</td>"; echo "<td>" . htmlspecialchars($config['local_value']) . "</td>"; echo "</tr>"; } } echo "</table>"; ?>
把这个脚本传到服务器上访问,就能看到所有被修改的配置,还能区分全局配置(比如php.ini里的设置)和局部配置(比如.htaccess或ini_set()改的值)。
小提醒
- PHP 5的不同小版本(比如5.2和5.6)默认配置可能有差异,一定要找同版本的默认值来对比,避免误判。
- CLI模式和WEB模式的PHP配置可能分开(比如用php.ini和php-cli.ini),排查时要分别用命令行和网页脚本测试,确保覆盖所有场景。
内容的提问来源于stack exchange,提问作者Patrick M
相关产品推荐
相关产品推荐

