You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FreeBSD下CLI模式无法加载pdo_mysql扩展,Apache模块正常

FreeBSD 14 + PHP 8.4 命令行pdo_mysql扩展加载失败问题解决

问题现象

在FreeBSD 14系统中,PHP 8.4作为Apache模块运行时pdo_mysql扩展正常,但执行命令行程序/usr/local/bin/php时触发扩展加载失败警告:无法找到pdo_mysql动态库文件。

已排查信息

1. PHP编译配置参数

./configure \
--with-apxs2=/usr/local/apache/bin/apxs \
--without-pdo-sqlite --without-sqlite3 --without-iconv \
--with-config-file-path=/usr/local/etc \
--enable-bcmath --without-cdb \
--enable-gd --without-iodbc  \
--without-gdbm --with-ndbm --without-db2 --without-dbm \
--without-readline --with-openssl \
--without-db3 --enable-dba \
--with-curl \
--with-jpeg --enable-calendar \
--with-mhash --enable-mbstring=all \
--with-zlib \
--enable-exif --with-zip \
--with-mysqli=mysqlnd --with-freetype --with-pdo-mysql

2. php.ini中pdo相关配置

# grep pdo /usr/local/etc/php.ini
;extension=pdo_firebird
extension=pdo_mysql
;extension=pdo_odbc
;extension=pdo_pgsql
;extension=pdo_sqlite
; https://php.net/pdo-odbc.connection-pooling
;pdo_odbc.connection_pooling=strict
pdo_mysql.default_socket=

3. 完整错误日志

PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_mysql' (tried: /usr/local/lib/php/extensions/no-debug-zts-20240924/pdo_mysql (Cannot open "/usr/local/lib/php/extensions/no-debug-zts-20240924/pdo_mysql"), /usr/local/lib/php/extensions/no-debug-zts-20240924/pdo_mysql.so (Cannot open "/usr/local/lib/php/extensions/no-debug-zts-20240924/pdo_mysql.so")) in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library 'pdo_mysql' (tried: /usr/local/lib/php/extensions/no-debug-zts-20240924/pdo_mysql (Cannot open "/usr/local/lib/php/extensions/no-debug-zts-20240924/pdo_mysql"), /usr/local/lib/php/extensions/no-debug-zts-20240924/pdo_mysql.so (Cannot open "/usr/local/lib/php/extensions/no-debug-zts-20240924/pdo_mysql.so")) in Unknown on line 0

4. 额外排查结果

  • 扩展目录路径正确,但目录内无任何PDO相关动态库文件
  • 尝试通过pear安装pdo-mysql,提示包名无效,且官方源无对应包

原因分析

编译PHP时使用--with-apxs2参数会优先生成Apache模块版本的PHP,但命令行CLI版本的PHP可能未被正确编译,或编译时未将pdo_mysql扩展打包进去。Apache模块和CLI是两个独立的二进制程序,编译配置不会自动同步覆盖两个版本。

解决方法

方法1:重新编译PHP,同步CLI版本的扩展支持

  1. 清理之前的编译残留文件:
    make clean
    
  2. 重新执行原configure命令(已包含--with-pdo-mysql,无需修改):
    ./configure \
    --with-apxs2=/usr/local/apache/bin/apxs \
    --without-pdo-sqlite --without-sqlite3 --without-iconv \
    --with-config-file-path=/usr/local/etc \
    --enable-bcmath --without-cdb \
    --enable-gd --without-iodbc  \
    --without-gdbm --with-ndbm --without-db2 --without-dbm \
    --without-readline --with-openssl \
    --without-db3 --enable-dba \
    --with-curl \
    --with-jpeg --enable-calendar \
    --with-mhash --enable-mbstring=all \
    --with-zlib \
    --enable-exif --with-zip \
    --with-mysqli=mysqlnd --with-freetype --with-pdo-mysql
    
  3. 编译并安装:
    make && make install
    
  4. 验证CLI版本的扩展目录是否生成pdo_mysql.so:
    ls /usr/local/lib/php/extensions/no-debug-zts-20240924/
    

方法2:确认CLI与Apache模块使用同一配置文件

检查CLI版本加载的php.ini路径:

php --ini

确保输出中的Loaded Configuration File指向/usr/local/etc/php.ini,若路径不一致,可将现有配置文件同步到对应路径,或修改CLI的配置加载参数。

方法3:临时替代方案

若重新编译有困难,可直接使用Apache模块对应的PHP二进制文件(通常位于/usr/local/apache/bin/php或类似路径),该版本已包含pdo_mysql扩展,执行命令时替换路径即可。

内容的提问来源于stack exchange,提问作者KevInSol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 04:20:00