Архиватор

sorRy

Registered
Да кажем имам един файл ar.php и искам като го пусна да направи архив(rar или zip) със всички файлове и папки и техните файлове.
edit: Намерих това link в phpclasses но не иска да архивира всичко подпапки както пиша там ами само файловете в папката. Ако може някой да го оправи и направи в един файл.
 
Правилно ли разбрах?
Искаш да архивираш точно дадена папка с всичките под-папки и файлове в нея, като запазиш структурата на папките и файловете в архива?
 
Виж какво написах.
Може би ще ти помогне :)
Код:
<?php
$archive_name = "archive.zip"; // местонахождението и името на zip файла
$archive_folder = "folder"; // папката, която ще бъде архивирана

$zip = new ZipArchive;
if ($zip -> open($archive_name, ZipArchive::CREATE) === TRUE)
{
    $dir = preg_replace('/[\/]{2,}/', '/', $archive_folder."/");
    
    $dirs = array($dir);
    while (count($dirs))
    {
        $dir = current($dirs);
        $zip -> addEmptyDir($dir);
        
        $dh = opendir($dir);
        while($file = readdir($dh))
        {
            if ($file != '.' && $file != '..')
            {
                if (is_file($file))
                    $zip -> addFile($dir.$file, $dir.$file);
                elseif (is_dir($file))
                    $dirs[] = $dir.$file."/";
            }
        }
        closedir($dh);
        array_shift($dirs);
    }
    
    $zip -> close();
    echo 'Архивирането премина успешно!';
}
else
{
    echo 'Грешка, не мога да създам Zip файла!';
}
?>
 
Не става :( архивира само папката в която като направи папките който са в нея но не и файловете и папките в тях
 
Нищо не разбрах от поста ти, но нещо функциите is_file и is_dir правят проблеми.

Пробвай с това:

Код:
<?php
$archive_name = "archive.zip"; // местонахождението и името на zip файла
$archive_folder = "folder"; // папката, която ще бъде архивирана

$zip = new ZipArchive;
if ($zip -> open($archive_name, ZipArchive::CREATE) === TRUE)
{
    $dir = preg_replace('/[\/]{2,}/', '/', $archive_folder."/");
    
    $dirs = array($dir);
    while (count($dirs))
    {
        $dir = current($dirs);
        $zip -> addEmptyDir($dir);
        
        $dh = opendir($dir);
        while($file = readdir($dh))
        {
            if ($file != '.' && $file != '..')
            {
                if (preg_match('/.*\.[a-z0-9]{2,5}$/i', $file) || preg_match('/^\.[^\.]+$/', $file))
                    $zip -> addFile($dir.$file, $dir.$file);
                else
                    $dirs[] = $dir.$file."/";
            }
        }
        closedir($dh);
        array_shift($dirs);
    }
    
    $zip -> close();
    echo 'Архивирането премина успешно!';
}
else
{
    echo 'Грешка, не мога да създам Zip файла!';
}
?>

BTW: Преди да стартираш скрипта изтрий стария архив.
 
Имах предив че архивира само файловете в папката който му зададох и прави папките който име но без файловете. Но новото работи перфектно +1
 

Back
Горе