[英]Multiple process read same file php
我的應用程序內部有一個小問題。 我使用crontab從服務器自動啟動了許多進程,這些進程是用php編寫的,以讀取文件夾中的文件。
有時,不同的進程會讀取同一文件,並在應用程序內部造成問題。 有沒有辦法解決這個問題? 實際上,我讀取了文件夾中的所有文件,讀取了每個文件並立即將其刪除,但是有時另一個進程在刪除文件之前會讀取相同的文件。
這是我用cakephp3編寫的腳本(因此,諸如File之類的某些類僅適用於cakephp3,但並不是問題的重點)以讀取和刪除:
$xml_files = glob(TMP . 'xml/*.xml');
foreach($xml_files as $fileXml)
{
//read the file and put into a string or array or object
$explStr = explode('/', $fileXml);
$filename = $explStr[count($explStr) - 1];
$path = TMP . '/xml/' . $filename;
$file = new File($path, false);
if($file->exists()){
$string = $file->read();
$file->close();
$file->delete();
}
}
使用flock()
獲取(或嘗試獲取)文件鎖並采取相應的措施。
這被稱為競爭條件,當使用文件時,您可以在進程A使用文件時將其鎖定,然后將其鎖定,然后其他進程會檢查文件是否被鎖定,然后什么也不做。 然后在進程A完成文件后將其解鎖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.