2009-08-31 133 views
1

我已經縮小了我的問題。 當我從命令行運行"error_log('hey');"時,它轉儲到標準輸出。但是,如果我從我的Web界面(Apache)運行相同的代碼,它會將錯誤放入錯誤日誌中。 我檢查了兩個ini文件,Apache正在使用的一個,以及/ private/etc中的一個(我在運行MAMP的Mac上)。兩個error_log變量指向完全相同的地方。 當我運行php.ini配置錯誤

echo ini_get('error_log'); 

值是在命令行上一樣,因爲它是在瀏覽器中。 什麼ini設置在這裏配置錯誤?這很煩人,因爲錯誤記錄不僅僅是錯誤的。它影響了我的include路徑,以及:/

回答

0

你可能需要編輯以下配置文件:

/Applications/MAMP/conf/php5/php.ini 

甲基苯丙胺使用它自己的Apache服務器,它通過對端口的默認運行8080你可能想轉關閉系統偏好設置 - >共享中的Apache服務器。

另外,嘗試運行包含PHP文件:

<?php phpinfo(); ?> 

這會告訴你哪個php.ini文件實際上是由Apache的閱讀。

1

你想完成什麼?在apache中,stderr進入error_log ... error_log()function documentation指出,默認情況下它會記錄到服務器的錯誤日誌。如果要登錄到其他目標,請使用參數message_typedestination

0

這裏相關的ini設置是display_errors

從命令行的值On將轉儲錯誤到STDOUT; stderr將轉移他們到STDERR和Off將壓制他們。對於Apache,只有OnOff有意義。

可能性是Apache的ini文件有display_errors = Off,而/ private/etc中的文件有display_errors = On

error_log指令告訴PHP在哪裏記錄錯誤,但它也要求log_errors設置爲On,否則它沒有效果。 (再一次,/ private/etc中的ini文件可能有log_errors = Off。)

0

錯誤日誌顯示在控制檯中,而不是在日誌文件中的原因可能是因爲權限問題 - 我並不真正瞭解MacOS,但因爲它是基於UNIX的,所以我猜測:

  • Apache所使用的日誌文件屬於一個特定的用戶
  • 運行時從控制檯的腳本,你是不是該用戶,你沒有寫訪問日誌文件

如果它不能登錄到日誌文件,我想這個error_log正在寫入到錯誤標準輸出(stderr),這通常是控制檯。


This comment手冊頁面上似乎表明,這可能是你的問題的原因(引用):

似乎PHP日誌如果 無法寫入日誌文件到stderr 。命令 行PHP返回到stderr,因爲 日誌文件通常只能由網絡服務器寫入 。


此外,確保log_errorsdisplay_errors在CLI中使用的php.ini文件是否正確配置:

log_errors布爾

告知是否腳本錯誤消息應該將 記錄到服務器的錯誤 日誌或error_log。這個選項因此是 服務器特定的。

和:

的display_errors

這確定是否錯誤應該 打印到屏幕的 輸出部分或者如果它們應該從被隱藏 用戶。

值「stderr」將錯誤發送到 stderr而不是stdout。