你上传了一个 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 能不能跑;二是调试某个扩展或配置为什么不生效。平时不用惦记它,更不要把它留在线上。花三十秒建个文件,看完删掉,比翻文档猜配置快得多。
最后提一句,
顶: 464踩: 95195phpinfo()可以带参数,比如phpinfo(INFO_MODULES)只显示模块信息,phpinfo(INFO_VARIABLES)只显示环境变量。不过大多数人直接用默认的INFO_ALL就够了。参数这东西,知道有这么回事就行,真要用的时候再查手册。






评论专区