PHP7.4.30 CLI与Apache SAPI未加载/etc/php.ini配置问题
问题根因
你看到的编译参数记录和实际生效路径不一致,核心是两个问题:
- PHP编译时如果未显式指定
--prefix,默认取/usr/local作为安装前缀,若编译前未清理旧的构建缓存,构建脚本会自动按$prefix/lib的规则拼接配置文件路径,直接覆盖你传入的--with-config-file-path参数。php -i输出的Configure Command仅记录编译时传入的参数,不代表最终写入二进制文件的实际生效值。 - Apache mod_php SAPI如果加载了旧版本残留的
libphp7.so模块,模块内置的硬编码路径会优先于新编译二进制的配置生效。
修复方案(全程无需创建软链接)
方案一:彻底修复(推荐)
重新编译PHP,确保配置路径正确写入二进制:
- 回到PHP源码目录,全量清理旧构建缓存,避免残留配置干扰:
make distclean rm -rf config.cache
- 重新执行配置,必须显式指定
--prefix参数,避免路径自动拼接逻辑覆盖配置项,把你原有其他编译参数一并补上:
./configure --prefix=/usr/local \ --with-apxs2=/usr/bin/apxs \ --with-config-file-path=/etc \ --with-config-file-scan-dir=/etc/php.d \ --sysconfdir=/etc # 此处追加你之前使用的其余编译参数
- 编译安装:
make -j$(nproc) make install
- 验证结果:
执行php --ini,输出的Configuration File (php.ini) Path会显示为/etc,只要/etc/php.ini文件存在,就会被自动加载。
方案二:无需重新编译的快速修复
如果不想重新编译,可以分别为CLI和Apache SAPI指定配置路径:
CLI模式
在全局环境配置中为php命令设置默认配置参数,新建/etc/profile.d/php.sh写入以下内容:
alias php='/usr/local/bin/php -c /etc/php.ini'
执行source /etc/profile.d/php.sh全局生效,所有终端调用php命令时都会自动加载指定的ini文件。
Apache SAPI模式
编辑Apache主配置文件(默认路径/etc/httpd/conf/httpd.conf),在加载php模块的配置段后添加PHPIniDir指令指定配置目录:
LoadModule php7_module modules/libphp7.so PHPIniDir "/etc"
保存后重启Apache服务生效:
systemctl restart httpd
排错提示
如果操作后路径仍不对,先执行which php确认当前调用的PHP二进制路径,排除PATH优先级问题导致调用系统残留旧版本PHP的情况;对mod_php模块可以执行strings /usr/lib64/httpd/modules/libphp7.so | grep php.ini,直接读取模块文件内硬编码的配置路径,确认模块版本是否正确。
内容的提问来源于stack exchange,提问作者lp64
相关产品推荐
相关产品推荐

