Архивирование
Называем скрипт к примеру backup.php, кладем его на сервер в папку, содержимое которой хотим сжать в архив, и запускаем через консоль. Ничего в коде менять не надо. Скрипт в той же папке создаст архив zip или tar (если zip нет на сервере) с именем backup_2026_04_22, где дата будет соответствовать текущей дате.
Скопировано
$baseDir = __DIR__;
$scriptName = basename(__FILE__);
$date = date('Y_m_d');
$zipFile = $baseDir . "/backup_{$date}.zip";
$tarFile = $baseDir . "/backup_{$date}.tar";
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($baseDir, FilesystemIterator::SKIP_DOTS),
RecursiveIteratorIterator::SELF_FIRST
);
/*
|--------------------------------------------------------------------------
| ZIP архив
|--------------------------------------------------------------------------
*/
if (class_exists('ZipArchive')) {
$zip = new ZipArchive();
if ($zip->open($zipFile, ZipArchive::CREATE | ZipArchive::OVERWRITE) !== TRUE) {
exit("Не удалось создать ZIP\n");
}
foreach ($files as $file) {
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($baseDir) + 1);
// исключаем сам скрипт
if ($relativePath === $scriptName) {
continue;
}
if ($file->isDir()) {
$zip->addEmptyDir($relativePath);
} else {
$zip->addFile($filePath, $relativePath);
}
}
$zip->close();
echo "ZIP архив создан: $zipFile\n";
exit;
}
/*
|--------------------------------------------------------------------------
| TAR архив
|--------------------------------------------------------------------------
*/
try {
$tar = new PharData($tarFile);
foreach ($files as $file) {
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($baseDir) + 1);
if ($relativePath === $scriptName) {
continue;
}
$tar->addFile($filePath, $relativePath);
}
echo "TAR архив создан: $tarFile\n";
} catch (Exception $e) {
echo "Ошибка создания TAR: " . $e->getMessage() . "\n";
}
Показать код