skrypt PHP do spakowania folderu na serwerze (rekurencyjnie)

Jeśli na danym serwerze chcemy spakować folder i wszystkie jego podfoldery w jedno archiwum ZIP, które dużo szybciej ściągniemy – oto stosunkowo łatwa metoda aby to wykonać.

Dodatkowo chcemy aby spakowanie odbywało się rekurencyjnie – obejmowało wszystkie podfoldery i pliki w danym folderze.

Uwaga, aby ono działało musimy mieć na serwerze w PHP zainstalowane rozszerzenia ZipArchive() oraz RecursiveIteratorIterator(),

Tworzymy plik spakuj.php i umieszczamy w nim kod:


<?php
// Get real path for our folder
$rootPath = realpath('nazwa-naszego-folderu');

// Initialize archive object
$zip = new ZipArchive();
$zip->open('pack.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);

// Create recursive directory iterator
/** @var SplFileInfo[] $files */
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($rootPath),
RecursiveIteratorIterator::LEAVES_ONLY
);

foreach ($files as $name => $file)
{
// Skip directories (they would be added automatically)
if (!$file->isDir())
{
// Get real and relative path for current file
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($rootPath) + 1);

// Add current file to archive
$zip->addFile($filePath, $relativePath);
}
}

// Zip archive will be created only after closing object
$zip->close();
?>

W kodzie zmieniamy wystąpienie:

nazwa-naszego-folderu

na nazwę naszego folderu, np.

images

Następnie w przeglądarce uruchamiamy plik (w zależności gdzie go umieściliśmy):

http://www.nasza-domena.pl/spakuj.php

Jak skrypt skończy pracę (doładuje się do końca w przeglądarce) nasz plik możemy ściągnąć poprzez link:

http://www.nasza-domena.pl/pack.zip

Po skończonej pracy w celach bezpieczeństwa – najlepiej usuńmy plik spakuj.php z serwera

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *