我已经用这段代码成功下载了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");