1

これは、競合状態に関してアップロードされたファイルを移動する安全な方法ですか?

do { 
    $file = $path . "/" . uniqid() . '.' . $ext; 
    $fh = @fopen($file, 'x'); 
} while( ! $fh);
move_uploaded_file($src, $file);

UPD問題を解決する他の方法を学ぶことに加えて、このコードが競合状態の影響を受けるかどうかを知りたいです。AFAIU、「x」モードの fopen および move_uploaded_file はアトミックであるため、衝突は発生しません。

それに加えて、「uniqid で十分」に関して、 tempnam へのコメントで、競合状態を避けるために「x」モードで fopen を使用する必要があると述べた人が 人かいます。彼らは過度に妄想的ですか?コードが大幅に複雑にならなければ、より安全なソリューションを使用する方がよいと思います。

4

1 に答える 1

1

PHP のtempnam関数は一意性を保証します。または、マイクロタイムスタンプに基づくファイル名を使用することもできます (これは MS-Windows では機能しません...)。

于 2012-10-22T20:02:23.247 に答える