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

网站500不知道从哪查?把error_log喂给AI,三步定位PHP报错

 2026-09-01 11:19  来源: 互联网   我来投稿 撤稿纠错

  一键部署OpenClaw

网站突然白屏或者返回500,第一反应是去查日志。打开error_log一看,几十行报错堆在一起,又是Undefined array key又是Call to undefined function,还有个Fatal error混在里面。看不懂,也不敢动,只能截图发群里问人。

其实排查逻辑很简单,就三步:找到日志、挑出致命错误、连同相关代码一起问AI。很多人卡在第二步——把整段日志原样丢给AI,信息太杂,AI给出的答案也含糊。你得先自己把关键行拎出来。

第一步确认日志开没开、开在哪。php.ini里这几个配置决定了报错去向:display_errors线上必须关,log_errors必须开,error_log指定文件路径。很多“白屏”就是display_errors关了、log_errors没开,报错全丢进黑洞,当然什么都查不到。

; php.ini 生产环境推荐配置
log_errors = On
display_errors = Off
error_log = /var/log/php_errors.log
error_reporting = E_ALL
expose_php = Off

# 实时看最新报错
tail -f /var/log/php_errors.log
# 只筛Fatal级别的
grep -i "fatal" /var/log/php_errors.log | tail -20

第二步,从日志里挑出最要紧的那条。同一批报错往往有因果关系:前面的Warning可能只是噪音,最后那个Fatal error才是崩掉的原因。把Fatal error那一行、它前后两三行上下文、以及报错里提到的那个文件的对应代码片段,一起准备好。

第三步才是用AI。给AI的提示词也有讲究:把日志行、相关代码、你期望的结果说清楚,AI才能给准。别只丢一句“帮我看看这个报错”,那等于让AI猜你的代码意图。

我有一段PHP代码报错,请帮我定位原因并给出修复方案:

【报错日志】

PHP Fatal error:  Uncaught TypeError:  mysqli_fetch_assoc():

Argument #1 ($result) must be of type mysqli_result, bool given

in /var/www/site/list.php on line 42

【相关代码第38-45行】

$sql = "SELECT * FROM news WHERE cid=" . $_GET['cid'];

$result = $db->query($sql);

while ($row = mysqli_fetch_assoc($result)) {

echo $row['title'];

}

【问题】

请指出错误原因,并给出修复后的代码(要求防SQL注入)

这类“bool given”十有八九是SQL执行失败返回了false,而失败原因往往是拼接了非法参数。AI给出的修复方案大概率会提到参数化查询——这正好,你顺手就把注入漏洞堵上了。修完再用tail -f盯一会儿日志,确认同样的错误不再出现,才算闭环。

数据来源:PHP官方手册

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

相关标签
php教程
ai建站

相关文章

  • 服务器卡了先别重启:top命令五个数字,一分钟定位病根

    服务器一卡,很多人的第一反应是重启。重启确实能“解决”问题,但病根没找,明天同一时间照样卡。top命令开着看一分钟,负载高在哪基本就有数了。第一眼看loadaverage,三个数字分别是1分钟、5分钟、15分钟负载。判断标准拿CPU核数做参照:4核机器,负载4算满载,8就是超载。1分钟远高于15分钟

    标签:
    php教程
    服务器
  • LIMIT 100000,20慢到超时?MySQL深分页的三种解法

    后台导出、爬虫采集、或者用户把列表翻到几千页——只要LIMIT的偏移量上了十万,查询就会肉眼可见地卡。很多人以为是数据太多撑不住,其实是MySQL的工作方式太老实:LIMIT100000,20的意思是把前100020行都取出来,扔掉前100000行,只返回20行。偏移量越大,白干的活越多。先复现确认

    标签:
    php教程
    mysql
  • 千万级大表加索引不敢动?Online DDL和pt-online-schema-change实测

    大表加索引是站长的经典恐惧:ALTERTABLE一执行,表被锁住,网站瞬间打不开,KILL掉还要回滚几小时。以前确实是这样,MySQL5.6之后OnlineDDL成熟了,加索引这类操作可以在线做,执行期间允许并发读写。但“可以在线”不等于“随便什么时候都行”,坑还是有的。OnlineDDL的原理:操

    标签:
    php教程
    mysql
  • 读多写少的站,主从复制加读写分离,一台变三台

    资讯类、内容站的流量特点很一致:读请求是写请求的几十上百倍。一台MySQL扛不住时,主从复制把读压力分给从库,主库专心写,是最省钱的扩容路径——不用换机器、不用改表结构,加从库就行。前提是主从复制先搭好(这个之前写过:主库开binlog、建同步账号,从库CHANGEMASTERTO)。复制跑通后,剩

    标签:
    php教程
    mysql
  • 容器删了数据就没了?Docker卷的备份恢复,别等出事才想起来

    用Docker跑MySQL的站长,最该问自己的一个问题:数据库文件现在能被备份脚本摸到吗?数据在卷(volume)里,如果卷是匿名卷、或者备份脚本只tar了网站目录,那数据库其实处于裸奔状态,容器一坏就只能恢复到上次手动导出的时点。先搞清楚自己的数据在哪。Docker存数据两种方式:bindmoun

    标签:
    php教程
    mysql

热门排行

信息推荐