代码点火器force_download在大型 Zip 文件上失败



使用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

相关内容

  • 没有找到相关文章

最新更新