确认PHP的`file_put_contents()`完成时间

时间:2019-07-17 16:51:10

标签: php laravel laravel-5

在我的Laravel应用中,我正在使用流传输将大文件(> 1GB)下载到服务器上以进行进一步处理:

    $stream = Storage::disk('google')->getDriver()->readStream($file['path']);
    file_put_contents(public_path("files/{$filename}.tiff"), stream_get_contents($stream));

    if (file_exists(public_path("files/{$filename}.tiff"))) {
        ConvertTIFF::dispatch();
        return;
    }

问题在于,由于我正在流式传输文件,因此在流式传输过程实际完成之前很久就已经创建了文件本身。因此,我的file_exists()检查会经常在文件完成之前触发我的ConvertTIFF事件。

是否有更简单的方法来检查file_put_contents()流传输过程是否完成?还是有一种方法可以阻止进程运行,从而在完全下载文件之前没有引发该事件的危险?

1 个答案:

答案 0 :(得分:1)

file_put_contents()返回写入文件的字节数,如果不成功,则返回False。这样您就可以检查状态

$status = file_put_contents(public_path("files/{$filename}.tiff"), stream_get_contents($stream));

/*if ($status) {
    echo "success";
} else {
    echo "failed";
}*/

return $status;