直接上代码
/**
* Class xZip
*
* $xZip = new xZip;
* $xZip->zip(null, 'D:/www/log/index.php', 'D:/www/log/index.zip');
* $xZip->zipAll(array('D:/www/log/index.php','D:/www/log/lottery.sql'), 'D:/www/log/index_all.zip');
*
*/
class xZip
{
public function __construct()
{
}
/**
* add multi file to ZIP file
* @param array $source will be add to ZIP file list.
* @param null $destination ZIP file path
* @return null $destination
* @throws Exception
*/
public function zipAll($source = array(), $destination = null, $originPath = '')
{
if ($destination == null) {
throw new Exception('param $destination must be not null.');
}
if (count($source) == 0) {
throw new Exception('must be added one file.');
}
$zip = new ZipArchive;
@mkdir($this->getParentPath($destination), 0777, true);
$res = $zip->open($destination, ZipArchive::CREATE);
if ($res != true) {
throw new Exception('open zip(' . $destination . ') file error[' . $res . '].');
}
foreach ($source as $path) {
$zip->addFile($path, iconv('UTF-8', 'GB2312', str_replace($originPath, NULL, $path)));
}
$zip->close();
return $destination;
}
/**
* add one file to ZIP file.
* @param null $zip @ZipArchive object
* @param null $source will be add to ZIP file.
* @param null $destination dest ZIP file.
* @return null $destination
* @throws Exception
*/
public function zip($zip = null, $source = null, $destination = null)
{
if ($destination == null) {
throw new Exception('param $destination must be not null.');
}
if ($source == null) {
throw new Exception('must be added one file.');
}
if ($zip == null) {
$zip = new ZipArchive;
@mkdir($this->getParentPath($destination), 0777, true);
$res = $zip->open($destination, ZipArchive::CREATE);
if ($res != true) {
throw new Exception('open zip(' . $destination . ') file error[' . $res . '].');
}
}
//iconv('UTF-8','GB2312',str_replace($this->getParentPath($source).'/', NULL, $source)
$zip->addFile($source, str_replace($this->getParentPath($source) . '/', NULL, $source));
$zip->close();
return $destination;
}
/**
* @param $source zip file path
* @param $destination dest directory path
*/
public function unzip($source, $destination)
{
@mkdir($destination, 0777, true);
$zip = new ZipArchive;
if ($zip->open($source) === true) {
$zip->extractTo($destination);
$zip->close();
}
}
public function __destruct()
{
}
private function getParentPath($destination)
{
$path = substr($destination, 0, strripos($destination, '/'));
return $path;
}
}
近期评论