php.ini没有被读取

我将phpconfiguration为在/ etc / php5 / apache2中查找php.ini文件。 phpinfo()的输出表示path设置正确,但也表示没有加载configuration文件。 我将php.ini权限暂时更改为777,以testing问题和权限不是问题。 还有什么可以解决的呢?

当我编译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说:configuration文件(php.ini)path:/ usr / local / lib加载的configuration文件:/etc/php5/apache2/php.ini扫描其他.ini文件:(none)Additional .iniparsing的文件:(无)

如果我把php.ini放在/ usr / local / lib中,configuration文件加载正常(虽然不加载额外的.ini文件)。 我不知道为什么会发生这种情况,因为我编译PHP时设置了选项。

核选项是在strace下运行apache,看看它在尝试读取php.ini文件时正在做什么。

运行“ps aux”findapache的命令行,然后停止进程。 现在运行:

 # strace -efile -f -o /tmp/apache.log /usr/sbin/apache2 -k start 

在浏览器中请求phpinfo()页面,然后使用ctrl-cclosuresstrace。 你现在可以通过grep /tmp/apache.log来查看php.ini文件,看看是否有错误显示。 这会显示你遇到的问题,如文件没有被发现或权限问题。

如果有一个open()调用返回一个数字,那么它会显示它正在读取文件,并且该文件必须有一个问题,阻止php正确parsing,但我希望这是login错误日志。

作为一种解决方法,您可以在Apacheconfiguration中使用PHPIniDir指令来强制PHP使用特定的php.ini文件

 <IfModule mod_php5.c> PHPIniDir "usr/local/lib" </IfModule> 

现在应该强制PHP使用你的php.ini文件。

你改变php.ini之后,你重新启动Apache吗?

如果是这样的话,在某些操作系统上,似乎apache会caching数据,所以不要执行/etc/init.d/apache reload ,而是需要执行/etc/init.d/apache restart/etc/init.d/apache force-reload

目录/ etc有/ etc / php5应该执行其他权限。 那是,

 chmod o+x /etc /etc/php5 

如果目录/ etc / php5 / apache2具有用户或组所有者作为apache。 那么组或用户中至less有一个应该对/ etc / php5 / apache2有读取和执行权限。 或者简单地给他人读取和执行目录/ etc / php5 / apache2上的权限。 那是,

 chmod o+rx /etc/php5/apache2 

最后不要使php.ini 777.这可能会导致问题,如果Apache正在检查文件的安全权限,以确保它不是世界上可写的。 在php.ini上使用755。 这足以确保问题不在于访问控制。

同样,apache也应该能够读取其他ini文件。 他们的其他ini文件应该具有对他人的读取权限,或者他们应该属于用户/组apache,并设置用户/组的读取权限。

经过一段时间的同样的问题,我意识到,即使我重新编译了PHP正确的path来加载configuration,我忘了做一个make clean之前重新编译。 显然它不会重新生成php.ini加载path上的特定部分,除非您清理对象文件。

清理完成并重新编译后,一切进展顺利。