当前位置:首页 >  热门标签 >  php教程

php教程

早上打开网站一片纯白,后台也白,什么都不报。这就是WordPress圈子里著名的WSOD(WhiteScreenofDeath)。白屏的本质是PHP在输出任何内容之前就发生了致命错误,而WordPress默认把错误输出屏蔽了——所以你看到的不是报错页,是“沉默的死亡”。排查的钥匙就一句话:让错误开口说话。先做一个分流判断:前台白屏但/wp-admin能进,问题大概率在主题模板;前后台全白,通常是插

阅读全文
  • WordPress 白屏与数据库连接失败:从 wp-config 到 MySQL 的连接链排查
    早上打开网站一片纯白,后台也白,什么都不报。这就是WordPress圈子里著名的WSOD(WhiteScreenofDeath)。白屏的本质是PHP在输出任何内容之前就发生了致命错误,而WordPress默认把错误输出屏蔽了——所以你看到的不是报错页,是“沉默的死亡”。排查的钥匙就一句话:让错误开口
  • PHP 超时三兄弟:max_execution_time、request_terminate_timeout、fastcgi_read_timeout
    一个长耗时接口,前端等到504,可PHP的error_log里干干净净什么都没有。这种“网关报错、应用无日志”的组合拳,十有八九是超时链路上某一环先掐断了连接。PHP站点的超时参数有三个,分属三层,谁先到点谁动手,报的错还不一样,搞混了排查方向就全错。三兄弟各自管一段:max_execution_t
    2026-09-06 16:42
  • PHP-FPM 进程耗尽:pm.max_children 用内存反推怎么算
    间歇性502里最磨人的一种:低峰期一切正常,流量一上来就崩,过会儿又自己好了。FPM日志里翻出serverreachedpm.max_children,基本就能确诊——子进程开到上限,新请求没进程可用了。很多教程看到这条日志就让你把pm.max_children调大,却不说调到多少。拍脑袋填个100
  • PHP 500 错误定位四步:日志、开关、堆栈、复现
    500和502的差别,一句话说清:502是Nginx拿不到上游响应,500是PHP自己跑着跑着崩了,然后把这个错误码一路传回浏览器。所以500的现场一定在PHP侧,去Nginx的error.log里翻是找不到的。第一步,确认错误到底出在哪一层。curl拿状态码只是看到表象,真正的判断依据是响应头里有
  • AI生成的代码别直接上线——OWASP安全审查清单请收好
    AI写代码的毛病很一致:能用,但不安全。它优化的是“能不能跑通”,不是“扛不扛得住攻击”。OWASP专门给AI生成的代码排了个十大风险榜,排前面的就是注入、认证失败、安全配置错误、脆弱依赖、SSRF、日志缺失——全是老熟人,只是AI把它生产得更快了。最典型的是SQL注入。AI从训练数据里学到的老代码
    2026-09-01 13:14
  • 网站500不知道从哪查?把error_log喂给AI,三步定位PHP报错
    网站突然白屏或者返回500,第一反应是去查日志。打开error_log一看,几十行报错堆在一起,又是Undefinedarraykey又是Calltoundefinedfunction,还有个Fatalerror混在里面。看不懂,也不敢动,只能截图发群里问人。其实排查逻辑很简单,就三步:找到日志、挑
    2026-09-01 11:19
  • 服务器卡了先别重启:top命令五个数字,一分钟定位病根
    服务器一卡,很多人的第一反应是重启。重启确实能“解决”问题,但病根没找,明天同一时间照样卡。top命令开着看一分钟,负载高在哪基本就有数了。第一眼看loadaverage,三个数字分别是1分钟、5分钟、15分钟负载。判断标准拿CPU核数做参照:4核机器,负载4算满载,8就是超载。1分钟远高于15分钟
    2026-08-31 14:40
  • LIMIT 100000,20慢到超时?MySQL深分页的三种解法
    后台导出、爬虫采集、或者用户把列表翻到几千页——只要LIMIT的偏移量上了十万,查询就会肉眼可见地卡。很多人以为是数据太多撑不住,其实是MySQL的工作方式太老实:LIMIT100000,20的意思是把前100020行都取出来,扔掉前100000行,只返回20行。偏移量越大,白干的活越多。先复现确认
    2026-08-31 09:09
  • 千万级大表加索引不敢动?Online DDL和pt-online-schema-change实测
    大表加索引是站长的经典恐惧:ALTERTABLE一执行,表被锁住,网站瞬间打不开,KILL掉还要回滚几小时。以前确实是这样,MySQL5.6之后OnlineDDL成熟了,加索引这类操作可以在线做,执行期间允许并发读写。但“可以在线”不等于“随便什么时候都行”,坑还是有的。OnlineDDL的原理:操
    2026-08-31 09:07
  • 读多写少的站,主从复制加读写分离,一台变三台
    资讯类、内容站的流量特点很一致:读请求是写请求的几十上百倍。一台MySQL扛不住时,主从复制把读压力分给从库,主库专心写,是最省钱的扩容路径——不用换机器、不用改表结构,加从库就行。前提是主从复制先搭好(这个之前写过:主库开binlog、建同步账号,从库CHANGEMASTERTO)。复制跑通后,剩
    2026-08-31 09:04
  • 容器删了数据就没了?Docker卷的备份恢复,别等出事才想起来
    用Docker跑MySQL的站长,最该问自己的一个问题:数据库文件现在能被备份脚本摸到吗?数据在卷(volume)里,如果卷是匿名卷、或者备份脚本只tar了网站目录,那数据库其实处于裸奔状态,容器一坏就只能恢复到上次手动导出的时点。先搞清楚自己的数据在哪。Docker存数据两种方式:bindmoun
    2026-08-31 09:00
  • docker pull龟速还磁盘报警?镜像加速和空间清理一次讲清
    Docker用久了两大顽疾:拉镜像慢得像挂了,以及/var/lib/docker目录悄悄吃掉几十G直到磁盘写满、整站报错。这两件事都有标准解法,十分钟配完。先说拉取慢。DockerHub在国内直连基本不可用,需要配镜像加速器。各家云厂商都提供免费加速地址,阿里云的控制台里有一串专属地址,填到daem
    2026-08-30 18:40
  • 容器启动顺序乱成一锅粥?Compose依赖、健康检查和一键启停
    站稍微复杂一点,容器就不止三个:Web、PHP、MySQL、Redis,再加个定时任务的容器。用dockerrun一个个敲,重启顺序错一次就一堆报错——PHP比MySQL先起来,连接失败直接崩。Compose的价值就是把这套依赖关系写进配置,一键按正确顺序拉起。关键是depends_on加健康检查。
    2026-08-30 18:34
  • 环境配一次崩一次?Docker一条命令拉起LNMP,搬家不再从零开始
    传统装LNMP的痛,装过的都懂:PHP版本、扩展依赖、MySQL配置,换台服务器全部重来一遍,中途各种版本冲突。Docker把整套环境固化成配置文件,机器挂了,新机器上dockercomposeup一条命令,几分钟恢复原样。核心概念就三个:镜像(环境模板)、容器(跑起来的实例)、卷(挂出来的数据目录
    2026-08-30 16:26
  • WAF不是大站专利:ModSecurity加OWASP免费规则,老站也能上
    WAF这个词听着像金融级配置,其实开源方案零授权费。ModSecurity是老牌WAF引擎,OWASPCRS是一套社区维护的攻击特征规则,两个加起来能挡住绝大多数SQL注入、XSS、路径穿越扫描。你被WebShell和注入攻击折腾过的站,这套东西值得配一次。Nginx上跑ModSecurity用v3
    2026-08-30 10:38

信息推荐