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

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,确保配置路径正确写入二进制:

  1. 回到PHP源码目录,全量清理旧构建缓存,避免残留配置干扰:
make distclean
rm -rf config.cache
  1. 重新执行配置,必须显式指定--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
# 此处追加你之前使用的其余编译参数
  1. 编译安装:
make -j$(nproc)
make install
  1. 验证结果:
    执行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:03:20