php -v仅验证cli解释器存在且path正确,不能证明web集成、配置加载或扩展可用;完整验证需结合php --ini、php -r测试及info.php浏览器访问。

php -v 只能说明解释器存在,不能代表环境可用
执行 php -v 输出版本号,只证明 PHP 二进制文件可调用、PATH 配置正确。它完全绕过 Web 服务器、不加载 php.ini、也不触发任何扩展初始化逻辑。
常见误判场景:
-
php -v成功但php --ini显示Loaded Configuration File => (none)→ 所有扩展、时区、上传限制等配置全失效 -
php -r "echo date('Y');"报Warning: date(): It is not safe to rely on the system's timezone settings→date.timezone未设,后续脚本可能因致命错误中断 - CLI 下
mysqli可用,但 Web 环境里extension=mysqli在 apache2/php.ini 中被注释 → 数据库连不上,且无提示
info.php 是验证 Web 集成的唯一可靠方式
创建一个仅含 <?php phpinfo(); ?> 的文件,命名为 info.php,放到 Web 根目录(如 /var/www/html/ 或 C:\xampp\htdocs\),再访问 http://localhost/info.php。
成功的关键不是“看到页面”,而是确认三处真实值:
-
PHP Version行显示具体数字(如8.2.12),不是空白或??? -
Loaded Configuration File指向一个真实存在的.ini文件路径,且该文件中已启用你需要的扩展 -
Server API显示Apache 2.0 Handler、FPM/FastCGI或cgi-fcgi—— 若是CLI,说明你正在用命令行访问,而非 Web 请求
如果浏览器直接显示源码(即看到 <?php phpinfo(); ?>),说明 Web 服务器根本没加载 PHP 模块,Apache 缺少 LoadModule php_module,或 Nginx 未配置 fastcgi_pass。
探针 ≠ phpinfo(),但生产环境必须禁用 phpinfo()
所谓“PHP探针”,本质是封装了 phpinfo() 的诊断脚本,比如 probe.php 或 tz.php。它的作用和 info.php 完全一致,只是可能额外加了 IP 白名单、服务器信息打印或扩展检测逻辑。
但注意:phpinfo() 会暴露全部配置路径、扩展列表、环境变量甚至数据库连接串(若已配置)。一旦上传到线上服务器且未删除或限制访问,等于把服务器底裤扒给全网看。
安全操作必须做:
- 开发/测试机上用完立即删掉
info.php或probe.php - 绝不在生产环境保留任何含
phpinfo()的文件 - 如需长期监控,改用
ini_get('upload_max_filesize')、extension_loaded('pdo_mysql')等函数按需查询,不一次性吐出全部信息
真正容易被忽略的是配置生效链路
改完 php.ini 后,php --ini 看到路径是对的,不代表改动已生效——Web 服务进程不会自动 reload 配置。
不同场景下必须手动触发:
- Apache:运行
sudo systemctl reload apache2(Linux)或重启 Apache 服务(Windows) - PHP-FPM:运行
sudo systemctl reload php8.2-fpm(Ubuntu)或sudo service php-fpm reload - Nginx + FPM 组合:reload Nginx 不够,必须 reload FPM 进程本身
不 reload 就检查 info.php,你会看到旧配置依然在用,比如 max_execution_time 还是 30 秒,哪怕你刚改成 300 —— 这个坑,90% 的人第一次都会踩。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











