问题表现:修改PHP配置时,不清楚php.ini文件的具体路径,导致无法生效。
解决方法:通过phpinfo()函数或命令行工具查找路径。在PHP脚本中创建phpinfo.php(内容为<?php phpinfo(); ?>),访问该页面查找“Loaded Configuration File”字段;或使用命令php -i | grep 'Loaded Configuration File'直接获取路径。找到路径后,用文本编辑器修改即可。
问题表现:运行PHP脚本时报错“Call to undefined function xxx()”(如mysqli_connect、gd_imagecreate),或编译安装时提示“Could not find libxxx.so”。
解决方法:
sudo apt-get install php-mysqli php-gd,CentOS/RHEL用sudo yum install php-mysqli php-gd)。.so文件,需安装对应的开发库(如libxml2-dev、libssl-dev),再重新编译PHP或扩展。问题表现:
chmod 755 yourfile.php),上传目录可写(chmod 775 /path/to/upload)。www-data用户运行,需将文件所有者改为该用户(chown www-data:www-data yourfile.php)。问题表现:PHP-FPM无法启动,报错“bind(): Address already in use”(如9000端口被占用)。
解决方法:
lsof -i :9000或netstat -tulnp | grep 9000查看占用端口的进程ID(PID)。kill -9 PID结束;若需保留,修改PHP-FPM配置文件(如/etc/php/7.4/fpm/pool.d/www.conf)中的listen参数(如改为listen = 9001),并重启PHP-FPM(sudo systemctl restart php7.4-fpm)。问题表现:
pm.max_children设置过大,导致内存耗尽);pm.start_servers设置过小,无法及时处理请求)。dynamic(动态调整)或ondemand(按需启动),避免static(固定数量)浪费资源。pm.max_children:根据服务器内存计算(如每进程占用100MB,1GB内存可设为1000/100=10);pm.start_servers:设置为pm.max_children的1/4~1/2(如pm.max_children=50,则设为25);pm.min_spare_servers/pm.max_spare_servers:保持空闲进程在合理范围(如5~35),避免频繁创建/销毁进程。sudo systemctl restart php7.4-fpm使配置生效。问题表现:生产环境中PHP错误信息直接显示在浏览器(如语法错误、数据库报错),泄露服务器路径、代码逻辑等敏感信息。
解决方法:
php.ini中设置display_errors = Off,或在脚本中添加ini_set('display_errors', 0);。log_errors = On,并指定日志路径(如error_log = /var/log/php_errors.log),便于排查问题。php.ini中设置expose_php = Off,移除HTTP响应头中的“X-Powered-By: PHP”信息。问题表现:PHP脚本执行慢,尤其是频繁访问的页面(如首页、API接口),重复编译消耗大量CPU资源。
解决方法:
php.ini中添加或修改以下参数:opcache.enable=1
opcache.memory_consumption=128 # 内存大小(MB),根据服务器调整
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60 # 文件修改后重新编译的时间间隔(秒)
sudo systemctl restart php7.4-fpm),使OPcache生效。问题表现:Nginx/Apache访问PHP页面报“502 Bad Gateway”,或PHP-FPM日志显示“connect() failed”(如connect() to unix:/run/php/php7.4-fpm.sock failed)。
解决方法:
fastcgi_pass与PHP-FPM的listen参数一致(如均使用unix:/run/php/php7.4-fpm.sock或127.0.0.1:9000)。www-data)对socket文件有读写权限(chmod 660 /run/php/php7.4-fpm.sock,并设置listen.owner = www-data、listen.group = www-data)。sudo systemctl status php7.4-fpm确认PHP-FPM是否正常运行,若未运行则启动(sudo systemctl start php7.4-fpm)。