【发布时间】:2022-12-15 08:54:22
【问题描述】:
我将所有报告压缩到一个 ZIP 文件中。当我关闭 IDM 时,下载过程需要 20 秒。但是当启用IDM时,显示IDM下载对话框需要20秒,然后在我点击确定后,又需要20秒。
我可以在我的 PHP 代码中对此做些事情以使 IDM 用户不会受苦吗?或者有什么解释吗?
这就是我在 PHP 中创建 Zip 文件的方式:
$zip = new ZipArchive();
$filename = "Test.zip";
if($zip->open($filename, ZipArchive::CREATE)!==TRUE) die("cannot open <$filename>\n");
foreach([1,2,3,4,5] as $id) {
$path = dirname($_SERVER['HTTP_REFERER']) . '/myreport.php';
$ch = curl_init($path);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(['id' => $id]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_NOSIGNAL, 1);
$get_file = curl_exec($ch);
curl_close($ch);
if($get_file === false) echo 'CURL ERROR: '.curl_error($ch);
$zip->addFromString("Report $id.pdf", $get_file);
}
$zip->close();
header('Content-disposition: attachment; filename='.$filename);
header('Content-type: application/zip');
ob_clean();
readfile($filename);
unlink($filename);
die;
【问题讨论】:
-
而“IDM”是 - 什么......? (用甚至没有任何描述的标签来标记问题,并不是很有帮助。)
-
@CBroe 抱歉。我编辑了我的标题
-
这些下载管理器经常同时发出多个请求,以并行下载响应的多个部分。这可能会与您的脚本混淆,因为已经打开的 ZIP 文件可能被阻止(因此脚本的下一个实例必须等待,直到前一个完成并再次释放它),或者它只是“双工作”,因此总体上需要更多时间。
-
所以你必须想办法确认这些“额外”请求,并取消/拒绝它们。
-
好的,找到了额外的请求。我编辑了我的问题以包含最终解决方案。顺便说一句,如何将您的评论标记为正确答案?
标签: php zip download-manager idm