fwrite () mehr als 2 GiB? [Duplikat]

Diese Frage hat hier bereits eine Antwort:

Ist fopen () durch das Dateisystem begrenzt? 4 Antworten

Ich habe eine Reihe von Dateien, die ich verketten möchte (jede repräsentiert einen Teil aus einem mehrteiligen Download).

Jede geteilte Datei ist ungefähr 250 MB groß, und ich habe eine variable Anzahl von ihnen.

Meine Verkettungslogik ist einfach:

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

Es hat eine Weile gedauert, bis ich es gefunden habe, aber anscheinend wird meine Ausgabedatei auf 2147483647 Bytes (gemeldet von) gekürzt, wenn ich mehr als 8 Einzelteile (insgesamt 2 GB) habesprintf('%u', $output)).

Ich nehme an, dass dies auf eine Art internen 32-Bit-Zähler zurückzuführen ist, der von verwendet wirdfopen() oderfwrite().

Wie kann ich dieses Problem umgehen (vorzugsweise nur mit PHP)?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage