多个进程读取相同的文件php

时间:2016-06-16 10:28:36

标签: 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();
    }
}   

2 个答案:

答案 0 :(得分:2)

使用flock()获取(或尝试获取)文件锁并采取相应行动。

答案 1 :(得分:2)

它被称为竞争条件,当处理文件时,你可以在进程A使用它时锁定文件,它会锁定它,然后其他进程将检查它是否被锁定,如果它什么都不做。然后在进程A完成后解锁文件。