gpt4 book ai didi

php - 如何[递归地]压缩PHP中的目录?

转载 作者:IT老高 更新时间:2023-10-28 11:47:34 25 4
gpt4 key购买 nike

目录类似于:

home/
file1.html
file2.html
Another_Dir/
file8.html
Sub_Dir/
file19.html

我正在使用与 PHPMyAdmin http://trac.seagullproject.org/browser/branches/0.6-bugfix/lib/other/Zip.php 相同的 PHP Zip 类.我不确定如何压缩目录而不仅仅是文件。到目前为止,这是我所拥有的:

$aFiles = $this->da->getDirTree($target);
/* $aFiles is something like, path => filetime
Array
(
[home] =>
[home/file1.html] => 1251280379
[home/file2.html] => 1251280377
etc...
)

*/
$zip = & new Zip();
foreach( $aFiles as $fileLocation => $time ){
$file = $target . "/" . $fileLocation;
if ( is_file($file) ){
$buffer = file_get_contents($file);
$zip->addFile($buffer, $fileLocation);
}
}
THEN_SOME_PHP_CLASS::toDownloadData($zip); // this bit works ok

但是当我尝试解压缩相应下载的 zip 文件时,我得到“不允许操作”

此错误仅在我尝试在我的 mac 上解压缩时发生,当我通过命令行解压缩文件时,文件解压缩正常。我是否需要在下载时发送特定的内容类型,目前是“应用程序/压缩包”

最佳答案

这是一个简单的函数,可以递归压缩任何文件或目录,只需要加载zip扩展。

function Zip($source, $destination)
{
if (!extension_loaded('zip') || !file_exists($source)) {
return false;
}

$zip = new ZipArchive();
if (!$zip->open($destination, ZIPARCHIVE::CREATE)) {
return false;
}

$source = str_replace('\\', '/', realpath($source));

if (is_dir($source) === true)
{
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);

foreach ($files as $file)
{
$file = str_replace('\\', '/', $file);

// Ignore "." and ".." folders
if( in_array(substr($file, strrpos($file, '/')+1), array('.', '..')) )
continue;

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

这样调用它:

Zip('/folder/to/compress/', './compressed.zip');

关于php - 如何[递归地]压缩PHP中的目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1334613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com