Архивирование

Называем скрипт к примеру 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";
}
Показать код