MicroFrameWork/kernel/helpers/Files.php

79 lines
2.1 KiB
PHP
Raw Normal View History

2024-09-11 17:38:46 +03:00
<?php
namespace kernel\helpers;
use FilesystemIterator;
2024-10-08 17:06:14 +03:00
use ZipArchive;
2024-09-11 17:38:46 +03:00
class Files
{
public function copy_folder($d1, $d2): void
{
if (is_dir($d1)) {
if (!file_exists($d2)){
$_d2 = mkdir($d2, permissions: 0755, recursive: true);
if (!$_d2) {
return;
}
}
$d = dir($d1);
while (false !== ($entry = $d->read())) {
2024-10-14 15:52:52 +03:00
if ($entry != '.' && $entry != '..' && $entry != 'app_modules') {
2024-09-11 17:38:46 +03:00
$this->copy_folder("$d1/$entry", "$d2/$entry");
}
}
$d->close();
} else {
copy($d1, $d2);
}
}
public function recursiveRemoveDir($dir): void
{
$includes = new FilesystemIterator($dir);
foreach ($includes as $include) {
if(is_dir($include) && !is_link($include)) {
$this->recursiveRemoveDir($include);
}
else {
unlink($include);
}
}
rmdir($dir);
}
2024-10-08 17:06:14 +03:00
2024-10-09 15:12:30 +03:00
public function pack(string $source, string $destination/*, bool $include_source = true*/): void
2024-10-08 17:06:14 +03:00
{
$zip = new ZipArchive();
$zip->open($destination, ZipArchive::CREATE | ZipArchive::OVERWRITE);
if (is_file($source)) {
$zip->addFile(basename($source));
}
if (is_dir($source)) {
$this->recursiveAddFile($zip, $source);
}
$zip->close();
}
2024-10-09 15:12:30 +03:00
private function recursiveAddFile(ZipArchive $zip, string $dir, string $folder = ''): void
2024-10-08 17:06:14 +03:00
{
$includes = new FilesystemIterator($dir);
2024-10-09 15:12:30 +03:00
2024-10-08 17:06:14 +03:00
foreach ($includes as $include) {
2024-10-09 15:12:30 +03:00
if(is_dir($include)) {
2024-10-14 15:52:52 +03:00
if ($include->getFilename() === 'app_modules') continue;
2024-10-09 15:12:30 +03:00
$tmpFolder = $folder . '/' . $include->getFilename() . '/';
$this->recursiveAddFile($zip, $include, $tmpFolder);
2024-10-08 17:06:14 +03:00
}
2024-10-09 15:12:30 +03:00
if (is_file($include)) {
$zip->addFile($include->getPathName(), $folder . $include->getFilename());
2024-10-08 17:06:14 +03:00
}
}
}
2024-10-09 15:12:30 +03:00
2024-09-11 17:38:46 +03:00
}