【问题标题】:PHP.ini does not load automatically even though it exists at the config locationPHP.ini 不会自动加载,即使它存在于配置位置
【发布时间】: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
  • 已经在那里但没有得到答案,所以我突然出现在这里

标签: php apache ubuntu apache2


【解决方案1】:

好的,希望这可以防止其他人在几个小时内用头撞墙。

我在干净构建我的 php.ini 时找到了自己的解决方案。事实证明,您可以更改 with-config-file-path 选项并让它更改显示在 phpinfo() 和 php -ini 输出中的路径。但是,如果您不清理构建,则实际使用该设置的位置不会被重建,并且会破坏您的构建。

自我注意:始终清理您的构建。我以前知道这一点,但被重建实际上改变了 php 告诉我的目录的事实而被抛弃了。

【讨论】:

  • 天哪,这很有帮助。总是make clean!
猜你喜欢
  • 2012-05-29
  • 1970-01-01
  • 2013-10-23
  • 1970-01-01
  • 2014-12-14
  • 2012-03-04
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
相关资源
最近更新 更多