【问题标题】:IDM (Internet Download Manager) takes x2 time to download my ZIP fileIDM(Internet 下载管理器)需要两倍的时间来下载我的 ZIP 文件
【发布时间】: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


【解决方案1】:

答案见@CBroe的评论。

这些下载管理器经常同时发出多个请求,以并行下载响应的多个部分。这可能会与您的脚本混淆,因为已经打开的 ZIP 文件可能被阻止(因此脚本的下一个实例将不得不等待,直到前一个完成并再次释放它),或者它只是执行“double工作”,因此总体上需要更多时间。
因此,您必须找到一种方法来识别这些“额外”请求,并取消/拒绝它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    相关资源
    最近更新 更多