phpinfo() 不支持多语言切换,因其输出字符串硬编码于C源码中,不依赖locale、gettext或HTTP头;不存在任何配置或函数可使其显示中文。

phpinfo() 本身不支持多语言切换,也不读取 setlocale()、LANG 环境变量或 HTTP Accept-Language 头。它输出的文本是硬编码在 PHP 源码中的英文字符串(如 "PHP Version"、"Loaded Modules"),编译时即固化,运行时无法动态替换。
所以,**不存在“开启 phpinfo 多语言”或“设置 phpinfo 显示中文”的配置项或函数调用**。任何试图通过修改 php.ini、调用 setlocale() 或设置 $_SERVER['HTTP_ACCEPT_LANGUAGE'] 来改变 phpinfo() 输出语言的操作,全部无效。
为什么 phpinfo 不支持语言切换
PHP 的 phpinfo() 是一个纯 C 实现的内部函数,其输出内容直接来自 Zend 引擎源码中写死的字符串(例如 ext/standard/info.c 中的 "PHP Credits")。它不经过 PHP 用户层的国际化机制(如 gettext),也不依赖 ICU 或 locale 数据。即使你启用了 gettext 扩展、设置了 LC_ALL=zh_CN.UTF-8,phpinfo() 的标题和字段名仍为英文。
替代方案:自己实现可本地化的 info 页面
若需中文(或其他语言)显示的环境信息页,必须绕过 phpinfo(),手动收集并格式化关键信息。常见做法:
- 用
phpversion()、extension_loaded('pdo')、ini_get('memory_limit')等函数逐项获取 - 将字段名映射为中文(例如
'memory_limit' => '内存限制'),注意保持键值语义一致 - 对扩展列表用
get_loaded_extensions()+extension_loaded()组合判断状态 - 避免直接暴露敏感信息(如
phpinfo(INFO_ENVIRONMENT)可能含$_ENV或路径),生产环境务必过滤
'PHP 版本',
'extensions' => '已加载扩展',
'memory_limit' => '内存限制',
'upload_max_filesize' => '上传文件大小上限',
];
echo "" . $zh_map['php_version'] . ": " . phpversion() . "
";
echo "" . $zh_map['memory_limit'] . ": " . ini_get('memory_limit') . "
";
?>
临时调试:用浏览器翻译或本地化代理(不推荐)
某些浏览器(如 Chrome)会对纯 HTML 页面自动触发网页翻译,可能把 phpinfo() 输出的英文“翻译”成中文——但这只是前端渲染层的覆盖,非真实语言切换,且易出错(如把 GD、Zend OPcache 翻译成无意义词)。更不可靠的是用 Nginx/Apache 做响应体关键词替换(如用 sub_filter 把 "PHP Version" 替换为 "PHP 版本"),但会破坏 HTML 结构、误替代码片段、无法处理动态生成的模块名(如 "mysqli" → "MySQLi"),维护成本极高,线上严禁使用。
立即学习“PHP免费学习笔记(深入)”;
真正需要多语言系统信息页的场景,应该放弃phpinfo(),转向结构化采集 + 本地化模板。它的不可定制性不是 bug,而是设计使然——它本就只为开发者快速查证编译/配置状态而存在,不是用户界面组件。











