Мой обработчик запросов PHP выглядит так:
// it's one file only, always
foreach($_FILES as $file){
// error checks, move etc.
if(!move_uploaded_file ...
// assemble if the number of files match the total number of parts
$numFiles = count(glob("{$tempDir}/*", GLOB_NOSORT));
if($numFiles === $totalChunks){ // <- problem
// assemble file
}
}
Похоже, что если две части прибывают одновременно, это условие выполняется дважды.
Есть ли способ загрузить файл порциями, скажем, по 3, и избежать условия гонки при сборке файла на стороне PHP?
Я думал «спать» в течение ~ 5 секунд внутри цикла, когда последняя часть загружена (например, № 3 из 3). В цикле я продолжал делать проверку, пока не прибудут все остальные части. Но что, если связь разрывается, а они нет? 🙂
Задача ещё не решена.
Других решений пока нет …