fwrite () mais de 2 GiB? [duplicado]

Esta questão já tem uma resposta aqui:

O fopen () é limitado pelo sistema de arquivos? 4 respostas

Eu 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)?

questionAnswers(1)

yourAnswerToTheQuestion