好的,这可能只是我对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
哪个失败了,因为我需要c-client库,我修复了apt-get install libc-client-dev
之后php编译好了,我有工作的imap支持,哇。
但是,现在我对HttpRequest的所有调用都是http.so中pecl_http扩展的一部分,导致Fatal error: Class 'HttpRequest' not found
错误。我认为http.so模块由于某种原因不再加载,但我找不到任何显示原因的错误。
你可能会说“你试过撤消新的imap设置吗?”我会回答。是的,我有。我直接解除了所有配置更改并卸载了c-client库,但仍然无法使其工作。我觉得这很奇怪......我没有做出任何导致这个问题的改变。看了之后我还发现不仅http扩展不再加载了,而且我通过php.ini加载的所有扩展都不再加载了。
有人至少可以给我一些进一步的调试步骤吗?到目前为止,我已经尝试启用所有错误,包括我的php.ini中的启动错误,这些错误适用于其他错误,但我没有在命令行或通过apache看到任何启动错误。而且,如果运行php_info(),php.ini似乎正在被解析,我得到了php.ini中的设置。
编辑似乎只收听了部分php.ini设置。有没有办法测试我的php.ini?
编辑编辑看来我又错了,php.ini根本没有被加载。但是,如果我运行php_info(),我会在正确的位置找到我的php.ini。
编辑编辑编辑我的配置位于下面的配置文件路径位置,但它表示没有加载配置文件。 WTF权限问题?它目前是644,所以每个人都应该能够阅读它,如果不写它。我试着把它变成777但是没用。
Configuration File (php.ini) Path /etc/php.ini
Loaded Configuration File (none)
编辑编辑编辑编辑通过使用-c命令在命令行上加载ini我可以运行我的文件并使用-m显示我的模块加载 所以php.ini
没什么问题编辑编辑编辑编辑编辑我已经告诉我,我的ini目录配置应该是找到php.ini文件的路径而不是文件本身。为此我尝试了设置/ etc,/ etc /,并让php设置默认目录,然后将我的ini文件移动到该目录中。都失败了:(
编辑编辑编辑编辑编辑我已经告诉我,我的ini目录配置应该是找到php.ini文件的路径而不是文件本身。为此我尝试了设置/ etc,/ etc /,并让php设置默认目录,然后将我的ini文件移动到该目录中。一切都失败了:(
编辑编辑编辑编辑编辑编辑更多信息,php --ini的命令行运行以及它在php设置中指向的dir。也可以在运行成功的命令行上使用-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方法,我测试了是否有任何尝试打开加载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
答案 0 :(得分:7)
好的希望这会阻止别人将头撞到墙上好几个小时。
我已经在干净的构建我的php中找到了自己的解决方案。事实证明,您可以更改with-config-file-path
选项,并让它更改phpinfo()和php -ini输出中显示的路径。但是,如果你不清理你的构建,那么设置实际使用的地方就不会被重建,并且会破坏你的构建。
自我注意:始终清理您的构建。我之前知道这一点,但事实上重建确实改变了php告诉我该目录的事实。