Резервирование и бэкап – зачем и как.

34 комментария

Бэкап, резервирование и восстановление данныхВсе данные, хранящиеся на жестких дисках, флешках, и прочих носителях, всегда находятся под некоторой угрозой. Диск может сломаться, флешка исчезнуть, а владелец файлов (чаще всего) может их случайно удалить или испортить. Поэтому предлагаю немного поразмыслить о резервировании критически важных данных.

Начнём с сайта. Среднестатистический сайт – это набор файлов на диске и база данных, как правило – MySQL.

С базой данных особых проблем не вижу:

  • для WordPress есть плагин WordPress Database Backup WordPress Database Backup, который сохраняет базу по расписанию и отправляет её на e-mail
  • для других систем можно воспользоваться скриптом Sypex Dumper Sypex Dumper, или настроить дамп и отправку по почте самостоятельно (несколько строк кода).

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

Сначала заархивируем все файлы сайта в один архив с помощью библиотеки PclZip PclZip:

<?php require_once('pclzip.lib.php');
$date = date('Y-m-d');
$archive = new PclZip("$date.zip");
$v_list = $archive->add('../');
if ($v_list == 0) { die("Error : ".$archive->errorInfo(true)); }

В этом примере $v_list – это относительный путь к архивируемому каталогу или список каталогов и фалов через запятую. Выбирайте сами, что именно нужно резервировать.

После этого можно сделать дамп MySQL базы и добавить его в этот архив, а потом, например, отправить полученный архив по почте с помощью класса PhpMailer PhpMailer и удалить его чтобы не занимал место. Запускать этот процесс можно с помощью планировщика у хостинг-провайдера (у Majordomo бесплатный) или (если это WordPress) с помощью WP-Cron WP-Cron.

Законченного решения я не выложил, но конструктор укомплектован – собирайте кому что нужно, все части надёжны и проверены.

Следующий эпизод – локальный компьютер. Тут стоит сразу определиться – что именно резервировать. Для больших и редко используемых файлов (фото, видео, архивы) я поставил себе под стол старенький компьютер под Ubuntu, настроил NFS и забыл о нём – приходя домой я получаю доступ к этим файлам, а в крайнем случае – можно и удалённо залезть.

А для регулярного бэкапа текущих проектов вполне подойдёт Gmail. Бесплатный почтовый ящик вмещает до 10Gb данных, а самый интересный фокус в том, что его можно подключить как обычный диск – как в Linux GmailFS, так и под Windows GMail Drive. А сохранять туда нужные файлы тоже можно кроном, или его Windows-аналогом – nnCron + nnBackup nnCron.

А заодно посмотрим, что об этом думают другие участники конкурса на лучший способ бэкапа личных данных.

Жилинский Владимир.



Определение пауков ПС на PHP.

23 комментария

Определение робота поисковой системыНе знаю, пригодится ли этот скрипт кому-то кроме меня, но выкладываю хотя бы просто чтобы не потерять. Простой скрипт анализирует переменную $_SERVER[‘HTTP_USER_AGENT’] и если обнаруживает признаки паука поисковой системы (кравлера), то выдает его имя, иначе – возвращает false.

Использовать можно по-разному:

  • Можно как в IPB – сохранять в базу и выводить где-нибудь в админке или на сайте присутствующих в данный момент ботов.
  • Можно собирать продвинутую статистику индексации и анализировать её (оптимальный вариант).
  • Можно заниматься клоакингом и дорвеестроительством, но, пожалуй, не нужно.

скачать PHP скриптSpiderDetect.phps - Определение роботов поисковых систем.

 

Жилинский Владимир.



Проверка ТиЦ на PHP – ещё быстрее.

56 комментариев

PHP определение ТиЦНесколько дней назад я выкладывал скрипты для определения средствами PHP показателей Яндекс ТиЦ и Google PR для сайтов (это может быть полезно при создании рейтингов, каталогов и для SEO). В комментариях Виталий спрашивал – почему скорость определения ТиЦ такая низкая (до минуты). Причина была найдена вместе с альтернативным решением.

Дело в том, что я пытался определить ТиЦ, используя данные для Яндекс.Бара, которые отдаются медленно (недостаток серверных ресурсов, скорее всего). Решение – обращаться к каталогу Яндекса, который неизбежно показывает нужное значение (хотя, говорят, иногда обновляется с небольшим опозданием).

По скорости – получилось. Всё-таки, каталог – это сайт, а сайт Яндекса должен работать быстро. Исчезли задержки по 30-50 секунд, скрипт выполняется за 0.20.3 секунды.

скачать PHP скриптCy-2.phps - получение Яндекс ТиЦ в виде числа.

Проверить скорость и точность работы кода можно на том же тестовом скрипте.

PS: У меня всего 100 коллег? Не верю!

Жилинский Владимир.



Тысяча читателей

34 комментария

Вот и свершилось – преодолен некий скорее психологический рубеж в 1000 читателей блога.

You need to upgrade your Flash Player

Если судить по меркам ЖЖ, то теперь я “тысячник”, а если по идеям нашей ненормальной законодательной власти – то СМИ. Поздравления принимаются ))

График обновляется динамически, забирая данные за последний год по XML c FeedBurner Awareness API. Забирает XML FeedBurner.class и превращает его в динамический XML-файл данных для amCharts. Лень было уходить от динамики и настраивать крон. Если кому интересно – выложу код или более подробную инструкцию.

Жилинский Владимир.



Как на сайте сделать…

20 комментариев

Как на сайте сделать…По ряду причин, мне не найти времени и сил на полноценную статью, а написать что-нибудь хочется. Поэтому я просто дам несколько полезных на мой взгляд ссылок на статьи моих коллег-блогеров. На всякий случай: в этих статьях описывается решение задач средствами PHP.

Итак, как…

Может кто-нибудь продолжит список в комментариях ?

Жилинский Владимир.



Регулярные выражения (regexp)

18 комментариев

Регулярные выражения (regexp)

Регулярные выражения (regexp, англ. regular expressions, жарг. регэкспы или регексы) — современная система поиска текстовых фрагментов в электронных документах, основанная на специальной системе записи образцов для поиска.

Вдогонку к моей заметке про регулярные выражения нашлось ещё несколько полезных ссылок на новые сервисы автоматической проверки и конструирования регэкспов.

  • Шпаргалка по регулярным выражениям – на стенку.
  • RegexPal: Скрипт, который позволяет на лету создавать и проверять паттерны регэкспов средствами JavaScript. Подсвечивает синтаксис и содержит подсказки. Кстати, этот скрипт можно сохранить – он работает независимо от сервера.
  • Regexp.ru: Проверяет регэкспы средствами PHP (preg_match_all).
  • Rexv.org и REGex Tester: Проверяют регэкспы средствами PCRE, POSIX или JavaScript.
  • Java Regexp: Проверяет регэкспы на Java.

Спонсор: Есть работа!: О кредитах на приобретение жилья человеческим языком.

Жилинский Владимир.



Морфологический анализатор для PHP-скриптов

24 комментария

Морфологический анализатор для PHP-скриптовДолго мы ломали над этим голову… Морфология русского языка весьма сложная штука в плане алгоритмизации. Но использование в практически любом проекте морфологизатора, например, для поиска или подбора – даёт проекту неплохой бонус в удобстве использования.

Самый удачный, быстрый и простой в использовании морфологизатор я нашёл совсем недавно. Это phpMorphy. и он умеет следующее:

  1. Определение словоформ слова;
  2. Определение корня слова;
  3. Определение начальной формы слова.

Если нужно реализовать поиск с учётом словоформ, то это совсем просто – нужно просто получить корень слова с помощью phpMorphy ( $root = $morphy->getPseudoRoot($words); ) и провести поиск по базе данных SQL-оператором LIKE.

Сам скрипт занимает не больше 30 Kb, а русский словарь для него - 2.5 Mb.

Справедливости ради отмечу, что рассматривались и другие морфологические скрипты.

Жилинский Владимир.



Определяем Google PR и Яндекс ТиЦ в PHP

26 комментариев

PHPВот несколько простых функций, которые позволяют скрипту получить значения классических пузомерок (ТиЦ, PR) для страницы или сайта средствами PHP, может кому-нибудь пригодятся. Не требуют от сервера ничего сверхъестественного – PHP и возможности внешних соединений будет вполне достаточно.

скачать PHP скриптGetPR.phps – получение Google PR в виде числа.

скачать PHP скриптGetCY.phps – получение тулбарного Яндекс ТиЦ в виде числа.

Ещё Яндекс ТиЦ можно получить из каталога в виде картинки вот таким образом:

<img src=http://www.yandex.ru/cycounter?$uri>

Картинка, взятая по этому адресу покажет favikon`ку сайта, закешированную Яндексом.

<img src=http://favicon.yandex.net/favicon/$uri/>

$uri в этих примерах – нужный адрес сайта без http:// и www.

Посмотреть как это всё работает и сколько времени на это уходит можно вот на этом скрипте, который работает именно таким образом.

Спонсор: Мегаплан, удобная система управления задачами.

Жилинский Владимир.

«Недосол – на столе, пересол – на спине» – гласит русская народная поговорка. Но, что делать если пересолил? Можно ли спасти пересоленное блюдо?



Referer: от причины к следствию

19 комментариев

PHPВы когда-нибудь интересовались, по каким словам ваш сайт или блог находят люди, приходящие с поисковиков? Иногда от души ржу, просматривая статистику, собранную плагином WP-ShortStat. Но пока мы смеёмся, умные люди используют этот подарок разработчиков браузеров – переменную HTTP_REFERER, в которой всегда содержится эта информация.

Использовать её можно разными путями. В одном из них уже, кажется, с концами запутался Евгений Сергеев, разрабатывая свой “Умный эпиграф“, переоценивший способности рядового блогера.

Некоторые онлайн-магазины используют эти данные для простейших поведенческих механизмов. Например, пользователю, пришедшему по запросу “купить телевизоры”, всё его время пребывания на сайте будет показываться реклама спецпредложений по продаже телевизоров. Это значительно увеличивает конверсию посетителей в покупатели.

Основной поток посетителей (с ПС) любого сайта можно разделить на ветви по нескольким ключевым словам и сделать сайт динамическим в зависимости от того, что искал пользователь. Вот простейший PHP-скрипт для определения ключевых слов, по которым на ваш сайт пришли с Yandex, Google, Altavista,Mail.ru, Rambler и Yahoo.

<?php
if (!is_empty($ref = $_SERVER['HTTP_REFERER']))
{
// $ref="http://go.mail.ru/search?q=%C6%E8%EB%E8%ED%F1%EA%E8%E9"; // проверили, работает.
$uri = parse_url($ref);
$host = isset($uri['host'])?strtolower($uri['host']):'';
parse_str($a = $uri['query'],$query);
if (preg_match('~\.yandex\.ru$~',$host)) {$search_query = $query['text'];}
elseif (preg_match('~\.google~',$host)){$search_query = $query['q'];}
elseif ($host == 'www.altavista.com') {$search_query = $query['q'];}
elseif ($host == 'go.mail.ru') {$search_query = $query['q'];}
elseif ($host == 'www.rambler.ru') {$search_query = $query['words'];}
elseif (preg_match('~\.search.yahoo.com~',$host)) {$search_query = $query['p'];}
else {$search_query = '';}
require("a.charset.php");
$search_query = charset_x_win($search_query);
}
echo $search_query;
?>

Переменную $search_query вместо отображения можно сравнивать с чем-нибудь и на основе результата строить какую-то динамику. Функция charset_x_win из класса a.charset.php просто приводит фразу к правильной русской кодировке. Кстати, если немного поколдовать – можно ещё получить номер страницы выдачи, с которой пришёл пользователь.

А Павел Воронин тем временем написал весьма интересную серию статей о создании стартапа.

Жилинский Владимир.



База городов – 2

27 комментариев

База городов11 мая в заметке “База стран и городов” я писал про способы создания динамического списка Страна -> Город. Сегодня я снова решил поднять эту тему – новой информации по географическим базам данных накопилось порядочно.

Итак, обо всём по порядку.

  • SQL-база на 4 таблицы: id1-страна, id2-регион, id3-город, id1-id2, id2-id3 (0.4 Мб).
  • КЛАДР и его спецификация формата.
  • SQL-база соответствий стран, городов и IP-адресов.
  • IpGeoBase – IP-геобаза, бесплатная.
  • Эталонный справочник индексов объектов почтовой связи (DBF).
  • База городов Gismeteo (сграблена в простом текстовом формате).
  • Worldcities – на английском , 3 047 083 городов с координатами (RU moscou Moscou 48 55.7522222 37.6155556).
  • GeoNames.org -все страны, города, посёлки, деревни , национальные языки и кодировки, координаты, возможность бесплатно скачать полную базу и воспользоваться поиском сразу.

Жилинский Владимир.




© 2007-2010 Блог интернет-разработчика, автор — Zhilinsky.ru.
При использовании информации ссылка на источник обязательна.