php怎么转zip,使用php将目录转换为zip

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

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('/folder/to/compress/', './compressed.zip');

编辑-此项不会保留文件夹结构(请检查我的评论):

function Zip($source, $destination)

{

if (extension_loaded('zip') === true)

{

if (file_exists($source) === true)

{

$zip = new ZipArchive();

if ($zip->open($destination, ZIPARCHIVE::CREATE) === true)

{

if (is_dir($source) === true)

{

$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);

foreach ($files as $file)

{

if (is_file($file) === true)

{

$zip->addFromString(basename($file), file_get_contents($file));

}

}

}

else if (is_file($source) === true)

{

$zip->addFromString(basename($source), file_get_contents($source));

}

}

return $zip->close();

}

}

return false;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值