我想在PHP中編寫一個腳本來下載一個大的zip文件(2,663,439,370字節),然後我遇到了一個有趣但令人沮喪的問題:腳本首先下載了2.147.483.647字節,然後繼續下載文件,而不是附加到字節數2.147.483.648,2.1447.483.649等等,它繼續追加字節到從字節號1開始的文件。如何在PHP中下載大於2Gb的文件?
因此,下載的文件是由:字節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當然不是。一個64位int在['9223372036854775807''](https://en.wikipedia.org/wiki/9223372036854775807) – MonkeyZeus
不管怎樣,如果你有完整的服務器訪問權限,並且它是Apache,那麼請查看[mod_xsendfile]( http://www.apachelounge.com/download/) – MonkeyZeus