必须执行frankenphp -m查看其php sapi层真实加载的扩展列表,而非系统php -m;该命令启动最小化实例输出实际启用模块,并需结合phpinfo()、opcache_get_status()及http请求中函数调用验证可用性。

验证 FrankenPHP 1.0 扩展是否成功启用,不能只看系统里 php -m 的输出,必须查它自己运行时真实加载的模块。关键在于区分“已安装”“已列出”和“真可用”三个层级。
用 frankenphp -m 查真实加载的扩展列表
这是最直接、最可信的方式。FrankenPHP 不继承 CLI 的 php.ini,也不读你调试用的配置文件,frankenphp -m 会启动一个最小化实例,输出其 PHP SAPI 层实际启用的扩展(含内置和动态加载项):
- 执行
frankenphp -m,确认pdo_mysql、curl、mbstring、opcache等项目依赖的扩展出现在列表中 - 若提示
command not found,检查frankenphp是否在$PATH,或改用绝对路径调用(如/usr/local/bin/frankenphp -m) -
opcache属于zend_extension,默认不显示在-m列表中,需后续单独验证
在 Web 请求上下文中验证扩展功能是否可用
有些扩展(如 redis、gd、xdebug)可能被配置为仅 CLI 启用,或首次调用才初始化。仅出现在 -m 列表不代表能在 HTTP 请求中正常工作:
- 新建
test-ext.php,内容为:<?php echo extension_loaded('redis') ? 'redis OK' : 'redis missing'; ?> - 用
frankenphp php-server --document-root . test-ext.php直接运行,避免 Web 层干扰 - 或通过 HTTP 访问:
curl http://localhost:8000/test-ext.php,观察返回结果 - 对关键扩展补测函数调用,例如:
gd_info()、redis_connect('127.0.0.1')、opcache_get_status()
确认 extension_dir 和扩展 ABI 兼容性
扩展名在列表里 ≠ 能加载成功。FrankenPHP 对 C 扩展有严格 ABI 要求,自定义扩展必须重编译:
- 运行
frankenphp --php-flags "-i" | grep "extension_dir",确认路径指向 FrankenPHP 自带目录(如/usr/lib/php/8.2/franken),不是系统默认路径 - 若扩展是手动复制的
.so文件,大概率报undefined symbol: zend_object_std_init—— 必须用frankenphp-build工具重编译 - 特别注意:apcu 默认不支持;redis 需使用
php8.2-franken-redis或对应版本兼容包
检查 phpinfo() 输出与运行时一致性
这是交叉验证的最后一步,能暴露配置错位、多 ini 文件冲突等问题:
- 新建
info.php,内容为:<?php phpinfo(); ?> - 用
frankenphp php-server --document-root . info.php启动并访问 - 重点核对:
Loaded Configuration File路径是否为你预期的 ini;extension_dir是否匹配;Additional .ini files parsed中是否有意外加载的配置 - 对比
frankenphp -m和phpinfo()中的扩展列表,不一致说明某处配置未生效
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











