2012-12-05 96 views
0

該文件是否仍然有正確的以前的內容?如果寫入文件失敗,會發生什麼情況?

1)當使用file_put_contents發生FUNC

2)使用拷貝發生FUNC

我這麼問是因爲我想要實現半動態頁面錯誤錯誤,我想知道如果在這個過程中的錯誤可能會導致網頁的問題?

+2

它取決於千件不同的事情,其中​​主要是正在執行的寫入類型以及文件所在的文件系統的類型。 – Jon

+1

如果您擔心這個問題,請先寫入臨時文件,然後重新命名。 –

+0

@Jon 我在問,因爲我想實現半動態頁面,我想知道這個過程中的錯誤是否會導致網頁出現問題? – MTVS

回答

1

如果你正在做簡單的東西像file_put_contents("index.html"),可以有多個問題:

  • 如果寫入失敗,你留下了不必要的HTML,或空白頁;
  • 如果服務器很忙,訪問者可以在PHP進程寫入文件時看到空頁面或部分內容。

你應該做的是使用臨時文件:

if (false !== file_put_contents("index.html.tmp", $data)) { 
    rename("index.html.tmp", "index.html"); 
} 

使用臨時文件並重新命名將會避免上述兩個問題。適用於各種文件類型和用例。如果重命名失敗,您仍然會擁有舊版本。這是很好的,因爲即使所有文件操作都無法執行,它也不會損壞您的站點。

要增加安全性,請將tmp文件寫入Web瀏覽器無法訪問的路徑。

+0

通過'false == * statement *'% - |打破邏輯 – Stranger

相關問題