0

これがコードです

if(file_exists('1.mp4')){
echo "File Exists";
//Performing some operations on file
}
else{
    echo "File Does Not Exists";
}

さて、問題は、ファイルがアップロードされているときに「if」条件が満たされることです。
ファイルのアップロードが進行中で、そのファイルに対して何らかの操作を実行しています。
しかし、アップロード/コピー/作成が進行中であるため、ファイルは不完全であり、ここに問題があります。

file_exists の後、ファイルが正常にアップロード/コピー/作成されるまで待機する方法。次に、操作を実行しますか?

4

1 に答える 1

1

まず第一に、これが最後の可能な選択肢でない限り、これはお勧めしません。コピー操作が完了したかどうかを推測するよりも、ファイルの準備ができていることを知る方が適切です。

ファイルが大きくならなくなったとしても、コンテンツが実際に有効であるとは限りません。コピー操作が中止され、部分的なファイルが残っている可能性があります。チェックサムがないと、ファイルが実際に使用できるかどうかわかりません。

function waitFor($file, $delay = 1)
{
    if (file_exists($file)) {
        $current_size = filesize($file);
        while (true) {
            sleep($delay);
            clearstatcache(false, $file); // requires >= 5.3
            $new_size = filesize($file);
            if ($new_size == $current_size) {
                break;
            }
            $current_size = $new_size;
        }

        return $current_size;
    } else {
        return false;
    }
}

waitFor('/path/to/file', 2); 
// consider file is ready if size not changed for two seconds
于 2013-09-10T06:14:00.560 に答える