fwrite () más de 2 GiB? [duplicar]

Esta pregunta ya tiene una respuesta aquí:

¿Está fopen () limitado por el sistema de archivos? 4 respuestas

Tengo un conjunto de archivos que quiero concatenar (cada uno representa una parte de una descarga de varias partes).

Cada archivo dividido tiene un tamaño aproximado de 250MiB, y tengo un número variable de ellos.

Mi lógica de concatenación es sencilla:

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);
}

Me tomó un tiempo rastrearlo pero, aparentemente, cada vez que tengo más de 8 partes individuales (con un total de 2GiB) mi archivo de salida se trunca a 2147483647 bytes (reportado porsprintf('%u', $output)).

Supongo que esto se debe a algún tipo de contador interno de 32 bits utilizado porfopen() ofwrite().

¿Cómo puedo solucionar este problema (preferiblemente usando solo PHP)?

Respuestas a la pregunta(1)

Su respuesta a la pregunta