必须用 frankenphp -m 查其 sapi 层真实加载的扩展列表,而非系统 php -m;再通过 frankenphp --php-config 定位实际 php.ini 路径,核对 extension_dir 和 extension= 配置,并在 http 请求中验证函数可用性及 $_server 字段是否符合框架预期。

必须查 FrankenPHP 进程实际加载的 PHP 配置,而不是系统 php 命令或你习惯用的 php.ini —— 它不读 CLI 配置,也不继承全局环境。
用 frankenphp -m 看真实启用的扩展列表
这个命令会启动一个最小化 FrankenPHP 实例,输出其 SAPI 层真正加载的模块(含内置和动态扩展)。它和 php -m 结果往往完全不同。
- 重点确认
pdo_mysql、curl、mbstring、openssl在列;opcache是zend_extension,-m默认不显示,需额外验证 - 若报
command not found,检查frankenphp是否在$PATH,或改用绝对路径(如/usr/local/bin/frankenphp -m) - 看到
swoole但项目没用?不用删 —— FrankenPHP 不会因扩展存在而自动启用协程,不影响运行
用 frankenphp --php-config 找它真正读的 php.ini 路径
FrankenPHP 不会猜配置位置。它自带一套独立的 php.ini,路径由构建时决定,和系统 PHP 完全隔离。
- 执行
frankenphp --php-config输出的--ini行,就是它实际加载的配置文件路径 - 打开该
php.ini,核对extension_dir是否指向 FrankenPHP 自带的扩展目录(通常是/usr/lib/php/8.2/franken),而非系统路径/usr/lib/php/8.2 - 检查关键扩展是否以
extension=xxx形式启用,且对应.so文件确实存在于extension_dir下
在 HTTP 请求上下文中验证函数是否真能调用
有些扩展(如 xdebug、apcu)被配置为仅 CLI 模式启用,Web SAPI 下静默失效 —— frankenphp -m 看不到,但你的脚本会直接报 Call to undefined function。
- 在
public/目录下放一个check-ext.php:
<?php if (!extension_loaded('gd')) { die('GD extension is missing'); }
if (!function_exists('imagecreate')) { die('imagecreate() not available'); }
echo "GD OK\n";
print_r(gd_info());
?>
curl http://localhost:8080/check-ext.php 访问,看是否完整输出;返回 500 且日志里有未定义函数错误,说明该扩展未在 Web 模式下启用php.ini 中是否用了 disable_functions 把它禁了核对 $_SERVER 关键字段是否符合框架预期
FrankenPHP 的 HTTP 层由 Caddy 驱动,不是 FastCGI 协议转发,$_SERVER 字段值和 Nginx+PHP-FPM 差异明显。Laravel、ThinkPHP 等框架依赖这些字段做路由、URL 生成、HTTPS 判断,错一个就可能跳转到 http:// 或生成错误链接。
- 重点关注:
$_SERVER['REQUEST_URI'](是否含 query string)、$_SERVER['HTTPS'](是否为on)、$_SERVER['HTTP_X_FORWARDED_PROTO'](Caddy 默认不设,需显式配置)、$_SERVER['SCRIPT_NAME'](FrankenPHP 默认设为/index.php) - 加调试代码:
var_dump(array_intersect_key($_SERVER, array_flip(['REQUEST_URI', 'HTTPS', 'HTTP_X_FORWARDED_PROTO', 'SCRIPT_NAME', 'SERVER_PORT']))); - Laravel 用户务必跑
php artisan tinker并执行url('/')和request()->fullUrl(),确认协议、host、端口输出正确
最容易被忽略的是:扩展路径错配、$_SERVER 字段行为变化、以及函数级可用性验证 —— 这三处不出问题,上线才真正算“稳”。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











