大規模なzipファイル(2,663,439,370バイト)をダウンロードするスクリプトをPHPで作成しようとしていますが、面倒で面倒な問題に遭遇しました。スクリプトは最初の2.147.483.647バイトをダウンロードしてからファイルをダウンロードしますバイト番号2.147.483.648,2.147.483.649などを付加すると、バイト番号1から始まるファイルにバイトを追加し続けます。2Gbを超えるファイルをPHPでダウンロードするにはどうすればよいですか?
したがって、ダウンロードされるファイルは、バイト1、バイト2、 ...バイト2.147.483.647、バイト1、バイト2 ...など。
私は、2.147.483.647が32バイトシステムが格納できる最大整数値であることに気付きました。しかし、私のサーバーは64バイトのシステムで、それ以上の値を格納することができます。これを証明するために、var_dump((int)2147483648)は正しい整数を返します。
マイダウンロード・スクリプトは、できるだけ正しい(コピー&ペーストでphp.netから取られる)されheader('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="Certificat.zip"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($zipname));
readfile($zipname);
誰もがこの問題に遭遇していますか?
PHPにいくつかのソフトリミットが設定されているようですか? –
あなたのシステムは64ビットかもしれませんが、あなたのPHPはそうではないようです。 ['9223372036854775807'](https://en.wikipedia.org/wiki/9223372036854775807) – MonkeyZeus
で64ビットintが先頭になります。サーバーにフルアクセスしてApacheであれば、[mod_xsendfile]をチェックアウトしてください – MonkeyZeus