目前,当涉及到多个小文件时,FTP在我们的服务器上非常慢。
我想创建一个可以在浏览器中运行的文件来创建一个zip文件。
基本上这个文件将位于/ htdocs
中它创建的zip文件必须获取/ htdocss(和子文件夹ect)中的所有文件并模仿结构。
有人能指出我正确的方向吗?
我正在尝试使用以下代码。
唯一的问题是, 我收到一些空白文件夹
说文件是:
C:/xampp/htdocs/booking/zip.php
我明白了
/ C
/ C / XAMPP
/ C / XAMPP / htdocs中
/ C / XAMPP / htdocs中/预订
/C/xampp/htdocs/booking/image.png
/C/xampp/htdocs/booking/index.php
我不想要/C/xampp/htdocs/booking
我只想要包含zip文件 image.png 的index.php
我该如何解决这个问题?
<?php
function Zip($source, $destination) {
if(extension_loaded('zip') === true) {
if(file_exists($source) === true) {
$zip = new ZipArchive();
if($zip->open($destination, ZIPARCHIVE::CREATE) === true) {
$source = realpath($source);
if(is_dir($source) === true) {
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);
foreach($files as $file) {
$file = realpath($file);
if(is_dir($file) === true) {
$zip->addEmptyDir(str_replace($source . '/', '', $file . '/'));
} else if(is_file($file) === true) {
$zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file));
}
}
} else if(is_file($source) === true) {
$zip->addFromString(basename($source), file_get_contents($source));
}
}
return $zip->close();
}
}
return false;
}
Zip(dirname(__FILE__), 'testzip.zip');
?>
答案 0 :(得分:2)
有两种选择。您可以使用内置ZipArchive的PHP并手动迭代目录内容(readdir或DirectoryIterator)。
或者你可以做懒惰的事情:
header("Content-Type: archive/zip"); // mime 2.0
header("Content-Disposition: attachment; filename=dir.zip");
passthru("zip -q -r - .");
取决于已安装的zip
工具。如果你在终端上试试,它会抱怨,但应该通过passthru管。