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

网站搬家后整站白屏?先排查PHP版本与扩展是否匹配

 2026-10-29 09:22  来源: 互联网   我来投稿 撤稿纠错

  一键部署OpenClaw

解析已经指过去了,首页打开是一片纯白,浏览器标签上标题正常显示,正文什么都没有。F12里状态码200,Content-Length是0。这种白屏最容易被当成DNS没生效,其实请求早就打到服务器上了。

200加零字节,说明PHP执行到一半退出了,输出还没来得及产生。最常见的原因是版本不兼容。老站搬过来,代码里用着mysql_connect,PHP 7.0起这个扩展整个移除,函数不存在,直接fatal。PHP 8.0又拿掉了create_function和each,依赖它们的插件当场挂掉,页面一个字都出不来。这类错误其实不会白屏,它写进error_log然后返回500。真正常见的是另一类:函数还在,行为变了,PHP 8的类型检查收紧,插件里传null的地方直接抛TypeError,框架接不住,输出就停在半路。

第二条是扩展缺失。gd、mbstring、curl、fileinfo、exif,缺哪个挂哪块。php -m把已加载的列出来,跟老服务器对比一遍,差的那几个补上。fileinfo最容易漏,上传功能全指着它判断类型。对比的时候别只看名字,版本号也要对,imagick这类扩展在不同大版本之间API改过。

看不见报错,是因为display_errors默认关着。log_errors开着,但错误写到哪儿不一定清楚,先php -i找error_log那一行。找到路径再tail -f,刷一次页面看有没有新行进来。一行都没有,说明fatal发生在更早的位置,转去看php-fpm自己的日志和nginx的error.log。E_ERROR类型的错误不会被set_error_handler接住,自定义错误页也拦不住,所以程序自己的日志里什么都留不下。

opcache也会骗人。文件换了,它手里还攥着旧路径的缓存,reload一次php-fpm页面就回来了。opcache.validate_timestamps设成0的时候,改了文件也不会重新读,这个配置在追求性能的机器上很常见。

还有一种压根不赖PHP:文件都在,只是index配错了。nginx的root指到了上一级目录,请求根路径找不到index.php,返回空白或者目录列表。curl -I看Content-Type,是text/html而长度是0,基本就是这个原因。rewrite把参数吃掉、框架的入口文件缺失,白屏起来一模一样。还有一种跟配置无关:文件在,nginx的worker读不到,照样返回空白页,error.log里写的是Permission denied。

排查顺序按成本排。先看error_log有没有新行,两分钟;再看php -v和php -m,五分钟;最后才动代码,可能要一天。顺序反过来的结果就是改了一堆东西,问题还在。顺序这件事看着简单,赶时间的时候最容易跳。

你要是准备切服务器,先在旧机上把php -v和php -m存一份。到新机上逐条对,比出了故障再回头查省太多事。旧机上的输出顺手存进版本库,以后换环境直接拿出来对。

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

相关文章

热门排行

信息推荐