CentOS 9下PHP 8.3.2 CLI无法加载php.d扩展的技术咨询
检查PHP CLI编译参数
执行php -i | grep "Configure Command",查看编译时是否添加了--with-config-file-scan-dir=/etc/php.d参数。如果没有该参数,说明编译PHP时未开启额外配置目录扫描功能,这是核心问题,需要重新编译PHP并添加该参数。临时/永久配置扫描目录
- 临时生效:每次执行CLI命令时指定环境变量,确保路径正确且目录存在:
PHP_INI_SCAN_DIR=/etc/php.d php -m - 永久生效:新建或编辑
/etc/profile.d/php.sh文件,写入以下内容:
执行export PHP_INI_SCAN_DIR=/etc/php.dsource /etc/profile.d/php.sh让当前会话生效,重启终端后配置全局生效。
- 临时生效:每次执行CLI命令时指定环境变量,确保路径正确且目录存在:
验证php.d目录下的扩展配置文件
确认/etc/php.d目录中存在mbstring.ini、mysqli.ini、intl.ini文件,文件内的extension指令需指向正确的扩展文件,例如extension=mbstring.so(注意文件名需匹配PHP 8.3版本,部分系统可能带版本后缀)。同时确保文件权限符合要求:chmod 644 /etc/php.d/*.ini检查扩展是否存在于CLI的扩展目录
执行php -i | grep "extension_dir"获取CLI的扩展存放路径,例如/usr/local/lib/php/extensions/no-debug-non-zts-xxxxxx/,检查该目录下是否存在mbstring.so、mysqli.so、intl.so文件。如果不存在,说明网页端的扩展是为PHP-FPM配置的,CLI版本未安装对应扩展,需重新编译安装扩展,或通过dnf安装PHP 8.3 CLI对应的扩展包(若使用包管理器安装PHP)。修正php.ini配置
打开/usr/local/lib/php.ini,确认extension_dir指向正确的扩展目录;若编译时已指定扫描目录,无需修改此项,否则依赖环境变量生效。
内容的提问来源于stack exchange,提问作者user3786984

