2013-06-12 60 views
0

我有一個每小時左右更新的緩存文件。文件大小範圍從100KB到1MB。緩存更新的方式是使用file_put_contents()方法。PHP在這種情況下提供文件併發性嗎?

只有服務器寫入文件。但是,持續訪問該文件。用戶可以通過腳本訪問該文件,該腳本執行一次讀取readfile()以將其回顯給用戶。

如果正在通過緩存腳本讀取文件,並且服務器運行用戶讀取腳本,或者相反,會出現問題嗎?或者這是由PHP自動處理>

+0

是的,這將是一些問題。 – lvarayut

+0

如果是或者不知道如何在您的服務器mod cgi etc中調用php以及您的php.config如何設置......如果一切都正確配置,則沒有問題:D – donald123

+0

什麼樣的我應該尋找在PHP配置文件?另外我想我有php.ini,或者是不同的? –

回答

0

基本上,您應該在寫入或讀取時鎖定文件。至少,它保證沒有問題。這是編程的好方法!示例如下所示。

<?php 

$fp = fopen("/tmp/lock.txt", "w+"); 

if (flock($fp, LOCK_EX)) { // do an exclusive lock 
    fwrite($fp, "Write something here\n"); 
    flock($fp, LOCK_UN); // release the lock 
} else { 
    echo "Couldn't lock the file !"; 
} 

fclose($fp); 

?> 

More information

+0

使用readfile讀取文件時會發生什麼情況,但鎖定了該文件?還是應該在嘗試閱讀之前檢查它是否被鎖定?在那種情況下,我應該睡一段時間,然後再試一次? –

+0

請注意,您應該在嘗試讀取文件之前進行檢查。 flock()函數鎖定或釋放文件。該函數成功返回TRUE或失敗時返回FALSE。 – lvarayut