PHP源码安装成功需三步验证:先用php -v确认CLI运行,再通过phpinfo()检查Web SAPI与扩展加载,最后用最小脚本验证环境逻辑;关键要确保php.ini路径正确且CLI/FPM配置同步。

PHP 源码安装成功与否,不能只看 make install 是否报错——得让 PHP 真正跑起来,且输出你可控的内容。最直接的验证方式就两个:php -v 看基础运行,phpinfo() 看模块与配置全貌,再加一个最小脚本排除 Web 服务器干扰。
确认 CLI 模式下 PHP 可执行
这是第一道门槛。源码安装后,php 命令可能不在 /usr/bin 或 /usr/local/bin,而是在你指定的 --prefix 路径下(比如 /usr/local/php)。常见错误是直接敲 php -v 报 command not found。
- 先查安装路径:进入源码目录执行
make install后,检查--prefix参数值,比如--prefix=/usr/local/php,那二进制文件就在/usr/local/php/bin/php - 临时测试:运行
/usr/local/php/bin/php -v,应输出版本号和已编译模块(如cli,curl) - 若要全局可用,把
/usr/local/php/bin加进$PATH(改~/.bashrc或/etc/profile),然后source并重新登录终端 - 注意:别用
which php判断——它可能返回系统旧版 PHP,要用type -a php查所有匹配项
用 phpinfo() 检查 Web SAPI 与扩展加载情况
phpinfo() 不只是“显示一堆信息”,它是唯一能确认 Apache/Nginx 是否真正调用到你刚编译的 PHP、以及 GD/curl/openssl 等扩展是否被正确启用的方式。很多新手卡在这步,以为 CLI 能跑就等于 Web 能跑。
- 在 Web 服务器文档根目录(如
/var/www/html)下新建test.php,内容仅一行: - 确保 Web 服务器已配置好 PHP SAPI(Apache 需
LoadModule php_module+AddHandler;Nginx 需fastcgi_pass指向php-fpm进程) -
浏览器访问
http://localhost/test.php,重点核对三处:
– “Loaded Configuration File” 是否指向你编译时指定的php.ini(如/usr/local/php/lib/php.ini)
– “Server API” 显示Apache 2.0 Handler或FPM/FastCGI,而非CLI
– 找到你关心的扩展名(如mysqli,opcache),确认其状态为enabled - 如果页面空白或 500 错误:检查 Web 服务器错误日志,大概率是
php-fpm没启、socket 路径不对,或php.ini中extension_dir指向了错误的 modules 目录(应为/usr/local/php/lib/php/extensions/no-debug-non-zts-20220829/这类带 ts/zts 标识的子目录)
写个最小脚本绕过 Web 服务器验证逻辑执行
有时候 phpinfo() 能跑,但业务代码出问题,可能是 open_basedir、disable_functions 或时区设置等细节被忽略。一个不依赖任何扩展的脚本,能快速定位是不是环境本身的问题。
立即学习“PHP免费学习笔记(深入)”;
- 新建
hello.php,内容: - 在 CLI 下运行:
/usr/local/php/bin/php hello.php→ 应输出当前时间 - 在 Web 下访问该文件 → 时间必须和服务器系统时间一致(可比对
date命令),否则说明date.timezone未在php.ini中设置,或设置错误(如写成Asia/Shanghai而非Asia/Shanghai—— 实际这个是对的,但常有人拼错成ShangHai或漏掉斜杠) - 如果 CLI 正常但 Web 下报
Warning: Unknown: failed to open stream,基本是 Web 服务器用户(如www-data)没有读取该 PHP 文件的权限,不是 PHP 安装问题
源码安装最易被忽略的点,其实是 php.ini 的位置和内容——php -v 不读它,phpinfo() 才读;而很多人只改了 CLI 的 php.ini,却没同步改 FPM 的配置。验证时务必盯住 phpinfo() 页面顶部那行 “Loaded Configuration File”。











