fwrite () więcej niż 2 GiB? [duplikować]

To pytanie ma już tutaj odpowiedź:

Czy fopen () jest ograniczony przez system plików? 4 odpowiedzi

Mam zestaw plików, które chcę połączyć (każdy reprezentuje część z pobrania wieloczęściowego).

Każdy podzielony plik ma rozmiar około 250 MB, a ja mam ich zmienną liczbę.

Moja logika konkatenacji jest prosta:

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

Trochę mi zajęło śledzenie, ale najwyraźniej, gdy mam więcej niż 8 pojedynczych części (łącznie 2GiB), mój plik wyjściowy zostaje obcięty do 2147483647 bajtów (zgłaszane przezsprintf('%u', $output)).

Przypuszczam, że wynika to z 32-bitowego wewnętrznego licznika używanego przezfopen() lubfwrite().

Jak mogę obejść ten problem (najlepiej używając tylko PHP)?

questionAnswers(1)

yourAnswerToTheQuestion