我有一個網站,在同一時間,可以有多個用戶同時寫入同一個文件。我的代碼示例如下。多個用戶同時使用PHP寫入同一個文件使用PHP
PHP 5.6.20
<?php
$root=realpath($_SERVER["DOCUMENT_ROOT"]);
$var=time()."|";
echo $var."<br/>";
$filename=$root."/Testing/Testing/test1.txt";
$myfile=fopen($filename,"a");
fwrite($myfile,$var);
fclose($myfile);
$myfile=fopen($filename,"r");
$contents = fread($myfile, filesize($filename));
echo $contents;
fclose($myfile);
?>
我讀到,在PHP如果多個用戶試圖寫在同一文件相同的文件,有數據損壞的機會,我的當然不希望有一個可能導致長期數據損壞的代碼。
我試着在我的瀏覽器上幾乎同時運行上面的代碼來模擬多個用戶同時寫入同一個文件,並且它沒有對正在寫入的文件產生錯誤或任何數據損壞,但我仍然不確定未來的數據損壞情況。
我讀過我可以使用flock確保2個用戶不能同時寫入文件,但是由於我測試了上述代碼,並且沒有產生數據損壞,所以我不確定是否應該用羊羣更新我的代碼或保持原樣。
我的問題是:
1)是否有上述代碼破壞文件,它的寫入的任何機會呢?
2)如果是,使用flock會解決這個問題嗎?如果是的話,我應該如何在上面的代碼中實現羊羣?
編輯:
我知道,這種不確定性可以通過使用數據庫來解決,但這種情況下,最好使用純文本,所以請不要建議我使用DB。
在此先感謝。
此代碼可能會導致文件損壞。您正在附加到該文件,以便它可以。如果你使用這個作爲日誌文件,那麼它會沒事的。使用羣集將導致代碼等待,並導致延遲到使用它。 – ryantxr
你是什麼意思,我追加到文件,所以它可能會好嗎?什麼時候不好?是用「w」寫入文件的時候,因爲我嘗試過,並且沒有數據損壞。 –
您的用戶是否有原因不能寫入數據庫?文件非常適合閱讀(通過包括等),但是你是對的,你可能會在權利爭奪。這可能甚至不能用數據庫解決 - 例如,如果你使用MySQL的舊MyISAM表類型。但是如果你堅持使用InnoDB,那麼你就一切都準備好了。所以只是想知道爲什麼你要首先選擇一個文件。抱歉不解決你的問題,但。 –