当前位置:首页 > 知识

phpinfo 怎么用

你上传了一个 PHP 文件到服务器,浏览器打开却是一片空白,或者直接下载了源码。这时候第一反应通常是:PHP 到底装没装?装了什么版本?有哪些扩展?phpinfo() 就是回答这些问题最直接的工具。

它的用法简单到有点过分。新建一个文件,名字随意,比如 info.php,里面写这么几行:

<?php phpinfo(); ?>

保存,丢到网站根目录,浏览器访问 http://你的域名/info.php。如果 PHP 正常运转,你会看到一个紫绿相间、密密麻麻的表格页面。上面列着 PHP 版本、编译参数、已加载的扩展、环境变量、HTTP 头信息,甚至包括当前脚本的绝对路径。信息量大得吓人,第一次看容易眼花。

我见过不少人把 phpinfo() 当成“测试 PHP 是否运行”的开关,这没错,但它能做的远不止这个。比如你装了个扩展,代码里调用却报 undefined function,去 phpinfo 页面搜一下扩展名,立刻就知道有没有加载成功。再比如上传文件大小限制、内存限制、时区设置,这些 php.ini 里的配置项,在 phpinfo 里都有对应的 Local Value 和 Master Value 两列,一眼就能看出哪个配置被覆盖了。

有个细节值得留意:phpinfo 输出的 HTML 结构里,每个配置项都带着 class="v" 之类的标记。早年有人写爬虫抓 phpinfo 页面来收集服务器信息,虽然现在多数场景下这招不灵了,但足以说明这个页面暴露的信息有多细。

正因为信息太细,安全风险也跟着来。任何能访问 info.php 的人,都能看到服务器上装了哪些软件、路径长什么样、有没有开启危险模块。所以生产环境上,这个文件绝对不能留着。正确的做法是:本地或测试环境用完就删,或者用 IP 白名单限制访问。我自己的习惯是,临时建一个,看完立刻 rm 掉,绝不过夜。

如果你不想新建文件,也有别的路子。命令行下直接跑 php -i,输出内容和网页版基本一致,只是格式是纯文本。适合 SSH 连上服务器快速查一下。另外 php -m 只列出已加载的模块,比翻整个 phpinfo 页面快得多。还有 php -r "phpinfo();" 这种写法,不依赖文件,临时用一下挺方便。

有人问过:为什么我访问 info.php 显示的是源码而不是渲染后的页面?八成是 Web 服务器没把 .php 交给 PHP 处理器。检查 Nginx 的 location ~ \.php$ 配置,或者 Apache 的 AddType application/x-httpd-php .php 有没有生效。这时候 phpinfo 反而帮不上忙,得先解决服务器配置问题。

还有一种情况:页面出来了,但顶部有一堆 Warning,说 phpinfo() 被 disable_functions 禁用了。有些虚拟主机为了安全会这么做。那就换 php -i 命令行,或者写个 <?php echo phpversion(); ?> 至少看个版本号。

我自己的经验是,phpinfo 最适合用在两个时刻:一是刚配好环境,验证 PHP 能不能跑;二是调试某个扩展或配置为什么不生效。平时不用惦记它,更不要把它留在线上。花三十秒建个文件,看完删掉,比翻文档猜配置快得多。

最后提一句,phpinfo() 可以带参数,比如 phpinfo(INFO_MODULES) 只显示模块信息,phpinfo(INFO_VARIABLES) 只显示环境变量。不过大多数人直接用默认的 INFO_ALL 就够了。参数这东西,知道有这么回事就行,真要用的时候再查手册。

分享到: