Скажем, я загружаю чанк-файл и мне нужно его перекомпоновать. Я знаю общее количество фрагментов и данных за каждую итерацию.
Я основал код так:
for ($i = 1; $i <= $num_chunks; $i++) {
$file = fopen($target_file.$i, 'rb');
$buff = fread($file, 2097152);
fclose($file);
$final = fopen($target_file, 'ab');
$write = fwrite($final, $buff);
fclose($final);
unlink($target_file.$i);
}
Видимо, значение 2097152 не имеет значения, по крайней мере для меня. Я прочитал php документы, но не мог понять слишком много. Может ли кто-нибудь объяснить мне, как я должен выбрать этот второй параметр Fread? И как это работает?
Второй параметр — это объем данных для чтения, так как при чтении этого в одном блоке вы должны быть уверены, что этого достаточно для обработки любого фрагмента. Значение, которое вы установили, составляет 2 МБ, что может быть достаточно, но вы можете изменить код так, чтобы он читал его небольшими порциями и циклически, пока ввод полностью не будет прочитан.
Я также изменил его, чтобы открыть выходной файл один раз и просто написать содержимое по мере продвижения …
$final = fopen($target_file, 'wb'); // Open for write and start from beginning of file
for ($i = 1; $i <= $num_chunks; $i++) {
$file = fopen($target_file.$i, 'rb');
while($buff = fread($file, 4096)) {
fwrite($final, $buff);
}
fclose($file);
unlink($target_file.$i);
}
fclose($final);
Других решений пока нет …