当前位置:首页 >  站长 >  建站经验 >  正文

页面白屏不报错?把 PHP 的错误日志配明白,排错效率翻倍

 2026-08-28 14:17  来源: 互联网   我来投稿 撤稿纠错

  一键部署OpenClaw

线上环境出于安全把错误显示关了,这是对的——报错信息暴露路径给攻击者等于送情报。但代价是出了问题页面上啥都没有,只剩白屏。正确姿势是:页面上不显示,错误全部落日志。

; php.ini 生产环境错误处理四件套
display_errors = Off ; 页面不显示错误
log_errors = On ; 错误写日志
error_log = /var/log/php/error.log
error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE

这四项是一套组合拳。关掉 display_errors 用户看不到报错;打开 log_errors 错误没消失只是换了地方;error_log 指定落盘位置,注意这个文件的属主要给 php-fpm 的运行用户写权限,不然错误会静默丢弃,这是新手最常见的坑;error_reporting 控制记录哪些级别,开发环境直接 E_ALL 全记。

想临时在代码里抓某个段的错误,不用改全局配置:

<?php
// 临时打开(只影响当前请求)
ini_set('display_errors', '0');
error_log("下单流程异常: user_id={$_SESSION['uid']} order={$orderNo}");

// 自定义错误处理器,把警告也记下来
set_error_handler(function($no, $str, $file, $line) {
error_log("[PHP错误] {$str} @ {$file}:{$line}");
return true;
});

error_log 写业务埋点这个用法很多人不知道:在关键流程的异常分支里记上下文,比事后查数据库反推用户干了什么高效太多。日志格式统一加前缀标签(比如 [支付]、[登录]),配合 grep 能秒筛。

# 日常巡检三连
tail -f /var/log/php/error.log # 实时盯
awk '/\[26-Aug-2026/' error.log | sort | uniq -c | sort -rn | head # 按天聚合同类错误
grep -c 'PHP Fatal' error.log # 看致命错误数

白屏问题有了日志基本一抓一个准:Fatal error 那行会直接写明文件和行号。怕日志涨太快就接上 logrotate 轮转,之前专门写过一篇。错误日志是运维的眼睛,别让它形同虚设。(数据来源:PHP官方手册 )

申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!

相关标签
php教程

相关文章

  • 定时任务还在页面里套 include?cron + PHP CLI 才是正路

    见过不少老站的处理方式:写个task.php,靠别人挂个监控或者用JS定时刷来触发,更狠的是每次有人访问首页顺带跑一遍统计。这些歪招的共同问题是不可控——没人访问就不跑,被搜索引擎高频抓取就狂跑。定时任务就该交给系统的cron。PHP从命令行跑有个专属的SAPI叫CLI,和网页那套php-fpm是两

    标签:
    php教程
  • PHP-FPM 进程池参数怎么算?内存除法题,算错就 502

    后台传个30MB的视频或者8MB的主题包,进度条走到一半报错,或者干脆显示上传成功但文件不存在。这类问题的根源九成是PHP的上传限制,而且牵一发动全身——不是改一个参数就完事,得三个一起改。;php.ini上传相关三件套upload_max_filesize=64M;单个文件最大体积post_max

    标签:
    php教程
  • 服务器磁盘天天告警?八成是日志没轮转,logrotate 十分钟配好

    有个经典事故:网站跑了半年突然全挂,查半天发现是磁盘满了,罪魁祸首是access.log涨到了80GB。日志不管理,等于给服务器埋了个定时炸弹。Linux自带的logrotate就是干这个的,大多数发行版装完就有,不用额外装任何东西。logrotate的思路很简单:按你定的周期把当前日志改名存档,压

  • 网站突然 502:别急着重启,顺着这条链路查五分钟定位

    半夜收到监控告警,打开网站一片502BadGateway。很多人的第一反应是重启服务器,运气好恢复了,运气不好过一小时又来。502的本质就一句话:Nginx活着,但后面的PHP-FPM或者上游服务没应答或拒绝连接。顺着这条链路查,比乱重启快得多。第一步看PHP-FPM进程在不在。psaux|grep

    标签:
    php教程
  • Nginx location 匹配规则没搞懂,改配置全靠猜?一张优先级表讲透

    很多站长第一次给网站加规则就翻车:明明写了location/admin/的限制,访问/admin/login.php却没生效;或者想给图片加缓存头,结果整个站都被匹配走了。问题不在Nginx,在于location的匹配顺序跟你想象的完全不一样。先记住一个反直觉的点:location不是从上到下按顺序

热门排行

信息推荐