Linux下PHP配置的关键技巧
使用包管理器快速安装PHP及常用扩展(如MySQL、GD、MBString等),确保兼容性。例如Ubuntu/Debian使用sudo apt install php php-cli php-fpm php-mysql php-gd php-mbstring,CentOS使用sudo yum install php php-fpm php-mysqlnd php-gd。修改php.ini(路径可通过php -i | grep "Loaded Configuration File"获取)调整核心参数:memory_limit(建议128M-512M,根据应用需求调整)、max_execution_time(脚本最大执行时间,默认30秒,复杂应用可延长至300秒)、upload_max_filesize/post_max_size(文件上传大小限制,如20M)、date.timezone(时区设置,如Asia/Shanghai)。修改后需重启Web服务器(Apache:sudo systemctl restart apache2;Nginx:sudo systemctl restart nginx)或PHP-FPM(sudo systemctl restart php-fpm)使配置生效。
PHP-FPM是Linux下处理PHP脚本的高效进程管理器,需合理配置进程池参数以平衡性能与资源占用。编辑/etc/php-fpm.d/www.conf(或对应池配置文件),重点调整:
dynamic(动态调整进程数),避免static(固定进程数)浪费内存或ondemand(按需启动)延迟高;pm.max_children(最大进程数)根据服务器内存计算(如1GB内存可设为50,公式:内存总量/单个进程内存占用,单个进程约20-30M);pm.start_servers(初始进程数)设为max_children的1/4-1/2;pm.min_spare_servers(最小空闲进程数)和pm.max_spare_servers(最大空闲进程数)分别设为max_children的1/4和1/2,确保快速响应请求;pm.max_requests(每个进程处理的最大请求数,如500),防止内存泄漏导致进程崩溃。OPcache是PHP自带的字节码缓存工具,可避免重复编译PHP脚本,显著提升执行速度。启用步骤:
php.ini中zend_extension=opcache.so(Linux下路径可能为/usr/lib/php/xxxx/opcache.so);opcache.enable=1(开启OPcache)、opcache.enable_cli=1(命令行也启用);opcache.memory_consumption(缓存内存大小,如128M)、opcache.max_accelerated_files(加速的文件数量,如4000,根据项目文件数调整)、opcache.revalidate_freq(文件检查频率,如60秒,避免频繁检查影响性能)。启用后可通过phpinfo()查看OPcache状态。php.ini中设置disable_functions(如exec,system,passthru,shell_exec,curl_exec),防止恶意代码执行;open_basedir(如/var/www/html:/tmp)限制PHP脚本只能访问指定目录,避免越权访问;expose_php=Off(php.ini),避免向外界暴露PHP版本信息;display_errors=Off、log_errors=On(php.ini),将错误信息记录到日志(error_log=/var/log/php_errors.log),防止敏感信息泄露。libapache2-mod-php模块(sudo apt install libapache2-mod-php),启用模块(sudo a2enmod php),无需额外配置即可在Apache中处理.php文件;/etc/nginx/sites-available/default),添加location ~ \.php$块:location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php-fpm.sock; # 或127.0.0.1:9000(TCP方式)
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
重启Nginx(sudo systemctl restart nginx)使配置生效。php.ini中error_log指向有效路径(如/var/log/php_errors.log),并设置log_errors=On,便于排查问题;php-fpm.conf中开启pm.status_path = /status,通过Nginx/Apache配置访问路径(如location /status { fastcgi_pass unix:/var/run/php/php-fpm.sock; include fastcgi_params; }),实时查看PHP-FPM进程状态;top、htop监控CPU、内存使用,tail -f /var/log/php_errors.log实时查看错误日志,及时发现性能瓶颈或异常。