从服务器下载zip文件导致意外结果。

时间:2015-11-11 20:34:37

标签: php zip readfile

我的服务器上有一个zip文件,我有一小段代码可以下载它,但是当我打开它时,它是空的,但当我直接从服务器上取下它时,文件大小仍然相同。

我已经确保所有的php标签在打开/关闭之前或之后都没有空格,并尝试了在网站上找到的不同解决方案,但没有一个有效。我还要仔细检查以确保服务器端的zip文件没有损坏。

    public function adownload()
{

    $file = "template.zip";
    if (file_exists($file)) 
    {
         header('Content-Description: File Transfer');
         header('Content-Type: application/zip');
         header('Content-Disposition: attachment; filename="'.basename($file).'"');
         header('Expires: 0');
         header('Cache-Control: must-revalidate');
         header('Pragma: public');
         header('Content-Length: ' . filesize($file));
         readfile($file);

    }
}

任何赞赏的建议。

2 个答案:

答案 0 :(得分:0)

我找到了一个关于可以抛出错误的所有事情的一个很好的小指南,在我的情况下,我的课程已经结束了吗?>标签。删除后,一切都很好。 Guide to removing problems

答案 1 :(得分:0)

您的浏览器在下载完成之前关闭了连接。这会产生一个空的存档zip目录。

原因是服务器在重负载下窒息。

解决方案通过将流分解为更小的块来调整服务器的速度。而不是readfile()使用此代码:

set_time_limit(0); //prevent server timeout
$chunk_size = 1024 * 8; //set the chunk size to 8kB
$handle = fopen($file, 'rb');
$buffer = '';
while (!feof($handle)) {
     $buffer = fread($handle, $chunk_size);
     echo $buffer;
     flush();
     ob_flush();
     sleep(1); // take a break
}
fclose($handle);