frankenphp 默认不加载任何 php 扩展,需手动指定 php.ini 路径(如 --php-config)并确保其中启用 extension=redis.so 等配置,否则扩展不会生效。

FrankenPHP 默认不带任何 PHP 扩展,必须手动启用
FrankenPHP 是基于 SAPI 的轻量级 PHP 运行时,它复用 PHP CLI 二进制,但不自动加载 php.ini 或任何扩展。这意味着即使你系统里装了 redis.so 或 pdo_mysql.so,FrankenPHP 启动时也不会识别——它只认自己启动时显式指定的配置和扩展路径。
确认你的 FrankenPHP 使用的是哪个 PHP 二进制和 php.ini
FrankenPHP 启动时会读取环境变量或命令行参数指定的 PHP 配置,关键要看它实际调用的是哪个 php 可执行文件:
- 运行
frankenphp --version,留意输出中类似PHP binary: /usr/bin/php的路径 - 执行
/usr/bin/php -i | grep "Loaded Configuration File"(把路径替换成上一步看到的真实路径),确认它读的是哪个php.ini - 检查该
php.ini是否已启用extension=redis.so和extension=pdo_mysql.so;如果没开,FrankenPHP 就不会加载
注意:FrankenPHP 不会自动 fallback 到系统默认的 php.ini,它严格按所用 PHP 二进制的规则走。
Linux/macOS 上安装 redis、pdo_mysql 扩展(以 Ubuntu/Debian 为例)
FrankenPHP 本身不提供扩展安装逻辑,你得先让底层 PHP 支持它们:
- 用包管理器最稳:
sudo apt install php-redis php-mysql(对应当前系统默认 PHP 版本,如php8.2-redis) - 或用 PECL:
sudo pecl install redis pdo_mysql,但需确保已装php-dev和php-pear - 安装后,
.so文件通常落在/usr/lib/php/*/下,而extension_dir在php.ini中应指向该目录 - 编辑你确认的那个
php.ini,添加两行:extension=redis.soextension=pdo_mysql.so - 验证是否生效:
/usr/bin/php -m | grep -E '^(redis|pdo_mysql)$'—— 必须看到这两行才代表 PHP 二进制本身已支持
启动 FrankenPHP 前必须显式传入配置路径(否则扩展不生效)
FrankenPHP 不会自动读取 php.ini,你得用 --php-config 或环境变量告诉它:
- 方式一(推荐):启动时指定
php.ini路径frankenphp serve --php-config /etc/php/8.2/cli/php.ini - 方式二:设环境变量
PHP_INI_SCAN_DIR=/etc/php/8.2/cli/conf.d frankenphp serve - 漏掉这步,FrankenPHP 就用空配置启动,
extension=行完全被忽略,extension_loaded('redis')一定返回false
最容易被忽略的是:FrankenPHP 的「PHP 配置」和「Web 服务器配置」是两个独立层,扩展属于前者,不靠后者控制。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











