有文件和文件夹使用ZIP
问题描述:
我们有像一些HTML代码:有文件和文件夹使用ZIP
<body>Some text</body>
和可变$contents
。
我第一次在php中使用zip,有几个问题。
我如何:
创建一个名为
HTML
文件夹,并把它放在里面$contents
(没有真正建立对FTP,只是变量)-
创建
index.html
并把它里面HTML
这是里面的文件夹$contents
所以
$contents
在zip之前sh乌尔德包含:/HTML/index.html (with <body>Some text</body> code inside)
创建一个zip压缩文件里面
$contents
变量的所有内容。
答
如果我理解正确:
$contents = '/tmp/HTML';
// Make the directory
mkdir($contents);
// Write the html
file_put_contents("$contents/index.html", $html);
// Zip it up
$return_value = -1;
$output = array();
exec("zip -r contents.zip $contents 2>&1", $output, $return_value);
if ($return_value === 0){
// No errors
// You now have contents.zip to play with
} else {
echo "Errors!";
print_r($output);
}
我不使用库来压缩它,只需在命令行,但如果你愿意,你可以使用一个库(但我检查查看zip
是否正确执行)。
如果你真的想这样做真正在内存中的一切,你可以这样做:
$zip = new ZipArchive;
if ($zip->open('contents.zip') === TRUE) {
$zip->addFromString('contents/index.html', $html);
$zip->close();
echo 'ok';
} else {
echo 'failed';
}
答
我会建议使用ZipArchive
类。所以你可以有这样的东西
$html = '<body>some HTML</body>';
$contents = new ZipArchive();
if($contents->open('html.zip', ZipArchive::CREATE)){
$contents->addEmptyDir('HTML');
$contents->addFromString('index.html', $html);
$contents->close()
}
mkdir创建文件夹和file_put_contents在ftp上创建文件,我不想做的事情。这个想法是在变量内创建文件夹和文件,并将结果压缩。没有真正的创造,所有的行为都应该记忆。不管怎样,谢谢。 – James 2012-07-08 10:16:28
如果你在'/ tmp'中做了所有的事情,那么技术上可以满足你的要求,因为'/ tmp'是一个安装在RAM(即内存)中的文件系统。不过,请参阅我的编辑,以便在PHP内存中完成整个操作。 – Jay 2012-07-08 10:24:20