PHP.ini不加载

好吧,这可能只是我不知道有关的PHP,但在这里。

我在Ubuntu Hardy上。 我有一个自定义编译版本的PHP,我用这些参数编译。

./configure --enable-soap --with-zlib --with-mysql --with-apxs2=[correct path] --with-config-file-path=[correct path] --with-mysqli --with-curlwrappers --with-curl --with-mcrypt 

我用命令pecl install pecl_http来安装http.so扩展名。 这是在我的php.ini正确的模块目录。 我的php.ini正在加载,我可以改变ini内的东西,并影响PHP。 我已经在我的php.ini中包含了extension=http.so行。

这工作得很好。 直到我添加这些编译选项,以添加imap

 --with-openssl --with-kerberos --with-imap --with-imap-ssl 

其中失败,因为我需要通过apt-get install libc-client-dev的C客户端库apt-get install libc-client-dev在哪个php编译好,我有工作imap支持,呜。

然而,现在我所有的HttpRequest调用是http.so中pecl_http扩展的一部分,导致Fatal error: Class 'HttpRequest' not found Class'HttpRequest Fatal error: Class 'HttpRequest' not found错误。 我认为http.so模块不再以某种原因加载,但我找不到任何显示原因的错误。

你可能会说:“你试过撤销新的IMAP设置? 我会回答。 是的,我有。 我直接解开了所有的configuration更改,并卸载了c-client库,但仍然无法正常工作。 我觉得这很奇怪…我没有做任何改变,导致这个问题。 看了之后,我也发现,不仅是http扩展不再加载,但所有我通过php.ini加载的扩展不再加载。

至less有人能给我一些进一步的debugging步骤? 到目前为止,我已经尝试启用所有的错误,包括我的php.ini中的启动错误,其他错误,但我没有看到任何启动错误,无论是在命令行或通过Apache。 再次,php.ini似乎被parsing,因为如果我运行php_info()我得到在php.ini中的设置。

编辑它似乎只有一些php.ini设置正在聆听。 有没有办法testing我的php.ini?

编辑编辑它似乎我再次被误认为php.ini不再被加载。 但是,如果我运行php_info()我得到它正在寻找我的php.ini在正确的位置。

编辑编辑编辑我的configuration位于下面的configuration文件path位置,但它表示没有configuration文件加载。 跆拳道权限问题? 现在是644,所以每个人都应该能够阅读它,如果不写。 我试图使它777,这没有奏效。

 Configuration File (php.ini) Path /etc/php.ini Loaded Configuration File (none) 

编辑编辑编辑通过使用-c命令在命令行上加载ini我能够运行我的文件,并使用-m显示我的模块加载所以没有什么是错误的php.ini

编辑编辑编辑编辑我已经指出,我的ini目录configuration应该是一个path,而不是在文件本身findphp.ini文件。 为此,我尝试设置/ etc / etc /,并让php设置默认目录,然后将我的ini文件移动到该目录中。 全部失败:(

编辑编辑编辑编辑编辑进一步的信息,命令行运行的php –ini和ls的dir它指向在PHP设置。 在运行成功的命令行上使用-c选项运行,而不是在不包含-c的情况下运行

 j@j:/usr/local/lib$ php -ini | grep Configuration Configuration File (php.ini) Path => /usr/local/lib Loaded Configuration File => (none) Configuration j@j:/usr/local/lib$ ls /usr/local/lib php php.ini python2.5 site_ruby j@j:/usr/local/lib$ php -c /usr/local/lib/php.ini /var/www/toolbelt/test.php j@j:/usr/local/lib$ php /var/www/toolbelt/test.php Fatal error: Class 'HttpRequest' not found in /var/www/toolbelt/test.php on line 7 jonathan@jonathan:/usr/local/lib$ 

编辑编辑编辑编辑编辑编辑更多信息。 使用下面显示的strace方法,我testing了一下,看看是否有任何尝试打开在加载的PHP中做的ini文件。 没有

 j@j:/usr/local/lib$ sudo strace -e trace=open php -ini 2>&1 |grep php.ini Configuration File (php.ini) Path => /usr/local/lib j@j:/usr/local/lib$ sudo strace -e trace=open php -ini 2>&1 |grep /usr/local/lib Configuration File (php.ini) Path => /usr/local/lib extension_dir => /usr/local/lib/php/extensions/no-debug-non-zts-20060613 => /usr/local/lib/php/extensions/no-debug-non-zts-20060613 include_path => .:/usr/local/lib/php => .:/usr/local/lib/php 

检查“–with-config-file-path =”选项的值。 它应该是/ etc而不是/etc/php.ini。 似乎Apache正在尝试加载/etc/php.ini/php.ini,这就是为什么没有find该文件。

如果这不起作用,你可以strace来检查哪些文件是由PHP打开的:

 strace -f -e trace=open php --ini 

答案将帮助你找出php在哪里寻找php.ini文件。 这是我的一台服务器的输出:

 10833 open("/usr/bin/php-cli.ini", O_RDONLY) = -1 ENOENT (No such file or directory) 10833 open("/etc/php-cli.ini", O_RDONLY) = -1 ENOENT (No such file or directory) 10833 open("/usr/bin/php.ini", O_RDONLY) = -1 ENOENT (No such file or directory) 10833 open("/etc/php.ini", O_RDONLY) = 3 

好吧,希望这可以防止别人把头撞到墙上好几个小时。

我已经find了自己的解决scheme,在干净的build设我的PHP。 事实certificate,你可以改变with-config-file-path选项,让它改变phpinfo()和php -ini输出中显示的path。 但是,如果你不清理你的构build,实际使用这个设置的地方不会被重build,并且会影响你的构build。

注意自己:总是清理你的构build。 我之前知道这一点,但由于重build确实改变了PHP告诉我的目录,所以被抛弃了。