安装时报 500 错误、白屏、超时,九成以上不是程序本身写坏了,而是运行环境的四类问题:日志没开看不到真错、文件权限不对、PHP 版本或扩展缺失、执行时间和请求体被默认限制卡住。按「看日志 → 查权限 → 对版本 → 调超时」的顺序走,绝大多数安装失败能在 10 分钟内定位到具体一行报错。
500 错误怎么排查?先看日志再改配置
结论:500 是服务器内部错误,浏览器永远不会告诉你原因,第一步必须是看服务器错误日志,而不是反复重装。
PHP 环境下先把错误显示打开:在 php.ini 里设 display_errors = On、error_reporting = E_ALL,或者不改全局配置,直接在安装入口文件顶部临时加 ini_set('display_errors', 1); error_reporting(E_ALL);。同时开一个终端跟日志,Nginx 是 tail -f /var/log/nginx/error.log,Apache 是 tail -f /var/log/apache2/error.log,PHP-FPM 是 /var/log/php-fpm/error.log。刷新一次安装页面,最后 20 行基本就是根因。
常见根因有三类:一是目录权限,Linux 下目录建议 755、文件 644,属主给 Web 运行用户(Debian/Ubuntu 通常是 www-data,CentOS 是 nginx 或 apache),用 chown -R www-data:www-data 站点目录 一次修好;二是伪静态没配,Nginx 要在 server 段加 try_files $uri $uri/ /index.php?$query_string;;三是 PHP 扩展缺失,fileinfo、curl、gd、mbstring、openssl、pdo_mysql 这几个是安装程序最常依赖的,缺一个就 500。
安装后白屏打不开是什么原因?
结论:白屏是「致命错误被隐藏了」或「PHP 进程直接崩掉」的表现,页面返回码是判断方向的关键。
先用 curl -I 你的域名 看 HTTP 状态码:返回 500 的白屏按上一节查日志;返回 200 的白屏通常是 PHP 致命错误被 display_errors = Off 吞掉了,打开错误显示就能看到具体文件和行号。
另外三个高频原因:memory_limit 太小,安装阶段建议临时设到 256M,默认 128M 在解压或写配置文件时容易被打爆;OPcache 缓存了旧的报错状态,重启 PHP-FPM(systemctl restart php-fpm)即可清掉;文件里多了 UTF-8 BOM 头或 ?> 之后的空行,会导致「headers already sent」,用编辑器另存为「无 BOM 的 UTF-8」并删掉结尾的 ?>。
安装过程超时怎么办?改这几个参数
结论:超时几乎都是执行时间和请求体大小被默认值截断,调 5 个参数能解决大部分场景。
PHP 侧三个:max_execution_time(默认 30 秒)、max_input_time(默认 60 秒)、memory_limit。安装阶段把它们临时改为 max_execution_time = 300、max_input_time = 300、memory_limit = 256M,装完再改回来,避免长期放宽带来风险。
Web 服务器侧两个:Nginx 的 fastcgi_read_timeout 300; 和 client_max_body_size 64m;,Apache 的 Timeout 300。安装包或数据库文件较大时,upload_max_filesize 和 post_max_size 也要同步放大,且 post_max_size 必须大于 upload_max_filesize,否则上传会静默失败。
如果数据库导入到一半超时,不要继续加时间,改成命令行导入(mysql -u用户 -p 库名 < 文件.sql)或分批导入,比反复刷新页面可靠得多。
按什么顺序排查最快?
结论:固定顺序能避免在无关方向上浪费时间——先确认返回码,再看日志,最后才动配置。
具体顺序是:第一步 curl -I 确认返回码是 500、200 还是超时;第二步打开错误显示并跟日志,拿到具体报错行;第三步按报错内容对号入座,权限问题改属主、扩展问题装扩展、版本问题切 PHP 版本(很多程序要求 PHP 7.4 以上,PHP 5.6 或 8.x 直接不兼容);第四步调超时和内存参数;第五步清 OPcache、重启 PHP-FPM 和 Web 服务。全程只改一处、刷一次页面,确认有效再动下一处,否则多个变量同时变,反而查不出真凶。
安装报错本质上都是环境问题,日志里已经写好了答案。把 display_errors 打开、把权限设成 755/644、把 PHP 扩展到齐、把 max_execution_time 和 fastcgi_read_timeout 临时调到 300 秒,这四步做完,500、白屏、超时这三类报错基本都能一次性解决。