FrankenPHP返回空白页主因是错误被静默忽略:若查看源码见<?php原文,说明未执行;若源码为空,则已运行但无输出或错误被吞。需在文件首行加ini_set('display_errors','1');ini_set('display_startup_errors','1');error_reporting(E_ALL);ob_end_flush();,并用php -l查语法、xxd查BOM、frankenphp serve -verbose看日志。

FrankenPHP 请求返回空白页面,不是没出错,而是错误被“吞掉”了——它默认不向浏览器输出错误信息,也不强制记录到日志,尤其在开发初期容易让人误以为代码没运行。
先确认 FrankenPHP 真的在处理这个请求
右键页面 →「查看网页源码」:
- 如果看到完整的 <?php ... ?> 原文,说明 FrankenPHP 根本没介入,Web 服务器(如 Caddy/Nginx)把 .php 当静态文件直接返回了
- 如果源码里空空如也(连
<html>都没有),说明 FrankenPHP 启动了,但脚本执行失败或未输出
再用命令行验证响应头:curl -I http://localhost/index.php
重点看 Content-Type 和 X-Powered-By。若没有 X-Powered-By: FrankenPHP,说明请求压根没进 FrankenPHP 流程。
强制让错误显示出来
在出问题的 PHP 文件最顶部、**第一个字符之前**(不能有空格、BOM、换行),插入三行:
<?php<br>
ini_set('display_errors', '1');<br>
ini_set('display_startup_errors', '1');<br>
error_reporting(E_ALL);<br>
?>
注意:FrankenPHP 默认启用 output_buffering,有时即使报错也可能卡在缓冲里。可在上面三行后加一行:ob_end_flush();
立即学习“PHP免费学习笔记(深入)”;
刷新页面。出现红色错误 → 按提示改;仍是空白 → 错误发生在解析阶段(比如语法错到连 ini_set 都没机会执行)。
查语法错和编码陷阱
终端进入项目目录,运行:php -l index.php
- 返回 Errors parsing → 按提示修括号、分号、引号、短标签(FrankenPHP 默认禁用
<?,必须用<?php) - 返回 No syntax errors detected → 问题不在语法,继续往下
另存为 UTF-8 无 BOM 编码(尤其用 Windows 记事本编辑过);检查文件开头是否有不可见字符(可用 xxd index.php | head 查 BOM)。
看 FrankenPHP 自己的日志
FrankenPHP 不走传统 PHP-FPM 日志路径。启动时加 -verbose 参数可输出详细过程:frankenphp serve -verbose
或者查看其标准错误输出(比如你用 systemd 托管,就运行:journalctl -u frankenphp -f)
常见线索包括:
- failed to load module(扩展缺失)
- require_once: failed opening(路径或权限问题)
- memory_limit exhausted(探针类脚本易触发)
- opcache disabled or misconfigured(某些版本需手动启用)



















