2017-04-26 56 views
-1

我有一個功能forbid(),它應該寫入拒絕訪問的日誌文件,以及拒絕的原因。出於某種原因,它不寫入日誌文件。在觸發403頭之前,fputs不會寫入

// function to forbid access 
function forbid($reason) { 
    // explain why 
    if ($reason) fputs($file, "=== ERROR: " . $reason . " ===\n"); 
    fputs($file, "*** ACCESS DENIED ***" . "\n\n\n"); 
    fclose($file); 

    // forbid 
    header("HTTP/1.0 403 Forbidden"); 
    exit; 
} 

$file較早在代碼中定義,以及其他fputs()之前該功能是否正常工作;我認爲這是關於403頭引起它不寫的東西。

+3

而且我認爲這是'$ file'在函數範圍中沒有定義的。 –

+0

如果你想在函數中使用'$ file',你應該使用use語句或者直接把它作爲參數傳遞給你的函數。 –

+0

這是一個命名的函數定義,'use'用於匿名函數。 –

回答

2

看起來像一個範圍問題。由於它是一個函數,因此它在函數範圍內尋找文件句柄$file,而不是全局函數。您需要將文件句柄傳遞給函數。

我還會假設錯誤報告已關閉,從而抑制了您的問題。

+0

啊,就是這樣。我不知道爲什麼我沒有想到它:)謝謝! – JacobTheDev