Как архивировать папку на PHP?

Zacker2

Гуру форума
Регистрация
19 Фев 2013
Сообщения
242
Реакции
75
Предлагаю открыть старую проблему, в сети так и не нашел однозначный ответ.
Как архивировать папку на сервере средствами php, если на сервере нет cpanel и.т.п., и нет ssh доступа.

Погуглив нашел только один рабочий вариант, он архивирует только файлы в указанной папке,
а папки не архивирует.
Также в созданном архиве имеется непонятный объект, который вызывает ошибку при извлечении...

Код:
<?php
//папка в которой будет размещен архив
$archive_dir = "/data/host/site/gotovo/";
//папка с исходными файлами
$src_dir = "/data/host/site/";
//создание zip архива
$zip = new ZipArchive();
//имя файла архива
$fileName = $archive_dir."backup_".date('j_m_Y_h_i_s').".zip";
if ($zip->open($fileName, ZIPARCHIVE::CREATE) !== true) {
    fwrite(STDERR, "Error while creating archive file");
    exit(1);
}
//добавляем файлы в архив все файлы из папки src_dir
$dirHandle = opendir($src_dir);
while (false !== ($file = readdir($dirHandle))) {
    $zip->addFile($src_dir.$file, $file);
}
//закрываем архив
$zip->close();
fwrite(STDOUT, "Archive created\n");
exit(0);
?>
Задача, заставить скрипт архивировать все содиржимое указанной папки.
Убрать непонятный объект который в результате, скрин ниже...

Без имени-1.jpg
 
Ищи AlfaUngzipper, вроде как рабочий был.
 
А сами с php не знакомы? Просто в php есть класс ZipUploader, через него можно и файлы и папки архивировать.

В примере цикл по файлам идет, надо цикл по папке в функцию вынести, а при нахождении папки себя вызывать. Так получим сканирование всех файлов и папок.

При нахождении файла - кладем его в архив.
При нахождении папки - создаем её аналог в архиве.
 
PHP:
 <? Php


// Make sure the script can handle large folders / files
ini_set ( 'max_execution_time', 600);
ini_set ( 'memory_limit', '1024M');

// Start the backup!
zipData ( '/ path / to / folder', '/path/to/backup.zip');
echo 'Finished.';

// Here the magic happens :)
function zipData ($ folder, $ zipTo) {
    if (extension_loaded ( 'zip')) {
        if (file_exists ($ source)) {
            $ Zip = new ZipArchive ();
            if ($ zip-> open ($ destination, ZIPARCHIVE :: CREATE)) {
                $ Source = realpath ($ source);
                if (is_dir ($ source)) {
                    $ Files = new RecursiveIteratorIterator (new RecursiveDirectoryIterator ($ source), RecursiveIteratorIterator :: SELF_FIRST);
                    foreach ($ files as $ file) {
                        $ File = realpath ($ file);
                        if (is_dir ($ file)) {
                            $ Zip-> addEmptyDir (str_replace ($ source '/', '', $ file. '/').);
                        } Else if (is_file ($ file)) {
                            $ Zip-> addFromString (str_replace ($ source '/', '', $ file), file_get_contents ($ file).);
                        }
                    }
                } Else if (is_file ($ source)) {
                    $ Zip-> addFromString (basename ($ source), file_get_contents ($ source));
                }
            }
            return $ zip-> close ();
        }
    }
    return false;
}
?> [/ PHP]
 
Назад
Сверху