ThinkPHP 5.1 白屏时,error_log路径为runtime/log/YYYYMM/dd.log(TP5.0)或runtime/log/YYYY-MM-DD.log(TP5.1+),需用ls -ld runtime和ls -l runtime/log/确认属主为www-data/nginx且权限允许写入,否则日志无法生成。

ThinkPHP 5.1 白屏时 error_log 路径和权限怎么查
白屏但没报错,最可能的原因是 PHP 错误被写进了日志却没权限读取或路径压根不对。ThinkPHP 5.1 默认把运行时日志写进 runtime/log/,但这个目录必须由 Web 进程(如 www-data 或 nginx)可写,否则日志文件创建失败,错误就彻底“消失”了。
- 先确认
runtime/目录存在且结构完整:runtime/log/、runtime/cache/、runtime/temp/都得有 - 执行
ls -ld runtime和ls -l runtime/log/,看属主和权限;常见错误是属主为root或权限为755(不够写) - 正确权限应为:
chmod -R 755 runtime不够,得确保 Web 用户能写:用sudo chown -R www-data:www-data runtime(Ubuntu/Debian)或sudo chown -R nginx:nginx runtime(CentOS/RHEL) - 如果
runtime/log/下始终没生成日期命名的 log 文件(如20260707.log),说明框架连日志都写不进去,大概率权限或 SELinux(CentOS)拦住了
display_errors 在 ThinkPHP 5.1 里为什么加了也不生效
ini_set('display_errors', '1') 放在 public/index.php 顶部,经常无效——不是你代码写错了,而是 ThinkPHP 自己的错误处理器提前接管了致命错误,把原始报错吞掉了。
- ThinkPHP 5.1 默认注册了
think\initializer\Error::register(),它会屏蔽E_ERROR级别错误并转成 500 页面或静默终止 - 临时解决:打开
public/index.php,找到并注释掉这行:think\initializer\Error::register(); - 同时确认
APP_DEBUG是true(在.env或config/app.php中),否则即使开了display_errors,TP 也会跳过错误渲染 - 注意:
ini_set只影响当前脚本,若语法错误出现在它之前(比如漏了分号),整段代码根本不会执行——这时只能靠服务器错误日志
宝塔/Nginx 下 display_errors=On 却还是白屏怎么办
宝塔面板改了 PHP 配置、点了重启,但页面仍空白?大概率是 PHP-FPM 层级配置覆盖了你的设置,php_admin_flag[display_errors] 比 php.ini 优先级更高,且不能被 ini_set 修改。
- 登录宝塔 → PHP 设置 → 配置文件 → 搜索
php_admin_flag,删掉或注释掉类似php_admin_flag[display_errors] = off的行 - Nginx + PHP-FPM 环境下,检查站点配置里有没有
fastcgi_param PHP_VALUE "display_errors=off";,有就删掉 - 改完必须「重启 PHP 服务」,不是「重载配置」——只有进程重启才能重载
php_admin_flag - 验证是否生效:新建一个
test.php放在网站根目录,内容为(故意写错函数名),访问它;如果看到Fatal error就说明打开了,如果还空白,说明覆盖项仍在生效
白屏但 error_log 里也没记录,下一步查什么
日志目录权限对、display_errors 真开了、TP 错误处理器也关了,还是没日志没报错——这时候问题已经跳出 PHP 层,得往底层看。
- 检查 PHP 是否真在运行:右键空白页 → “查看网页源代码”,如果看到
原样输出,说明 Web 服务器根本没把请求交给 PHP 解析(.php 后缀未关联处理器) - 查 Nginx 错误日志:
tail -f /var/log/nginx/error.log,重点看FastCGI sent in stderr或connect() failed (111: Connection refused),意味着 PHP-FPM 没起来或端口不通 - 查 PHP-FPM 日志:
tail -f /var/log/php7.4-fpm.log(版本依实际),看是否有failed to load configuration file或pool www socket listen failed - 内存耗尽也会导致白屏无日志:
free -h看剩余内存,dmesg | grep -i "killed process"看 OOM killer 是否干掉了 PHP 进程
真正卡住人的地方,往往不是 display_errors 开没开,而是错误发生在 ini_set 执行前、或者被 php_admin_flag 强制覆盖、又或者 runtime/ 权限只给了目录没给子目录——这些细节一漏,排查就变成盲人摸象。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










