fwrite () более 2 ГиБ? [Дубликат]
На этот вопрос уже есть ответ здесь:
Ограничена ли fopen () файловой системой? 4 ответаУ меня есть набор файлов, которые я хочу объединить (каждый представляет часть из нескольких частей загрузки).
Каждый разделенный файл имеет размер около 250 МБ, и у меня их переменное количество.
Моя логика конкатенации проста:
if (is_resource($handle = fopen($output, 'xb')) === true)
{
foreach ($parts as $part)
{
if (is_resource($part = fopen($part, 'rb')) === true)
{
while (feof($part) !== true)
{
fwrite($handle, fread($part, 4096));
}
fclose($part);
}
}
fclose($handle);
}
Мне потребовалось некоторое время, чтобы отследить его, но, по-видимому, всякий раз, когда у меня есть более 8 отдельных частей (общим объемом 2 ГБ), мой выходной файл усекается до 2147483647 байт (сообщаетsprintf('%u', $output)
).
Я полагаю, это из-за какого-то 32-битного внутреннего счетчика, используемогоfopen()
или жеfwrite()
.
Как я могу обойти эту проблему (желательно используя только PHP)?