我将 PHP 配置为在 /etc/php5/apache2 中查找 php.ini 文件。phpinfo() 的输出表明路径设置正确,但也表明没有加载配置文件。我暂时将 php.ini 权限更改为 777 以测试该问题并且权限不是问题。还有什么问题?
当我编译php时,我做了:
sudo ./configure --with-apxs2=/usr/sbin/apxs --with-mysql --enable-so --with-config-file-path=/etc/php5/apache2 --sysconfdir=/etc/php5 --with-config-file-scan-dir=/etc/php5/conf.d
phpinfo() 说:
Configuration File (php.ini) Path /etc/php5/apache2
Loaded Configuration File (none)
Scan this dir for additional .ini files (none)
Additional .ini files parsed (none)
php --ini 还说: 配置文件(php.ini) 路径:/usr/local/lib 加载的配置文件:/etc/php5/apache2/php.ini 扫描其他 .ini 文件:(无)其他 .ini解析的文件:(无)
如果我将 php.ini 放在 /usr/local/lib 中,则配置文件可以正常加载(尽管不会加载额外的 .ini 文件)。我不确定为什么会发生这种情况,因为我在编译 PHP 时设置了选项。
核选项是在 strace 下运行 apache,以查看它在尝试读取 php.ini 文件时在做什么。
运行“ps aux”以找到 apache 的命令行,然后停止该进程。现在运行:
在浏览器中请求您的 phpinfo() 页面,然后使用 ctrl-c 终止 strace。您现在可以为 php.ini grep /tmp/apache.log 并查看它在尝试读取该文件时是否显示任何错误。这将向您显示文件未找到或权限问题等问题。
如果有一个 open() 调用返回一个数字,那么它似乎正在正确读取文件,并且文件一定有问题阻止 php 正确解析它,但我希望这是记录在错误日志中。
作为一种解决方法,您可以在 Apache 配置中使用 PHPIniDir 指令来强制 PHP 使用特定的 php.ini 文件
现在应该强制 PHP 使用您的 php.ini 文件。
更改 php.ini 后是否重新启动了 apache?
如果你这样做了,在某些操作系统上,似乎 apache 会缓存数据,所以
/etc/init.d/apache reload
你不需要这样做,/etc/init.d/apache restart
要么/etc/init.d/apache force-reload
目录 /etc 有 /etc/php5 应该执行其他权限。那是,
如果目录 /etc/php5/apache2 的用户或组所有者为 apache。然后至少一个组或用户应该对 /etc/php5/apache2 具有读取和执行权限。或者简单地授予其他人对目录 /etc/php5/apache2 的读取和执行权限。那是,
最后不要使 php.ini 777。如果 apache 正在检查文件的安全权限以确保它不是世界可写的,这可能会导致问题。在 php.ini 上使用 755。这足以确保问题不是由访问控制引起的。
同样,apache 也应该能够读取其他 ini 文件。他们的其他 ini 文件应该对其他人具有读取权限,或者它们应该属于用户/组 apache 并且设置了用户/组读取权限。
在遇到同样的问题一段时间后,我意识到即使我用正确的路径重新编译了 PHP 来加载配置,我也忘记
make clean
在重新编译之前做一个。显然,除非您清理目标文件,否则它不会重新生成 php.ini 加载路径上的特定部分。清理构建并重新编译后,一切顺利。