При регулярном обновлении сайта нередко возникает ситуация , когда при обновлении связь обрывается и приходиться начинать сначала обновление. При обновлении же сайта состоящего из множества каталогов , вполне вероятно что некоторые файлы не будут обновлены или закачаны вообще.
При наличии на вашем сайте PHP существует достаточно простое решение проблеммы : на вашем сайте (не имеет значения на какой платформе он размещен) и на вашем "рабочем" (локальном) компьютере размещается скрипт, который дает возможность получить информацию о размещенных файлах и их размерах.
После получения информации от скриптов сбора информации на локальном месте также запускается анализа результатов выполнения "локального" и "удаленного" скриптов и появляется возможность точно синхронизировать веб-каталоги.
Итак рассмотрим требования к , программе, позволяющей делать подобную синхронизацию :
Программа , должна давать однотипную информацию о размещенных файлах и каталогах на различных платформах. Как минимум Я рассматривал запуск скрипта ,сбора информации, на FreeBSD и Windows.
В эталонном веб-каталоге программа должна давать статистику о несоответствии веб-каталогов и о типе несоответствия.
Результаты выполнения программы на удаленной машине должны быть доступны для получения в виде файла.
Эти минимальные требования , успешно выполняет программа , написанная на PHP. Благодаря наличию версий как для UNIX так и для Windows , достигается универсальность работы - и при этом потенциально исключается возможность возникновения ошибок , связанных с различной работой , собирающих информацию, программ на различных платформах.
Рассмотрим часть программы (которая полностью доступна для скачивания в разделе "Загрузка/PHP" сайта "Программы для бизнеса"), которая ответственна за сбор информации о веб-каталоге.
|
Скрипт для сбора информации о веб-каталоге (sh.php) |
|
<? |
Как видим , программа состоит из класса , реализующего нужную нам функциональность.
Функция класса function find($in_dir) реализует сбор информации о веб каталоге и помещает ее в ассоциативные массивы. Ключом массива является путь в конкретному файлу , благодаря этому достигается одинаковое представление информации на различных платформах и отпадает необходимость в явной сортировке.
Функция класса function prnt() выводит, собранную в массивах информацию в лог-файл $db_fname = "sync.zip" ;
Итак для синхронизации удаленного веб-каталога с локальным - необходимо , в удаленном веб-каталоге поместить скрипт , сбора информации в каталог удаленного веб-сайта и вызвать его через браузер. При запуске скрипта в окне браузера вы увидите ссылку на файл который необходимо скачать в локальный веб-каталог и назвать sync_vov.zip .
После чего необходимо запустить локальный скрипт , только уже анализа информации,(из веб каталога в котором вы только что разместили лог-файл с удаленного сервера). Этот скрипт создаст локальный лог-файл sync.zip и сравнит его содержимое с содержимым лог файла с удаленного сервера. Результат сравнения будет выдан на экран в виде списка отсутствующих файлов (красным цветом) и списка файлов у которых отличаеться размер.
Вот фрагмент программы , реализующей сравнение удаленного и локального лог-файлов:
|
Скрипт для анализа информации о веб-каталогах (analis.php) |
|
$fn1="sync.zip"; |
Как вы видите принцип работы анализатора логов состоит в заполнении двух ассоциативных массивов, информацией из лог файлов и их сравнении.
Как дальнейшее развитие идеи синхронизации каталогов на PHP, видится использование подсчета контрольной суммы в каждом файле на удаленной и локальной машине.
Ссылки по теме :
1. Исходные тексты программы "Синхронизации
веб-каталогов". Перейти
>>>
2. FAQ по PHP. Перейти
>>>
3. Статьи на сайте "Программы для
бизнеса" Перейти>>>