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