Запуск в планировщике Windows консольного PHP

Aug 21, 2014 11:58

Побуду сегодня Капитаном Очевидность.

Итак, у вас есть Денвер (Джентльменский набор вэб-разработчика) и какой-либо скрипт script.php. Скрипт отлажен и нормально работает в браузере. Вы хотите запускать этот скрипт планировщиком винды. Запуск в планировщике браузера с путём к скрипту отвергается, чтобы не плодить окна.

Как все нормальные люди, вы сначала тренируетесь "на кошках".
Создаётся bat-файл с содержимым
C:\WebServers\usr\bin\php5.exe test.php
где в файле скрипта test.php одна строка

echo 'test';

Запускаете его. Вас заваливает диалоговыми окнами с кнопкой ОК с жалобами, что не найдены пути к куче модулей.
И верно. В файле C:\Webservers\usr\local\php5\php.ini указаны относительные пути к расширениям PHP.

Идём в указанный файл. Коментируем строку
extension_dir = "/usr/local/php5/ext"
ставим в начале этой строки точку с зяпятой
;extension_dir = "/usr/local/php5/ext"

Ниже неё вставляем строку
extension_dir = "C:\Webservers\usr\local\php5\ext\"

Вновь запускаем bat-файл. Среди выведенного словестного мусора можно успеть разглядеть строку test. Окошко мелькает на экране на секунду и закрывается. Да, вы забыли вставить второй строчкой в bat-файле
pause
Именно она выводит строку "Для продолжения нажмите любую клавишу . . .".

Итак, мы видим в командной строке винды наш "test".

Кладём bat-файл рядом с "настоящим" файлом script.php, запускаем.

Очередной сюрприз. Ваш скрипт работает с файлами в соседней папке, однако не может найти эту папку. Ведь вы по привычке указали $_SERVER['DOCUMENT_ROOT'] как путь к текущей папке.
Однако, для консольного РНР не существует массива $_SERVER и переменной $_SERVER['DOCUMENT_ROOT']. Правда, странно? :) Поэтому отлаженный на сервере PHP-файл вместо на месте указанной переменной вставит не путь к текущему каталогу, а пустую строку. Юзайте относительные пути типа "../" и "./".
Пути поправили, добавляем задание в планировщик. Для проверки нажимаем "Выполнить" задание.
Выводятся ошибки, что не найден файл script.php. Почему? Он же лежит рядом с bat-файлом!
Всё дело в том, что в bat-файле мы может просто написать путь к интерпретатору C:\WebServers\usr\bin\php5.exe и имя скрипта script.php, который находится рядом с bat-файлом.
То есть
C:\WebServers\usr\bin\php5.exe script.php
В планировщике винды надо ставить полный абсолютный путь к выполняемому скрипту, как и в любом уважающем себя cron'е.
То есть, меняем строку на
C:\WebServers\usr\bin\php5.exe C:\WebServers\home\site.loc\www\script.php
Кто бы мог подумать! :)

Вам ещё не надоело? А может, нафиг это консольный РНР? :) Столько очевидных вещей надо помнить! Не волнуйтесь, остался последний подводный камень.
Вы запускаете задание вновь.
Скрипт отрабатывает, но до кульминации дело не доходит. Из-за лимита на время выполнения скрипта. Вашему скрипту мало 30 секунд, которые выделяет сервер.
В начале скрипта script.php пишем
set_time_limit(0);

Вот теперь всё. Только не забудьте убрать
pause
из bat-файла. :)

программирование, хозяйке на заметку, полезные скрипты

Previous post Next post
Up