2011-02-09 49 views
4

好吧,這可能只是我對PHP不瞭解,但在這裏。PHP.ini不會自動加載,即使它存在於配置位置

我在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這之後的PHP編譯好,我已經工作了IMAP支持,嗚的C客戶端庫。然而,現在我所有的HttpRequest調用都是http.so中pecl_http擴展的一部分,導致Fatal error: Class 'HttpRequest' not found錯誤。我認爲http.so模塊不再以某種原因加載,但我找不到任何顯示原因的錯誤。

您可能會說:「您是否嘗試撤消新的imap設置?」我會回答。是的,我有。我直接解開了所有配置更改並卸載了c-client庫,但仍然無法使其工作。我認爲這很奇怪......我沒有做出任何會導致這個問題的變化。看過之後,我也發現不僅http擴展不再加載,而且所有通過php.ini加載的擴展都不再加載。

有人可以至少給我一些進一步的調試步驟?到目前爲止,我已經嘗試啓用所有錯誤,包括我的php.ini中的啓動錯誤,這對其他錯誤起作用,但是我沒有在命令行或通過apache看到任何啓動錯誤。再次,php.ini似乎被解析,因爲如果我運行php_info(),我得到的是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,/等/,並讓PHP設置默認的目錄,然後移動我的ini文件到該目錄中的所有失敗:(

編輯編輯編輯編輯編輯編輯進一步信息,PHP的命令行運行 - -ini和ls of dir它指向php設置。在運行成功的命令行上運行時使用-c選項運行,而不是當我不包含-c

[email protected]:/usr/local/lib$ php -ini | grep Configuration 
Configuration File (php.ini) Path => /usr/local/lib 
Loaded Configuration File => (none) 
Configuration 
[email protected]:/usr/local/lib$ ls /usr/local/lib 
php php.ini python2.5 site_ruby 
[email protected]:/usr/local/lib$ php -c /usr/local/lib/php.ini /var/www/toolbelt/test.php 
[email protected]:/usr/local/lib$ php /var/www/toolbelt/test.php 

Fatal error: Class 'HttpRequest' not found in /var/www/toolbelt/test.php on line 7 
[email protected]:/usr/local/lib$ 

編輯編輯編輯編輯編輯編輯編輯更多信息。利用另一個堆棧交換文章中顯示的strace方法,我進行了測試,以查看是否有任何嘗試打開加載php所做的ini文件。沒有

[email protected]:/usr/local/lib$ sudo strace -e trace=open php -ini 2>&1 |grep php.ini 
Configuration File (php.ini) Path => /usr/local/lib 
[email protected]:/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 
+1

您是否嘗試卸載並重新安裝pecl模塊,然後重新編譯PHP以添加IMAP?否則,你有沒有嘗試重新安裝pecl本身? – Robin 2011-02-09 22:18:45

+0

我沒有,但我只是試過,它沒有改變。看起來,經過進一步檢查,我的php.ini已經停止加載,即使我沒有做任何更改,php_info()告訴我它在正確的位置。 – 2011-02-09 22:25:18

回答

7

好的,希望這可以防止別人把頭撞在牆上幾個小時。

我發現我自己的解決方案,在乾淨的建設我的PHP。事實證明,您可以更改with-config-file-path選項,並讓它改變phpinfo()和php -ini輸出中顯示的路徑。但是,如果你沒有清理你的構建,那麼實際使用該設置的地方不會被重建,並會影響你的構建。

注意自我:總是清理你的構建。我之前知道這一點,但由於重建實際上改變了php告訴我的目錄是什麼的事實而被拋棄了。

相關問題