使用force_download
下载 zip 文件时,我的代码适用于 268Mb(31 个 MP3 文件(的 zip 文件,但不适用于 287Mb(32 个 MP3 文件(的 zip 文件,区别在于 zip 中添加了 1 个额外的 MP3 文件。下载尝试开始,看起来好像它一遍又一遍地开始几次,并显示为失败,Chrome 表示 zip 文件不完整。Windows报告只有61Kb的zip文件在尝试打开时无效。
zip 文件由另一个代码区域创建并添加到其中的 MP3 文件。
我已经将memory_limit
增加到1024M
,但它没有什么不同。
以下是我想要工作的代码:
$this->load->helper("download");
$lastbasket = "uniquefilename.zip";
$zipdlpath = base_url()."uploads/zipped/".$lastbasket;
$fileContent = file_get_contents($zipdlpath);
force_download($lastbasket, $fileContent);
我还尝试使用以下代码:
$this->load->helper("download");
$lastbasket = "uniquefilename.zip";
$zipdlpath = FCPATH."uploads/zipped/".$lastbasket;
force_download($zipdlpath, NULL);
提供指向 zip 文件的直接链接工作正常(所以我知道问题不在于 zip 文件本身(,但控制器中的 force_download 函数似乎对较大的文件有问题,或者我是否缺少某个设置以某种方式强制限制?
PHP 7.1.33
CodeIgniter 3.1.9
尝试通过添加以下代码来增加内存限制:
ini_set('memory_limit','1024M');
增加内存限制并使用fopen,fread
试试这个
$this->load->helper("download");
$lastbasket = "uniquefilename.zip";
$zipdlpath = FCPATH."uploads/zipped/".$lastbasket;
force_download($zipdlpath, NULL);
if (is_file($zipdlpath))
{
$chunkSize = 1024 * 1024;
$handle = fopen($zipdlpath, 'rb');
while (!feof($handle))
{
$buffer = fread($handle, $chunkSize);
echo $buffer;
ob_flush();
flush();
}
fclose($handle);
exit;
}
我已经尝试使用以下自定义下载助手,希望它对您有用。
参考链接 - https://github.com/bcit-ci/CodeIgniter/wiki/Download-helper-for-large-files