我想確保沒有使用a custom PHP error handler引入競態條件。爲此,我想知道如果我可以依賴error_log()或者如果我需要使用其他文件鎖定方法來確保錯誤被正確記錄。PHP函數error_log()是否安全使用?
默認的PHP錯誤處理程序是如何工作的?比賽條件安全嗎?
例如,我必須鎖定文件(這可能會導致錯誤,在這個簡單的版本丟失)
function log_error($message)
{
if(! $fp = @fopen('/path/to/error.log', 'a'))
{
return FALSE;
}
flock($fp, LOCK_EX);
fwrite($fp, $message);
flock($fp, LOCK_UN);
fclose($fp);
return TRUE;
}
或者我可以叫的error_log?
error_log($message, 0);
error_log($ message,0)將使用http://php.net/error-log指令,因此您必須將其設置正確。如果你在那裏使用syslog,那麼你應該沒問題:http://stackoverflow.com/questions/1163194/syslog-r-for-linux,但你應該檢查我們系統上的系統日誌版本(在大多數系統上是安全的)。 – XzKto 2011-06-22 14:36:16