我想在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