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版本的扩展支持
- 清理之前的编译残留文件:
make clean - 重新执行原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 - 编译并安装:
make && make install - 验证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
相关产品推荐
相关产品推荐

