58 lines
1.5 KiB
PHP
58 lines
1.5 KiB
PHP
<?php
|
|
|
|
/*
|
|
* To change this license header, choose License Headers in Project Properties.
|
|
* To change this template file, choose Tools | Templates
|
|
* and open the template in the editor.
|
|
*/
|
|
|
|
namespace Zotlabs\Lib;
|
|
|
|
/**
|
|
* Description of ExtendedZip
|
|
*
|
|
* @author andrew
|
|
*/
|
|
class ExtendedZip extends \ZipArchive {
|
|
|
|
// Member function to add a whole file system subtree to the archive
|
|
public function addTree($dirname, $localname = '') {
|
|
if ($localname)
|
|
$this->addEmptyDir($localname);
|
|
$this->_addTree($dirname, $localname);
|
|
}
|
|
|
|
// Internal function, to recurse
|
|
protected function _addTree($dirname, $localname) {
|
|
$dir = opendir($dirname);
|
|
while ($filename = readdir($dir)) {
|
|
// Discard . and ..
|
|
if ($filename == '.' || $filename == '..')
|
|
continue;
|
|
|
|
// Proceed according to type
|
|
$path = $dirname . '/' . $filename;
|
|
$localpath = $localname ? ($localname . '/' . $filename) : $filename;
|
|
if (is_dir($path)) {
|
|
// Directory: add & recurse
|
|
$this->addEmptyDir($localpath);
|
|
$this->_addTree($path, $localpath);
|
|
}
|
|
else if (is_file($path)) {
|
|
// File: just add
|
|
$this->addFile($path, $localpath);
|
|
}
|
|
}
|
|
closedir($dir);
|
|
}
|
|
|
|
// Helper function
|
|
public static function zipTree($dirname, $zipFilename, $flags = 0, $localname = '') {
|
|
$zip = new self();
|
|
$zip->open($zipFilename, $flags);
|
|
$zip->addTree($dirname, $localname);
|
|
$zip->close();
|
|
}
|
|
|
|
}
|