HTML, Excel, Word, SEOОсновы PHP ⇒ Автоматизация

PHP для "чайников"

Инструменты
Выбираем IDE
Выбираем Web-сервер
Выбираем СУБД
Структура языка PHP
Первый шаг
Синтаксис
Типы данных
Переменные и константы
Операторы
Выражения
Управляющие структуры
Функции
Классы
Исключения
Ошибки
Массивы
Глобальные массивы
Cookies
Сессии
Загрузка файлов
Работа с файлами
Работа с файлами на диске
Работа с данными в файле
Пример управления файлами
Работа с базами данных
Подключение
Анализ результатов
Выполнение запросов
Отключение
Пример: отслеживание пользователей
Работа в сети
Отправка почты
Безопасность
HTTP-аутентификация
Защита логином и паролем
Автоматизация
Регулярные выражения в PHP
Интеграция
PHP и JavaScript

Получи бонусы в Вулкан Россия при регистрации

Автоматизация


Автор: Артемьев Сергей Игоревич
ICQ: 438856621
email: _spin_@bk.ru

Иногда на сайте возникает необходимость организовать периодическое выполнение каких-либо задач. Это может быть рассылка почты, проверка и резервирование баз данных, чистка кешей, обновление содержимого каталогов и многое другое.


Автоматизации можно добиться двумя путями - используя средства PHP или используя внешние приложения-планировщики.


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

// index.php

<?php
	// генерация и вывод страницы пользователю
	// ...
	// страница отправлена и можно 
	// выполнить сервисные функции
	
	// подключаем нужные файлы
	include('service.php');
	// запускаем выполнение операций
	EmailSiteNews();
	BackupMyDatabase();
	UpdateSiteCounters();

?>

Единственное преимущество этого метода - не требуется ничего, кроме интерпретатора PHP, а вот серьёзных недостатков несколько:

1. Сервисные операции выполняются при каждой загрузке или обновлении страницы, следовательно при большом количестве посетителей сервер будет сильно перегружен.

2. Сервисный скрипт должен контролировать время своего выполнения и своевременно сохранять промежуточные результаты, т.к. на на сервере существует предельное время выполнения скриптов (обычно 30-40 секунд). по истечении которого скрипт принудительно прерывается.

3. Отсутствует возможность планирования выполнения скрипта, т.е. если ни один пользователь на сайт не зайдёт - все задачи останутся неисполненными.

4. При неправильной обработке ошибок они будут отображаться в браузере пользователя. Это плохо само по себе, а в некоторых случаях такие ошибки приводят ещё и к "расползанию" дизайна.

5. Очень сложно планировать нагрузку на сервер, т.к. посещаемость сайта можно предсказать лишь с определённой вероятностью.

Более оптимальным и простым решением является использование внешних программ-пранировщиков. Например, большинство Unix-провайдеров предоставляют доступ к программе crontab, которая даёт возможность запланировать выполнение любых задач на определённое время или с заданной периодичностью. Сrontab позволяет выполнять скрипты PHP, при этом интерпретатор запускается в режиме командной строки.

Как правило, в панели управления хостингом есть визульный интерфейс для редактирования cron-правил. Чаще всего встречаются два типа интерфейсов - классический и расширенный. Функционально они идентичны, но расширенный вид более нагляден и понятен начинающему пользователю. В любом случае, при создании нового задания вам необходимо будет указать три параметра: время запуска, скрипт для запуска и адрес электронной почты, куда будет направлен отчёт о выполении.

Время запуска задаётся пятью блоками: минута, час, день_месяца, месяц и день_недели. Для каждого блока можно указать периодичность, точное значение, диапазон или список значений, а если указать "*" (звёздочка), то значение учитываться не будет. Например:

// ежендевный запуск в 3:00
* 3 * * *

// запуск скрипта каждые пять минут // ("/" - означает "каждые")/ */5 * * * *
// ежечасный запуск скрипта // в понедельник с 3:00 до 7:00 * 3-7 * * * mon
// ежечасный запуск скрипта // в понедельник с 3:00 до 5:00 * 3,4,5 * * * mon
// запуск в новый год 59 23 31 dec *

Второй параметр - это собственно исполняемая команда. В большинстве случаев команда выполнения скрипта записывается в формате <путь_к_интерпретатору> <полный_путь_к_скрипту>. При этом все пути указываются полностью, начиная от корневого каталога сервера. Например, интерпретатор расположен в "./local/sbin/php5.exe", а исполняемый скрипт - в "web/http/service.php". Если нам надо выполнять скрипт ежечасно, то строка задания будет следующей:

0 * * * * /local/sbin/php5.exe /web/http/service.php

Третий параметр - адрес электронной почты - вводится один раз для всех заданий. Результаты выполнения задачи будут высылаться на указанный адрес. Если скрипт был завершен с ошибкой - в тексте письма будет соответствующая запись с указанием ошибки и строки, где она произошла. К сожалению, сообщения будут приходить и тогда, когда всё прошло успешно, поэтому если вы решили выполнять скрипт ежеминутно - готовьтесь получать по шестьдесят писем в час.

Запуск интерпретатора в режиме командной строки накладывает некоторые ограничения на программиста. Так, становятся недоступны некоторые глобальные массивы и переменные Apache. Поэтому на crontab не стоит возлагать задачи, требующие знания настроек web-сервера или других системных параметров.

Таким образом, если ваш провайдер и предоставляет доступ к планировщику заданий - обязательно пользуйтесь им и не изобретайте велосипед. Ну а если уж выбора не остаётся и crontab недоступен - выходите из положения средствами PHP и собственной смекалкой.



В начало страницы



В начало страницы