错误表现:PHP-FPM日志中出现child exited on signal 11 (SIGSEGV),或网站返回502 Bad Gateway。
原因:PHP代码存在内存泄漏、无限循环,或PHP-FPM资源配置不足(如pm.max_children过小)。
解决方法:
/etc/php/7.x/fpm/pool.d/www.conf),增加pm.max_children(如从5调整为10)、pm.start_servers等参数,提升并发处理能力;sudo systemctl restart php7.x-fpm。错误表现:脚本运行时报错Class 'PDO' not found、Call to undefined function mysqli_connect()等。
原因:未安装对应的PHP扩展,或扩展未启用。
解决方法:
sudo apt install php7.x-pdo php7.x-mysqli;sudo systemctl restart php7.x-fpm(若使用Apache,需重启apache2服务)。错误表现:修改php.ini后未生效,或启动服务时报错Failed to parse configuration file。
原因:未修改正确的php.ini文件(如CLI与Web模式的php.ini路径不同),或配置文件存在语法错误。
解决方法:
php --ini命令查看当前PHP使用的php.ini路径(CLI模式);phpinfo()页面(<?php phpinfo(); ?>),在“Loaded Configuration File”项中查看路径;php.ini语法:php -l /path/to/php.ini,修复语法错误后重启服务。错误表现:网站无法访问,日志中出现Permission denied,或无法上传文件。
原因:Web服务器用户(如www-data)对网站目录或文件的权限不足。
解决方法:
www-data:sudo chown -R www-data:www-data /var/www/html;sudo chmod -R 755 /var/www/html(注意:敏感文件如wp-config.php需限制为600)。错误表现:Nginx返回502错误,日志中显示upstream prematurely closed connection或no such file or directory。
原因:Nginx配置中的fastcgi_pass未指向正确的PHP-FPM监听地址(如socket文件不存在或路径错误)。
解决方法:
listen配置(/etc/php/7.x/fpm/pool.d/www.conf):若使用socket,路径应为/var/run/php/php7.x-fpm.sock;若使用TCP,需指定127.0.0.1:9000;fastcgi_pass指令,使其与PHP-FPM的listen一致(如fastcgi_pass unix:/var/run/php/php7.x-fpm.sock;);www-data用户对socket文件有读写权限:sudo chown www-data:www-data /var/run/php/php7.x-fpm.sock;sudo systemctl restart nginx php7.x-fpm。错误表现:脚本需要PHP 7.4但实际运行PHP 8.2,或update-alternatives切换版本后未生效。
原因:系统中安装了多个PHP版本,未正确配置默认版本。
解决方法:
update-alternatives切换默认PHP版本:sudo update-alternatives --config php,选择对应版本;sudo a2dismod php8.2 && sudo a2enmod php7.4 && sudo systemctl restart apache2;php -v(CLI)或创建phpinfo()页面查看Web模式版本。错误表现:systemctl restart php7.x-fpm报错Failed to start php7.x-fpm.service,或日志中出现bind() to 0.0.0.0:9000 failed。
原因:配置文件错误、端口被占用,或/var/run/php目录缺失。
解决方法:
sudo php-fpm7.x -t,修复错误;sudo netstat -tulnp | grep 9000,若被占用,修改php.ini中的listen端口或停止占用进程;/var/run/php目录并设置权限:sudo mkdir -p /var/run/php && sudo chown www-data:www-data /var/run/php;sudo systemctl restart php7.x-fpm。解决方法:
phpinfo()或php -i获取):sudo tail -f /var/log/php7.x-fpm.log;sudo tail -f /var/log/nginx/error.log;sudo journalctl -xe,过滤PHP相关错误(如journalctl -u php7.x-fpm)。