Изменение файла = Создание архива

Разработка своих веб-приложений и страничек

Изменение файла = Создание архива

Сообщение Eugeene » 03 окт 2009, 17:08

Имеется папка с файлами и скрипт создания архива. Необходимо чтобы при изменении файлов в папке архив пересоздавался, если изменений никаких не будет, то оставался старый архив.
Как всё это можно реализовать?
Eugeene
Начинающий участник
 
Сообщения: 16
Зарегистрирован: 24 авг 2009, 19:29

Re: Изменение файла = Создание архива

Сообщение Кадет » 03 окт 2009, 17:54

Есть такая идея, если арзив меняется, значит меняется и размер, вот от этого и отталкивайся
Кадет
Активный участник
 
Сообщения: 1497
Зарегистрирован: 23 апр 2008, 21:08

Re: Изменение файла = Создание архива

Сообщение Eugeene » 04 окт 2009, 15:21

Что не так я сделал? Архив в этом случае не создается вообще
Код: Выделить всёРазвернуть
<?
$grab
=@file_get_contents("...путь до папки/version.ver");
$grab = ereg_replace('(.*)ENGINE2]','', $grab); 
if 
($grab!="") {
  eregi("date=([0-9\.]+)",$grab,$pocket2);
  $date="{$pocket2[1]}";
}
else {
  $date="Невозможно прочитать.";
}

$now = date('d.m.Y');

if ($date = $now) {
sleep(1);
}
else {
class ZipFolder {
    protected $zip;
    protected $root;
    protected $ignored_names;
    
    function __construct
($file, $folder, $ignored=null) {
        $this->zip = new ZipArchive();
        $this->ignored_names = is_array($ignored) ? $ignored : $ignored ? array($ignored) : array();
        if ($this->zip->open($file, ZIPARCHIVE::CREATE)!==TRUE) {
            throw new Exception("cannot open <$file>\n");
        }
        $folder = substr($folder, -1) == '/' ? substr($folder, 0, strlen($folder)-1) : $folder;
        if(strstr($folder, '/')) {
            $this->root = substr($folder, 0, strrpos($folder, '/')+1);
            $folder = substr($folder, strrpos($folder, '/')+1);
        }
        $this->zip($folder);
        $this->zip->close();
    }
    
    function zip
($folder, $parent=null) {
        $full_path = $this->root.$parent.$folder;
        $zip_path = $parent.$folder;
        $this->zip->addEmptyDir($zip_path);
        $dir = new DirectoryIterator($full_path);
        foreach($dir as $file) {
            if(!$file->isDot()) {
                $filename = $file->getFilename();
                if(!in_array($filename, $this->ignored_names)) {
                    if($file->isDir()) {
                        $this->zip($filename, $zip_path.'/');
                    }
                    else {
                        $this->zip->addFile($full_path.'/'.$filename, $zip_path.'/'.$filename);
                    }
                }
            }
        }
    }
}
// full path used to demonstrate it's root-path stripping ability
$zip = new ZipFolder('...путь до архива.../archiv.zip', '...путь до папки...', '');
}
?>
Eugeene
Начинающий участник
 
Сообщения: 16
Зарегистрирован: 24 авг 2009, 19:29

Re: Изменение файла = Создание архива

Сообщение Eugeene » 05 окт 2009, 18:18

Вообщем решил задачу:
Код: Выделить всёРазвернуть

<?
$grab
=@file_get_contents("...путь до папки/version.ver");
$grab = ereg_replace('(.*)ENGINE2]','', $grab); 
if 
($grab!="") {
  eregi("date=([0-9\.]+)",$grab,$pocket2);
  $date="{$pocket2[1]}";
}
else {
  $date="Невозможно прочитать.";
}

$now = date('d.m.Y');

if ($date = $now) {
class ZipFolder {
    protected $zip;
    protected $root;
    protected $ignored_names;
    
    function __construct
($file, $folder, $ignored=null) {
        $this->zip = new ZipArchive();
        $this->ignored_names = is_array($ignored) ? $ignored : $ignored ? array($ignored) : array();
        if ($this->zip->open($file, ZIPARCHIVE::CREATE)!==TRUE) {
            throw new Exception("cannot open <$file>\n");
        }
        $folder = substr($folder, -1) == '/' ? substr($folder, 0, strlen($folder)-1) : $folder;
        if(strstr($folder, '/')) {
            $this->root = substr($folder, 0, strrpos($folder, '/')+1);
            $folder = substr($folder, strrpos($folder, '/')+1);
        }
        $this->zip($folder);
        $this->zip->close();
    }
    
    function zip
($folder, $parent=null) {
        $full_path = $this->root.$parent.$folder;
        $zip_path = $parent.$folder;
        $this->zip->addEmptyDir($zip_path);
        $dir = new DirectoryIterator($full_path);
        foreach($dir as $file) {
            if(!$file->isDot()) {
                $filename = $file->getFilename();
                if(!in_array($filename, $this->ignored_names)) {
                    if($file->isDir()) {
                        $this->zip($filename, $zip_path.'/');
                    }
                    else {
                        $this->zip->addFile($full_path.'/'.$filename, $zip_path.'/'.$filename);
                    }
                }
            }
        }
    }
}
// full path used to demonstrate it's root-path stripping ability
$zip = new ZipFolder('...путь до архива.../archiv.zip', '...путь до папки...', '');
}
else {
sleep(1);
}
?>

Т.е надо было просто наоборот переставить.
Последний раз редактировалось Eugeene 05 окт 2009, 19:45, всего редактировалось 1 раз.
Eugeene
Начинающий участник
 
Сообщения: 16
Зарегистрирован: 24 авг 2009, 19:29

Re: Изменение файла = Создание архива

Сообщение Zver » 05 окт 2009, 19:32

Код: Выделить всёРазвернуть
if ($date = $now) 

может быть
Код: Выделить всёРазвернуть
if ($date == $now) 

а то он так каждый раз будет файл обнавлять...
Zver
Активный участник
 
Сообщения: 1333
Зарегистрирован: 18 дек 2008, 18:51
Откуда: Саратов, Заводской

Re: Изменение файла = Создание архива

Сообщение Eugeene » 05 окт 2009, 19:49

Да действительно архив каждый раз пересоздается, что-то я этого не усмотрел.
И даже когда подправить
Код: Выделить всёРазвернуть
if ($date == $now

всё равно пересоздается.
Как мне тогда по нормальному сделать?
Eugeene
Начинающий участник
 
Сообщения: 16
Зарегистрирован: 24 авг 2009, 19:29

Re: Изменение файла = Создание архива

Сообщение Rostov114 » 05 окт 2009, 20:41

Я вот не пойму. Нельзя чтоли найти нормальный скрипт зеркала NOD32?
Некоммерческий проект «HSDN»
Аватара пользователя
Rostov114
Автор
 
Сообщения: 3198
Зарегистрирован: 18 окт 2007, 02:21

Re: Изменение файла = Создание архива

Сообщение Zver » 05 окт 2009, 20:54

Rostov114 писал(а):Я вот не пойму. Нельзя чтоли найти нормальный скрипт зеркала NOD32?

О_о эт вобще к чему ?))
Zver
Активный участник
 
Сообщения: 1333
Зарегистрирован: 18 дек 2008, 18:51
Откуда: Саратов, Заводской

Re: Изменение файла = Создание архива

Сообщение Eugeene » 05 окт 2009, 21:27

Rostov114 я хочу сам написать =)
А вообще да, идея была при новых обновках закидывать их в архив.
Eugeene
Начинающий участник
 
Сообщения: 16
Зарегистрирован: 24 авг 2009, 19:29

Re: Изменение файла = Создание архива

Сообщение Zver » 05 окт 2009, 22:24

Блин, такое чувство, что я что - то пропустил (=
Zver
Активный участник
 
Сообщения: 1333
Зарегистрирован: 18 дек 2008, 18:51
Откуда: Саратов, Заводской

След.

Вернуться в PHP, HTML, CSS...

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 56

cron