X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Файловый бекап сайта
ZhukV
ZhukV
Topic Starter сообщение 24.5.2010, 16:10; Ответить: ZhukV
Сообщение #1


Доброго времени суток всем.
Вот только что пришлось сложить нечто интересное:
Нужно сделать оброботчик, файл которого может лежать везде, и который делает полный бекап сайта, файловый, тоесть чтоб заархивировал все файлы, которые есть на сайте, кроме SQL.

Все же сделал я его, и не очень то тяжело было. Но все же может и кому то еще нужно.

Для начала, нужно сложить функцию, которая бы перевертала все файлы и папки, начиная с корня.

[PHP]
function Directory($DIR, &$ARRAY_DIR = array()){
$H = opendir($DIR);//ОТКРЫВАЕМ УКАЗАНЫЙ КАТАЛОГ
while($file = readdir($H)){//ПОДКЛЮЧАЕМ ЦЫКЛ, ЧТОБ ПЕРЕВЕРНУТЬ ВСЕ, ЧТО В НАС ТАМ ЕСТЬ
if( $file!=="." && $file!==".."){//ЕСЛИ ЭТО НЕ ПЕРЕХОД НАЗАД
if(preg_match('/\./', $file)){//ЕСЛИ ЭТО ФАЙЛ
$ARRAY_DIR[] = $DIR . "/" . $file;//ДОБАВИТЬ В МАССИВ
}else{//ЕСЛИ ЖЕ ПАПКА, ТО И ЕЕ ОПЯТЬ ПЕРЕВЕРТАЕМ
Directory($DIR . "/" . $file, $ARRAY_DIR);
}
}
}
closedir($H);//ЗАКРЫВАЕ КАТАЛОГ
}
[/PHP]
Функция не сложна, вот только нужно понять ее суть. Она не возвраает никакого результата, но имеется жесткая ссылка на массив.
Для примера:
[PHP]
Directory("papka", $ARRAY);
print_r($ARRAY);
[/PHP]
Массив $ARRAY будет автоматически создан в процесе исполнения функции.

Ну что ж, папкопотрошилку мы сложили. Теперь нужно придумать сам процес архивирования файла.
Я не пытался сам его сложить, потому что времени было маловато, но хорошие люди мне подкинули отличный класс (Есть в архиве -- zip.core.php)
Пример создания архива:
[PHP]
$ZIP = new ZipAdd();
$ZIP -> addFile("123", "123.txt");//ДОБАВИТ В АРХИВ ФАЙЛ 123.txt С ТЕКСТОМ 123
$file = file_get_contens("images/1.jpg");
$ZIP -> addFile($file, "images/1.jpg");//ДОБАВИТ КАРТИНКУ
$ARHIVE = $ZIP -> file();//ПОЛУЧИЛИ ВЕСЬ АРХИВ В ПЕРЕМЕННУЮ
header("Content-Type: application/zip");//Браузер понимает, что получает архив
header('Content-Disposition: attachment; filename="tes.zip"');//и также понимает, что его надо загрзить с определенным именим
echo $ARHIVE;//ДАДИМ ВЕСЬ АРХИВ БРАУЗЕРУ
[/PHP]
Большой особеностью этого класса есть то, что при внедрение файла он сохраняет путь, тоесть если ввести адрес файла типа addFile("TEXT", "temp/text/123.txt");, то он будет знать, что нужно сразу втулить в папку text, которая находится в папке temp.


Ну что ж, папкопотрошилка есть, архиватор тоже, нужно приступать:

[PHP]
//Здесь должна еще быть функция Directory()
include("zip.core.php");//ПОДКЛЮЧИМ КЛАСС АРХИВАТОРА
Directory($_SERVER['DOCUMENT_ROOT'], $R);//ПОЛУЧИМ В МАССИВ $R ВСЕ ПАПКИ И ФАЙЛЫ, КОТОРЫЕ ЕСТЬ НА САЙТЕ
$ZIP = new ZipAdd();//Подключаем класс архиватора
//И ТЕПЕРЬ ПЕРЕВОРАЧИВАЕМ ВЕСЬ МАССИВ, ЧТОБ ДОБАВИТЬ ВСЕ ФАЙЛЫ В АРХИВ
for($i=0;$i<count($R); $i++){
$R[$i] = str_replace($_SERVER['DOCUMENT_ROOT'] . "/","",$R[$i]);//УДАЛИМ ПУТЬ КОРНЯ
$FILE = file_get_contents($R[$i]);//ДОСТАНИМ ФАЙЛ В ПЕРЕМЕННУЮ
$ZIP -> addFile($FILE, $R[$i]);//И ДОБАВИМ В АРХИВ
}
header("Content-Type: application/zip");//НУ ЭТО ПИРОЖКИ ДЛЯ БРАУЗЕРА
header('Content-Disposition: attachment; filename="FILE_SUIT_'.date("Y-m-d_H_i_s").'.zip"');//И СПЕЦИИ НУЖНО, ЧТОБ ТОЧНО ЗАКАЧАЛ
echo $ZIP -> file();//НУ И САМА НАЧИНКА (АРХИВ)
[/PHP]

Сложого здесь ничего нет, и весьма полезно будет для тех, кто работает на файловых КМС.
Надеюсь что вы найдете себе что-то полезное здесь.

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Горячая тема (нет новых ответов) Продвижение молодого сайта
30 maxmer 6367 26.3.2024, 21:49
автор: c4p1t4l15t
Открытая тема (нет новых ответов) SEO-текст на главной странице сайта и в категориях
5 boltuk 1354 26.3.2024, 21:43
автор: c4p1t4l15t
Открытая тема (нет новых ответов) Какой % отказов нормален для сайта?
10 Aloof 2545 24.3.2024, 21:45
автор: Liudmila
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыБыстрая индексация страниц сайта и обратных ссылок - 2Index
32 2Index 5828 18.3.2024, 16:33
автор: 2Index
Открытая тема (нет новых ответов) Перенос сайта на CMS Wordpress
8 freeax 4847 10.3.2024, 14:58
автор: freeax


 



RSS Текстовая версия Сейчас: 29.3.2024, 5:52
Дизайн