Идея копирования сайта через php
Довольно часто требуется переносить сайт с одного фтп на другой. Вроде ничего сложного, копируешь к себе, потом закидываешь. Но вот, встречаешь 10 тысяч картинок по 100 килобайт и расстройству нет предела. Медленный интернет еще больше усугубляет проблему. Эта идея пришла ко мне при очередном переносе. И вот в чем она заключается:
На хост 1 закачивается php файл, который будет управлять процессом закачки файлов.
На хост 2 закачивается принимающий файл, который будет получать его(скорее всего даже запакованным через gzip), сохранять в нужные папочки и выставлять права доступа. Итого нам нужно разобрать путь к файлу, файл это или папка, права доступа и собственно, само содержание файла.
Первый управляющий скрипт должен разделять свою часть работы на:
1. Формирование списка папок(всего дерева), сохранения его в файл, можно как массив с правами доступа.
2. Формирование списка всех файлов, сохраняя путь, размер, права доступа и конечно же статус закачки(0 - не брали, 1 - поставили на закачку, 2 - закачали).
3. Передача списка папок принимающему скрипту, ожидаем от него результат работы, переходим на следующий шаг.
4. Открываем структуру списка всех файлов, берем первые 100, обходим их по-очереди и запускаем в отдельном процессе(можно проэмулировать стандартный get запрос к отправляющему скрипту с йд файла, с мгновенным закрытием сокета, это позволит отправить файл на закачку, и продолжить выполнение основного скрипта). Каждый файл отмечаем как отправляемый + дата отправки. Ждем 10 секунд, автообновляем окно, отправляем следующие 100 файлов. И так до тех пор пока не останется файлов с статусом 0. После этого будет обновляться лишь статус отправляемых файлов. И конечно же возможность отправить еще раз файлы с статусом 1(для исключения стандартных глюков). Выводим статус передачи всех файлов.
Принимаемый файл после получения файла и его сохранения сообщает get запросом обратно об успешном сохранении файла.
При любом чтении файла, лочим его, пока не закончим очередь операций и запись изменений.
В теории - идея отличная, избавляет перенос от третьего звена - веб мастера. Думаю, надо будет выделить на это время и написать прототип.
Да, я не нашел ничего подобного. Если есть софт, решающий это же, просьба написать в комментариях. Всем спасибо за внимание! :)
Дата записи: 30.01.2012 21:06