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


