我使用此代码让用户下载给定目录中的所有文件:
<?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文件在某种程度上已损坏,无法解压缩。我做错了什么?感谢您的帮助
这是因为$zipname
只是您的substr调用之后的.zip
。
示例:https://3v4l.org/7L515
改为:
$zipname = dirname(__FILE__).".zip";
而且,这听起来一开始就不是一个好主意。