<?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(); ?>
$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();
?>
//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();
}