繁体   English   中英

创建文件夹的zip文件并使用php下载

[英]create a zip file of a folder and download it using php

我有一个名为document的文件夹,其中包含多个文件。我想为该文件夹创建一个zip文件,然后即时下载。 下面是我的代码

$dir = WWW_ROOT.'/files/pdf/document';
$archive = 'MyDocument.zip';

$zip = new ZipArchive; $zip->open($archive, ZipArchive::CREATE); $files = scandir($dir); unset($files[0], $files[1]); foreach ($files as $file) { $zip->addFile($dir.'/'.$file); } $zip->close(); header('Content-Type: application/zip'); header('Content-disposition: attachment; filename='.$archive); header('Content-Length: '.filesize($archive)); readfile($archive); unlink($archive);exit;

创建了一个zip文件,但是我的问题出在zip文件中,我想要的结果是document文件夹,但是该zip文件包含C-> xampp-> htdoc-> app-> webroot-> files-> pdf-> document 请帮我

注意和警告

注意:使用未定义的常量WWW_ROOT-在第2行的C:\\ xampp \\ htdocs \\ testy \\ index.php中假定为'WWW_ROOT'

警告:scandir(WWW_ROOT / files / pdf / document,WWW_ROOT / files / pdf / document):位于第9行的C:\\ xampp \\ htdocs \\ testy \\ index.php中

警告:scandir(WWW_ROOT / files / pdf / document):无法打开dir:第9行的C:\\ xampp \\ htdocs \\ testy \\ index.php中没有此类文件或目录

警告:scandir():(错误号2):第9行的C:\\ xampp \\ htdocs \\ testy \\ index.php中没有此类文件或目录

警告:第11行的C:\\ xampp \\ htdocs \\ testy \\ index.php中为foreach()提供的参数无效

解决方案

$ dir = $ _SERVER ['DOCUMENT_ROOT']。'/ files / pdf / document';

验证文件夹是否存在:/ files / pdf / document

然后我添加了第二个参数-文件名$ zip-> addFile($ dir。'/'。$ file,$ file);

$dir = $_SERVER['DOCUMENT_ROOT'].'/files/pdf/document';
$archive = 'MyDocument.zip';


$zip = new ZipArchive;
$zip->open($archive, ZipArchive::CREATE);
$files = scandir($dir);
unset($files[0], $files[1]);
foreach ($files as $file) {
$zip->addFile($dir.'/'.$file, $file);
}
$zip->close();
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename='.$archive);
header('Content-Length: '.filesize($archive));
readfile($archive);
unlink($archive);exit;

您可以检查以下内容:

$dir = $_SERVER['DOCUMENT_ROOT'].'/files/pdf/document';
$archive = 'MyDocument.zip';


$zip = new ZipArchive;
$zip->open($archive, ZipArchive::CREATE);
$files = scandir($dir);
unset($files[0], $files[1]);
foreach ($files as $file) {
$zip->addFile($dir.'/'.$file, $file);
}
print_r('<pre>');
print_r($dir);//path
print_r($files);//files
print_r($zip);//object zip
die;

$zip->close();
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename='.$archive);
header('Content-Length: '.filesize($archive));
readfile($archive);
unlink($archive);exit;

如果文档文件夹包含另一个包含多个文件的子文件夹,则该文档文件夹无法压缩– CHANDAN PATTNAIK

其实我做错了

我现在有一个解决方案

    /**
 * Created by websky
 */
class myZipper extends ZipArchive{
    protected $dir;
    protected $archive;
    protected $pathsArray;

    /**
     * @param string $dir
     * @param string $name
     */
    public function __construct($dir,$name){
        $this->dir = $dir;
        $this->archive = $name;
        $this->open($this->archive, myZipper::CREATE);
        $this->myScanDir($this->dir);
        $this->addZip();
        $this->getZip();
    }

    /**
     * @param string $dir
     */
    protected function myScanDir($dir){
        $files = scandir($dir);
        unset($files[0], $files[1]);
        foreach ($files as $file) {
            if(is_dir($dir.'/'.$file)){
                $this->myScanDir($dir.'/'.$file);
            }
        else {
                $this->pathsArray[] = array('oldpath' => $dir.'/'.$file, 'newpath'=>  (($this->dir == $dir)? $file : str_replace($this->dir.'/', '', $dir).'/'.$file));
            }
        }
    }

    protected function addZip(){
        foreach($this->pathsArray as $path){
            $this->addFile($path['oldpath'],$path['newpath']);
        }
    }

    public function getZip(){
        $this->close();
        header('Content-Type: application/zip');
        header('Content-disposition: attachment; filename='.$this->archive);
        header('Content-Length: '.filesize($this->archive));
        readfile($this->archive);
        unlink($this->archive);
    }
    }

    $test = new myZipper($_SERVER['DOCUMENT_ROOT'].'/files/pdf/document', 'MyDocument.zip');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM