CentOS 上 PHP 配置失败的定位与修复步骤
一 快速定位错误来源
- 查看 PHP 配置与加载文件:运行 php --ini,确认 Loaded Configuration File(如 /etc/php.ini)与 Scan this dir for additional .ini files(如 /etc/php.d/)。
- 明确运行形态:是 Apache + mod_php,还是 Nginx + PHP-FPM。
- 查看对应日志:
- Web 服务器日志:Apache 为 /var/log/httpd/error_log;Nginx 为 /var/log/nginx/error.log。
- PHP-FPM 日志:常见为 /var/log/php-fpm/error.log(具体以 /etc/php-fpm.d/www.conf 或 /etc/php-fpm.conf 中的 error_log 为准)。
- PHP 自身错误日志:在 php.ini 的 error_log 项指定(如 /var/log/php_errors.log)。
- 动态验证配置语法:
- PHP-FPM:php-fpm -t
- Apache:httpd -t
- Nginx:nginx -t
- 临时打开错误显示(仅用于排查,生产环境请关闭):在 php.ini 中设置 display_errors = On、log_errors = On,并确保 error_log 指向可写路径。
二 常见场景与对应修复
- 修改 php.ini 后未生效:重启对应服务。
- Apache:systemctl restart httpd
- Nginx + PHP-FPM:systemctl restart nginx && systemctl restart php-fpm
- 扩展缺失或版本不匹配:
- 查看已启用扩展:php -m
- 安装所需扩展(示例):yum install php-mysql php-gd php-mbstring
- SELinux 拦截:
- 临时放宽:setenforce 0
- 永久调整:编辑 /etc/selinux/config 将 SELINUX=permissive/disabled,重启生效(不建议长期关闭)。
- 文件权限问题:确保网站目录与日志目录对 Web/PHP-FPM 运行用户可写,常见权限为 755(目录)与 644(文件)。
- 配置语法或路径错误:先执行上节的 -t 自检,再依据报错修正(如 php.ini 的 extension=、date.timezone 等)。
三 编译安装 PHP 时报错的常见修复
- 缺少开发库(按需安装):
- libxml2 / libxml2-devel(解决 “xml2-config not found”)
- openssl / openssl-devel
- curl / curl-devel
- bzip2 / bzip2-devel
- libjpeg / libjpeg-devel、libpng / libpng-devel、freetype-devel
- gmp-devel、ncurses / ncurses-devel
- unixODBC-devel、pspell-devel
- mysql-devel(或对应版本的客户端开发包)
- 示例:yum install libxml2-devel openssl-devel curl-devel bzip2-devel libjpeg-devel libpng-devel freetype-devel gmp-devel ncurses-devel unixODBC-devel pspell-devel mysql-devel
- 路径或库文件找不到:
- 64 位系统库路径问题可建立软链(示例):ln -s /usr/lib64/libjpeg.so /usr/lib/libjpeg.so、ln -s /usr/lib64/libpng.so /usr/lib/libpng.so
- 修改后重新 configure/make/make install。
四 一键排查清单与验证
- 执行:php --ini(确认配置文件与扫描目录)
- 执行:php -v(确认 CLI 可用)与 php -m(确认扩展)
- 查看:tail -f /var/log/php-fpm/error.log 或 /var/log/httpd/error_log 或 /var/log/nginx/error.log(定位具体报错)
- 自检:php-fpm -t、httpd -t、nginx -t(语法与包含路径)
- 创建测试文件 /var/www/html/info.php:
- 内容:
- 访问:http://服务器IP/info.php(核对 Loaded Configuration File、error_log、已启用扩展等)
- 修复后重启:systemctl restart httpd 或 systemctl restart nginx && systemctl restart php-fpm。