Linux服务器PHP配置常见问题与解决
一 定位与基础检查
php -i | grep 'Loaded Configuration File' 或 php --ini。php -m 确认如 mysqli/pdo_mysql/gd/mbstring 等扩展是否启用。/var/log/php-fpm.log 或按版本 /var/log/php7.x-fpm.log)、Apache 错误日志(/var/log/httpd/error_log)、Nginx 错误日志(/var/log/nginx/error_log)。systemctl restart httpd;PHP-FPM 用 systemctl restart php-fpm;Nginx 用 systemctl restart nginx。二 配置与集成类问题
php --ini 或 php -i 确认后再修改。extension=mysqli.so);CLI 与 FPM 可能分别有独立配置,需分别检查。LoadModule php_module modules/libphp.so,以及 AddType application/x-httpd-php .php。fastcgi_pass 与 FPM 的 listen 一致(如 127.0.0.1:9000 或 unix:/run/php/php7.x-fpm.sock),并设置 SCRIPT_FILENAME $document_root$fastcgi_script_name;。setenforce 0 验证;生产环境建议设置正确上下文(如 semanage fcontext -a -t httpd_sys_rw_content_t "/path(/.*)?" && restorecon -Rv /path)而非直接关闭。firewall-cmd --permanent --add-service=http --add-service=https && firewall-cmd --reload。三 PHP-FPM 与性能类问题
netstat -tulnp | grep 9000 或 lsof /run/php/php7.x-fpm.sock),必要时修改 listen 端口/套接字或释放占用进程。user/group 与 Web 服务一致。php-fpm7.x -t 校验语法;合理设置 pm(dynamic/static/ondemand)、pm.max_children(按内存预算计算)、pm.start_servers/min_spare_servers/max_spare_servers、pm.max_requests(如 500–5000 用于回收潜在泄漏进程)。max_execution_time 对 FPM 请求的影响;过长会导致进程被长请求占用,建议设置合理值(如 30s),并为如 file_get_contents 设置上下文超时。tail -f 实时查看执行慢的调用栈,快速定位数据库/外部接口瓶颈。四 常见报错速查表
| 症状 | 高频原因 | 快速排查 | 修复要点 |
|---|---|---|---|
| 访问 .php 被下载 | Nginx 未把 PHP 交给 FPM | 检查 location ~ \.php$ 与 fastcgi_pass |
使用正确套接字/端口,设置 SCRIPT_FILENAME $document_root$fastcgi_script_name; |
| 502 Bad Gateway | FPM 未启动/监听不一致/权限不对 | systemctl status php-fpm、netstat/lsof、FPM 与 Nginx 用户 |
启动 FPM,统一 listen 与 fastcgi_pass,修正目录/套接字权限 |
| 403 Forbidden | 目录权限/属主错误或 SELinux 上下文 | ls -ld、查看 SELinux 状态 |
目录 755、文件 644、属主匹配 Web 用户;SELinux 设置正确上下文 |
| Call to undefined function | 扩展未安装/未启用 | php -m 检查 |
安装如 php-mysqlnd/php-gd/php-mbstring 并在 php.ini 启用 |
| 数据库连接失败 | 扩展缺失或 socket 不一致 | 检查 mysqli_connect() 报错与 MySQL socket |
启用 pdo_mysql/mysqli,统一 pdo_mysql.default_socket/mysqli.default_socket 与 MySQL 配置 |
| Allowed memory size exhausted | memory_limit 过小 |
查看当前值与错误日志 | 在 php.ini 或 FPM 池设置(如 512M),必要时脚本内 ini_set |
| 上传大文件失败 | 上传/POST 限制过小 | 检查 php.ini 相关项 |
提升 upload_max_filesize(如 100M)与 post_max_size(如 110M) |
| 命令行与 Web 行为不一致 | CLI 与 FPM 使用不同 php.ini | php --ini 与 phpinfo() 对比 |
分别修改 CLI 与 FPM 的配置并重启对应服务 |