簡體   English   中英

多個進程讀取同一文件的PHP

[英]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.

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