PHP - 等待文件存在

时间:2017-03-26 10:33:59

标签: php while-loop wait

我想执行一个生成txt文件的exe文件,并在另一个脚本中执行,然后检查是否已创建txt文件。

在xampp中,我只是将test.txt文件拖到以下php脚本dir中,但它似乎无法正常工作,如果我将text.txt添加到dir并启动脚本而不是在添加之前开始,然后第二个回声似乎永远不会发生。

如何让PHP等待文本文件存在然后继续?

set_time_limit(0);

echo "Script began: " . date("d-m-Y h:i:s") . "<br>";

$status = file_exists("test.txt");
while($status != true) {
    if ($status == true) {
        echo "The file was found: " . date("d-m-Y h:i:s") . "<br>";
        break;
    }
}

这也不起作用:

set_time_limit(0);

echo "Script began: " . date("d-m-Y h:i:s") . "<br>";

while(!file_exists("test.txt")) {
    if (file_exists("test.txt")) {
        echo "The file was found: " . date("d-m-Y h:i:s") . "<br>";
        break;
    }
}

4 个答案:

答案 0 :(得分:4)

我相信你有其他保护措施可以确保你没有处于无限循环中。

while(!file_exists('test.txt'));
echo "The file was found: " . date("d-m-Y h:i:s") . "<br>";

会更简单。

无论如何,你的问题在于你的预测试。由于它没有开始,它永远不会重复。你需要的是一个后期测试:

do {
    if (file_exists("test.txt")) {
        echo "The file was found: " . date("d-m-Y h:i:s") . "<br>";
        break;
    }
} while(!file_exists("test.txt"));

答案 1 :(得分:2)

我想你应该使用这种方法:

set_time_limit(0);

echo "Script began: " . date("d-m-Y h:i:s") . "<br>";

while (true) {
    // we will always check for file existence at least one time
    // so if `test.txt` already exists - you will see the message
    // if not - script will wait until file appears in a folder
    if (file_exists("test.txt")) {
        echo "The file was found: " . date("d-m-Y h:i:s") . "<br>";
        break;
    }
}

答案 2 :(得分:2)

这应该可以正常使用

npm

答案 3 :(得分:0)

简短的实验表明,等待异步文件系统更改(在Apache中使用PHP作为模块)必须在循环中产生控制权。否则,等待的循环次数(例如,要通过unlink()删除文件的循环次数)在很大范围内是随机的。可以通过“ usleep(250000)”完成这种循环内的产生,这将产生控制时间为1/4秒。