2012-01-21 99 views
4

我有一個通過Apache運行得很好的php腳本,但它在cli中運行時失敗,所以我想知道發生了什麼。爲此,我想查看錯誤日誌,但我設置的cli錯誤日誌不起作用。如何設置PHP CLI的錯誤日誌?

$ php -i | grep error 
display_errors => Off => Off 
display_startup_errors => Off => Off 
error_append_string => no value => no value 
error_log => /var/log/php_error_log => /var/log/php_error_log 
error_prepend_string => <font color=ff0000> => <font color=ff0000> 
error_reporting => 30711 => 30711 
html_errors => Off => Off 
ignore_repeated_errors => Off => Off 
log_errors => On => On 
log_errors_max_len => 1024 => 1024 
track_errors => Off => Off 
xmlrpc_error_number => 0 => 0 
xmlrpc_errors => Off => Off 
suhosin.disable.display_errors => Off => Off 
suhosin.sql.bailout_on_error => Off => Off 

所以error_loglog_errors都設置:當我獲得通過命令行錯誤日誌的詳細信息我已經在適當的php.ini文件,將確認設置此。懸停,沒有實際保存日誌。權限已到位。那它會是什麼?我讀過這個帖子:PHP CLI won't log errors,但在這裏找不到解決方案。

+0

你確定運行php的用戶已經把'acc/var/log/php_error_log'寫入了嗎? – technology

+0

它確實可以寫入,但問題原來是發生了重定向,它不會在CLI中顯示任何輸出,也不會出現任何錯誤。 – user

+0

shell重定向不應該影響PHP的日誌記錄行爲。你可以發佈'ls -al/var/log/php_error_log'嗎? – hek2mgl

回答

1

日誌文件可能已經由不同的用戶(www-data?)通過php(mod_php或php_fpm等)創建。因此,如果您以其他人身份運行腳本,則可能無法訪問該文件,甚至可能無法訪問該路徑。您可以嘗試以不同的用戶身份運行它

sudo -u www-data php your_script.php 
+0

不錯,我有我的日誌權限錯誤,因爲我手動創建它們。但如果你只是在php.ini中放置位置,PHP會爲你創建文件(我不知道) - 方式更簡單! –

6

通過CLI和HTTP請求的PHP都使用不同的php.ini配置。在你的情況下,我懷疑,如果你正在處理CLI PHP使用的php.ini。你可以嘗試執行:

$ php -i >> info.txt 

這將節省您的phpinfo()函數到本地文件info.txt。然後打開文件並找到設置「加載的配置文件」 - 它應該指向加載的php.ini文件的絕對路徑。

如果一切正常,那麼只需運行CLI命令來測試功能error_log是否按預期工作。通過CLI執行:

$ php -r "error_log('test error', 3, './errors.log')" 

,你應該在同一個目錄下的文件找到指定測試誤差 errors.log。如果你找不到它,那麼你可能需要更新你的php.ini設置或設置正確的寫入權限,進程或文件所有者。

+0

如果他從命令行運行命令,我懷疑他確實使用CLI配置 – sitilge

+0

,但是如果他不知道哪個是正確的php.ini,而他正在嘗試配置錯誤的呢?我自己也犯了同樣的錯誤,並花了我一些時間弄清楚:-)他不應該提供有關配置有據可查的php指令的建議,而應該檢查他是否正在修改正確的php.ini文件。 – lubosdz