fwrite () mais de 2 GiB? [duplicado]
Esta questão já tem uma resposta aqui:
O fopen () é limitado pelo sistema de arquivos? 4 respostasEu tenho um conjunto de arquivos que eu quero concatenar (cada um representa uma parte de um download de várias partes).
Cada arquivo dividido tem cerca de 250MiB de tamanho e eu tenho um número variável deles.
Minha lógica de concatenação é direta:
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);
}
Levei um tempo para rastreá-lo mas, aparentemente, sempre que eu tenho mais de 8 partes individuais (totalizando 2GiB) meu arquivo de saída fica truncado para 2147483647 bytes (reportado porsprintf('%u', $output)
).
Eu suponho que isso é devido a algum tipo de contador interno de 32 bits usado porfopen()
oufwrite()
.
Como posso contornar esse problema (preferencialmente usando apenas PHP)?