fwrite () más de 2 GiB? [duplicar]
Esta pregunta ya tiene una respuesta aquí:
¿Está fopen () limitado por el sistema de archivos? 4 respuestasTengo 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)?