【发布时间】:2011-06-24 11:16:47
【问题描述】:
好吧,这可能只是我对 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-client 库,之后 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?
Edit Edit 看来我又弄错了,php.ini 根本没有被加载。但是,如果我运行 php_info(),我会发现它正在正确的位置寻找我的 php.ini。
Edit Edit Edit 我的配置位于下面的配置文件路径位置,但它说没有加载配置文件。 WTF权限问题?它目前是 644,所以如果不写,每个人都应该能够阅读它。我尝试将其设为 777,但没有成功。
Configuration File (php.ini) Path /etc/php.ini
Loaded Configuration File (none)
Edit Edit Edit Edit 通过在命令行中使用 -c 命令加载 ini,我可以运行我的文件,并且使用 -m 显示我的模块已加载 所以 php.ini 没有任何问题
编辑编辑编辑编辑编辑编辑 我已经向我指出,我的 ini 目录配置应该是在文件本身中查找 php.ini 文件的路径。为此,我尝试了设置 /etc、/etc/,并让 php 设置默认目录,然后将我的 ini 文件移动到该目录中。全部失败:(
编辑编辑编辑编辑编辑编辑 我已经向我指出,我的 ini 目录配置应该是在文件本身中查找 php.ini 文件的路径。为此,我尝试了设置 /etc、/etc/,并让 php 设置默认目录,然后将我的 ini 文件移动到该目录中。全部失败:(
编辑编辑编辑编辑编辑编辑编辑编辑 更多信息,php 的命令行运行 --ini 和它在 php 设置中指向的目录的 ls。还可以在运行成功的命令行上使用 -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 时所做的 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
【问题讨论】:
-
在重新编译 PHP 以添加 IMAP 后,您是否尝试过卸载并重新安装 pecl 模块?失败了,您是否尝试过重新安装 pecl 本身?
-
我没有,但我只是尝试过,它没有任何改变。经过进一步检查,我的 php.ini 似乎已停止加载,即使我没有进行任何更改,并且 php_info() 告诉我它位于正确的位置。
-
Server Fault 的运气可能更好:serverfault.com
-
已经在那里但没有得到答案,所以我突然出现在这里