首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有readfile的损坏的zip

带有readfile的损坏的zip
EN

Stack Overflow用户
提问于 2015-12-19 04:57:46
回答 1查看 160关注 0票数 0

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

代码语言:javascript
复制
<?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);
?>

代码运行得很好,但我想在用户下载后从服务器上删除它,所以我尝试只添加

代码语言:javascript
复制
unlink($zipname);

在最后一行。显然,我得到了一个找不到文件的错误。

然后,我尝试将最后一个标题替换为

代码语言:javascript
复制
readfile($zipname);

下载开始,但下载的zip文件不知何故已损坏,无法解压缩。我做错了什么?谢谢你的帮忙

EN

回答 1

Stack Overflow用户

发布于 2015-12-19 05:26:17

这是因为在调用substr之后,$zipname只是.zip

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

改为执行以下操作:

代码语言:javascript
复制
$zipname = dirname(__FILE__).".zip";

而且,从一开始这听起来就不是一个好主意。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34363859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档