带有readfile的损坏的zip

时间:2015-12-18 20:57:46

标签: php zip readfile unlink

我正在使用此代码让用户下载给定目录中的所有文件:

<?php

set_time_limit();
$zipname = getcwd();
$zipname = substr($zipname,strrpos($zipname,'/')+1);
$zipname = $zipname.'.zip';
$zip = new ZipArchive;
$zip->open('./'.basename($zipname).'', ZipArchive::CREATE);
if ($dir_handle = opendir('./')) {
      while (false !== ($entry = readdir($dir_handle))) {
    if ($entry != "." && $entry != ".." && !strstr($entry,'.php')) {
        $zip->addFile($entry);
    }
  }
  closedir($dir_handle);
}
else {
die('file not found');
}

$zip->close();

header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="'.basename($zipname).'"');
header('Content-Length: ' . filesize($zipname));
header('Location: ./'.$zipname);
?>

代码运行完美,但我想在用户下载后从服务器中删除,所以我尝试只添加

unlink($zipname);

在最后一行。显然我找不到文件错误。

然后我尝试用

替换最后一个标题
readfile($zipname);

并开始下载,但下载的zip文件已损坏并且不会解压缩。 我究竟做错了什么? 谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

这是因为$zipname在您的子调用之后只是.zip

例如: https://3v4l.org/7L515

请改为:

$zipname = dirname(__FILE__).".zip";

此外,这听起来不错。