簡體   English   中英

多次寫入文件

[英]More than one writes to file

我有一個Web應用程序,當用戶單擊“保存”時,應該發生對文件的寫操作。 該應用程序是“足球調度程序”,因此多個玩家可以同時單擊“保存”按鈕。

最初,我認為這將是一件罕見的事情,但事實並非如此,因為當宣布的球員參加比賽時,這是因為比賽會在很短的時間內完成。

如果兩個玩家同時按下保存,會發生什么? 只有一名球員的保存會生效,而另一名球員的保存會丟失(而且這種情況很少發生在最后一個可用位置上,然后會有一些沖突)。

我該如何應對?

//刪除了不需要的代碼


我想知道如果不使用數據庫就可以做到這一點。 因此,也沒有答案。

我想您將以與數據庫相同的方式進行處理。 向文件添加鎖,然后等待。

就像是:

while (file_exists('file.lock')) {
  usleep(10000);
}
touch('file.lock');
...
unlink('file.lock');

您可能要添加超時。 我認為這樣做已經足夠安全了,但是我想兩個用戶仍然可以同時運行它。 在這種情況下,您可能需要添加一個檢查,以確保其內容已成功保存,然后再繼續。

更新:正如Marc B所指出的那樣,文件鎖定似乎包含在php中,直到他指出flock()才知道此功能。

$fp = fopen("file", "r+");

// try to acquire an exclusive lock, otherwise sleep 10ms before trying again
while (!flock($fp, LOCK_EX)) {  
    usleep(10000);
}

fwrite($fp, "Write something here\n");
fflush($fp);            // flush output before releasing the lock
flock($fp, LOCK_UN);    // release the lock

fclose($fp)

這將類似於我上面編寫的功能。 當然,不要關注fwrite,我只是從php.net復制了示例以顯示flock()工作方式。

不能同時寫入同一文件。

您可以使用一個數據庫,該數據庫可以同時處理多個訪問。 我認為這是處理和訪問大量數據的最佳解決方案!

或者,您可以將數據存儲在單獨用戶的單獨文件中,這些文件都在某個文件夾中創建,並且如果有更多文件可用,請先保存一個文件,然后再刪除它們。 然后繼續寫入主文件,直到沒有更多文件可用為止。 這將是一個解決方法,我真的不建議這樣做,但是如果您真的不想使用數據庫,無論如何它應該可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM