5

連結したい一連のファイルがあります (それぞれがマルチパート ダウンロードの一部を表します)。

分割された各ファイルのサイズは約 250MiB で、その数はさまざまです。

私の連結ロジックは単純明快です。

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

追跡するのにしばらく時間がかかりましたが、明らかに、8 つを超える個々のパーツ (合計 2GiB) がある場合は常に、出力ファイルが 2147483647 バイトに切り詰められます (報告によるとsprintf('%u', $output))。

fopen()これは、 orで使用されるある種の 32 ビット内部カウンターによるものだと思いますfwrite()

この問題を回避するにはどうすればよいですか (できれば PHP のみを使用してください)。

4

1 に答える 1