【问题标题】:php download code works for pdf but not zipphp下载代码适用于pdf但不适用于zip
【发布时间】:2016-09-14 10:59:53
【问题描述】:

我已经使用此代码成功下载了 pdf 文件。我正在使用相同的代码下载包含 exe 的 zip 文件(只需更改文件名并将 mime 类型更改为 application/zip),当我尝试打开下载的文件时出现此错误: “Windows 无法打开该文件夹。 压缩(压缩)文件夹“[文件名]”无效”

我验证了原始未压缩文件可以运行,并且我可以在我的笔记本电脑上成功解压缩文件夹并运行exe。

我还通过 Filezilla 将 zip 文件从我的网站下载到一个临时文件夹,解压缩并运行它,以确保上传没有问题。

这是一个 70 MB 的文件,所以我尝试下载一个 65 kb 的压缩 exe --- 同样的错误。

我添加了 header("Content-Length: " . $file_size),即使没有它的 pdf 下载也很好 --- 同样的错误。

我尝试了 application/octet-stream --- 同样的错误。

有什么想法吗?任何建议表示赞赏。

$file_size  = filesize($file_path);  
$file = @fopen($file_path,"r"); 
if ($file) 
{
    header("Pragma: public"); 
    header("Cache-Control: public, must-revalidate, post-check=0, pre-check=0"); 
    header("Content-Disposition: attachment; filename=\"$file_name\""); 
    //header("Content-Length: " . $file_size); 
    header("Content-Type: " . $ctype);


    set_time_limit(0);
    fseek($file, 0);

    while(!feof($file)) 
    {
        print(@fread($file, 1024*8));
        ob_flush();
        flush();
        if (connection_status()!=0) 
        {
            @fclose($file);
            exit;
        }           
    }
    @fclose($file);
}

【问题讨论】:

  • 您使用的是什么操作系统?视窗XP?什么协议? http 还是 https?
  • 你为什么要阅读分块的 zip-flie?无法执行 readfile($zipfile) 任务?
  • Windows 7 专业版,http
  • 我在这里media-division.com/…找到了这段代码,它的目的是提供字节范围支持。也许它是矫枉过正,但它没有造成任何伤害,所以我离开了。
  • 我也尝试下载一个未压缩的 exe,当我点击下载的文件时出现此错误:“此文件的版本与您正在运行的 Windows 版本不兼容。请检查您的计算机系统信息以查看您是否需要 x86(32 位)或 x64(64 位)版本的程序,然后联系软件发行商。”

标签: php download zip exe


【解决方案1】:

问题可能是您的php_execution_time 太低并且在下载 zip 之前中止。 检查 zip 的大小是否与服务器上的大小相同。

或者在Apache中激活mod_xsendfile并设置header:

header("X-Sendfile: $filename");

【讨论】:

  • 服务器上的文件大小为71,612,221。下载的文件是 71,612,427。任何想法这可能意味着什么?
猜你喜欢
  • 2021-03-23
  • 2013-11-10
  • 2018-01-16
  • 2019-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-31
  • 1970-01-01
相关资源
最近更新 更多