我有个文件夹 
结构类似

   a 文件1
   b 文件2
PHP能否直接压缩  A文件夹  成  A.zip  呢?

解决方案 »

  1.   

    PHP ZipArchive类,具体看PHP手册
      

  2.   

    <?php$zip = new ZipArchive();
    $filename = "./test112.zip";if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {
        exit("cannot open <$filename>\n");
    }$zip->addFromString("testfilephp.txt" . time(), "#1 This is a test string added as testfilephp.txt.\n");
    $zip->addFromString("testfilephp2.txt" . time(), "#2 This is a test string added as testfilephp2.txt.\n");
    $zip->addFile($thisdir . "/too.php","/testfromfile.php");
    echo "numfiles: " . $zip->numFiles . "\n";
    echo "status:" . $zip->status . "\n";
    $zip->close();
    ?>  
      

  3.   

    找了个//打包文件
    //1、为了将文件夹的内容打包,需要循环操作,所以先建立一个函数,用于对子文件夹打包
    //这个函数需要传递两个参数,第一个$path是当前操作的文件夹路径,第二个是ZipArchive对象
    //2、打开当前操作的文件夹,并用一个变量指向它
    //打开当前文件夹由$path指定。
    //3、循环的读取文件夹下的所有文件和文件夹
    //其中$filename = readdir($handler)是每次循环的时候将读取的文件名赋值给$filename,为了不陷于死循环,所以还要让$filename !== false。
    // 一定要用!==,因为如果某个文件名如果叫'0',或者某些被系统认为是代表false,用!=就会停止循环
    //4、文件夹下都会有两个文件,名字为'.'和‘..’,不要对他们进行操作
    //5、如果读取的某个对象是文件夹
    //对于文件夹,is_dir会返回FALSE,注意路径是$path."/".$filename
    //6、对于文件夹,再次调用函数addFileToZip,并将当前操作的文件夹路径传递给函数
    //7、如果读取的某个对象是文件
    //将文件加入zip对象
    //8、关闭当前操作的文件夹
    //当前文件夹由$path指定
    //以下是函数外的代码
    //9、新建一个ZipArchive的对象
    //10、通过ZipArchive的对象处理zip文件
    //$zip->open这个方法第一个参数表示处理的zip文件名。
    //第二个参数表示处理模式。如果参数使用ZipArchive::OVERWRITE,系统会覆盖掉原来的zip文件。
    //如果zip文件不存在,系统都会自动新建。
    //如果对zip文件对象操作成功,$zip->open这个方法会返回TRUE
    //11、调用函数,对要打包的根目录进行操作,并将ZipArchive的对象传递给函数
    //发送下载路径
    //接受下载完成信号,删除临时目录和压缩文件

    $handler = opendir($tmpDir);
    while( ($filename = readdir($handler)) !== false ){
        if($filename != "." && $filename != "..") {
            if(is_dir($tmpDir."/".$filename)){
                addFileToZip($path."/".$filename, $zip);
            }else{
                 $zip->addFile($tmpDir."/".$filename);
            }
        }
    }
    closedir($tmpDir);
    $zip = new ZipArchive;
    if ($zip->open('test.zip', ZipArchive::OVERWRITE) === TRUE){
    addFileToZip('book/php', $zip);
    $zip->close();
    }