檢查 fclose() 的返回值是一個好習慣,因為某些作業系統只會在關閉時才將檔案輸出刷新,因此可能會從 fclose() 返回錯誤。 透過這樣做,您可以捕捉到嚴重的資料遺失錯誤。
我可是吃過苦頭才學到這一點的。
(PHP 4, PHP 5, PHP 7, PHP 8)
fclose — 關閉開啟的檔案指標
範例 #1 一個簡單的 fclose() 範例
<?php
$handle = fopen('somefile.txt', 'r');
fclose($handle);
?>
檢查 fclose() 的返回值是一個好習慣,因為某些作業系統只會在關閉時才將檔案輸出刷新,因此可能會從 fclose() 返回錯誤。 透過這樣做,您可以捕捉到嚴重的資料遺失錯誤。
我可是吃過苦頭才學到這一點的。
一般來說,在使用完檔案後將其關閉始終是個好主意。 沒有正確關閉的檔案很容易出錯並損毀。 如果您擔心效率問題,其額外開銷可以忽略不計。
如果您在使用 stream_socket_server / stream_select 開啟的某些用戶端串流無法正常斷線時,您應該嘗試使用 stream_socket_shutdown。
<?php stream_socket_shutdown($clientStream,STREAM_SHUT_RDWR); ?>
確保使用 fread() 或其他等效方法清除輸入緩衝區中的所有輸入封包非常重要。 儘管您可以呼叫 fclose(),但在清除輸入封包之前,套接字實際上並不會關閉。 這可能會造成一些混淆。
如果您想將檔案控制代碼透過一些函式串接起來,且每個函式都允許關閉檔案,那麼您可能需要在後續的函式中先檢查控制代碼是否仍然有效。
開啟檔案時,通常會使用如下程式碼:
if (!$fh = fopen($filename, $mode)) return false;
但如果您可能已經關閉了檔案,並且想要檢查這一點,類似的語句將無法正常運作。
無效: if (!$fh) end_of_chain();
更好的用法: if (is_resource($fh)) end_of_chain();