43 lines
1.1 KiB
PHP
43 lines
1.1 KiB
PHP
<?php
|
||
|
||
/**
|
||
* Расширение класса ZipArchive с возможность архивирования директории
|
||
*/
|
||
namespace ctiso;
|
||
use ZipArchive;
|
||
|
||
class ZipFile extends ZipArchive
|
||
{
|
||
/**
|
||
* @var list<string>
|
||
*/
|
||
private $ignore = ['.', '..'];
|
||
|
||
public function addIgnore(string $name): void
|
||
{
|
||
$this->ignore [] = $name;
|
||
}
|
||
|
||
private function addDirDo(string $location, string $name): void
|
||
{
|
||
$name .= '/';
|
||
$location .= '/';
|
||
$file = null;
|
||
|
||
// Read all Files in Dir
|
||
$dir = opendir($location);
|
||
while (($file = readdir($dir)) !== false)
|
||
{
|
||
if (in_array($file, $this->ignore)) continue;
|
||
// Rekursiv, If dir: FlxZipArchive::addDir(), else ::File();
|
||
$call = (is_dir($location . $file)) ? 'addDir' : 'addFile';
|
||
call_user_func([$this, $call], $location . $file, $name . $file);
|
||
}
|
||
}
|
||
|
||
public function addDir(string $location, string $name): void
|
||
{
|
||
$this->addEmptyDir($name);
|
||
$this->addDirDo($location, $name);
|
||
}
|
||
}
|