PHP.ini即使存在于配置位置也不会自动加载

Jon*_*ark 4 php apache ubuntu apache2

好吧,这可能只是我对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
Run Code Online (Sandbox Code Playgroud)

我已使用该命令pecl install pecl_http安装http.so扩展.它位于我的php.ini的正确模块目录中.我的php.ini正在加载,我可以改变ini中的内容并影响php.我extension=http.so在php.ini中包含了该行.

这工作得很好.直到我添加这些编译选项才能添加imap

--with-openssl
--with-kerberos
--with-imap
--with-imap-ssl
Run Code Online (Sandbox Code Playgroud)

哪个失败,因为我需要我修复的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)
Run Code Online (Sandbox Code Playgroud)

编辑编辑编辑编辑通过使用-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$
Run Code Online (Sandbox Code Playgroud)

编辑编辑编辑编辑编辑编辑编辑更多信息.利用另一个堆栈交换文章中显示的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
Run Code Online (Sandbox Code Playgroud)

Jon*_*ark 8

好吧希望这可以防止别人在墙上敲打几个小时.

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

自我注意:始终清理您的构建.我之前知道这一点,但事实上重建确实改变了php告诉我目录的事实.

  • 天哪,这很有帮助。总是“弄干净”! (2认同)