php下载代码适用于pdf,但不适用于zip



我已经用这段代码成功下载了pdf文件。我正在使用相同的代码下载一个包含exe的zip文件(只需更改文件名并将mime类型更改为application/zip),当我尝试打开下载的文件时,我会收到以下错误:"Windows无法打开文件夹。压缩(zipped)文件夹'[filename]'无效"

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

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

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

我添加了头("Content-Length:".$file_size),尽管pdf下载得很好,没有它——同样的错误。

我尝试了应用程序/八位字节流--同样的错误。

有什么想法吗?欢迎提出任何建议。

$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);
}

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

或者在Apache中激活mod_xsend文件并设置标题:

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