Шаблон консольного скрипта на PHP
Довольно часто по работе приходится писать различного вида скрипты которые выполняются как в консоли, так и при вызове из браузера. Со временем сложился устойчивый стартовый шаблон консольного скрипта на PHP, который собственно и таскаю с сервера на сервер, когда начинаю что-то писать.
Можно конечно использовать для этого различные фреймворки, типа yii, которые предоставляют более удобный для этого функционал, но чаще всего для простых скриптов такого монстра тащить не рационально. Посему имеем то что имеем.
Структура папок следующая:
Начнем с файла index.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php define('WUO_ROOT', dirname(__FILE__)); // загружаем классы spl_autoload_register(function ($class_name) { require_once WUO_ROOT.'/class/'.$class_name.'.php'; }); include_once WUO_ROOT.'/config.php'; include_once WUO_ROOT.'/inc/functions.php'; PutLog("скрипт стартовал!"); PutLog("ищу остатки на складе",2); PutLog("на складе Вологда",3); PutLog("10",4); PutLog("на складе Бобруйск",3); PutLog("23",4); PutLog("завершил бронирование остатка",2); |
Что тут интересного? Сначала объявляем константу, куда ложим текущий физический путь до выполняемого скрипта. Далее загружаем все классы которые находятся в папке class (ака require_once vendor/autoload.php’ при использовании composer). Потом грузим файл config.php:
1 2 3 4 5 6 7 8 9 10 11 |
<?php date_default_timezone_set('Europe/Moscow'); // Временная зона по умолчанию if (isset($argv[0])){ // Тестовая ini_set('display_errors', 1); error_reporting(E_ALL); define("log_file","dev.log"); } else { // БОЕВАЯ define("log_file","work.log"); }; |
В котором прописываем логику определения разных констант в зависимости от переданного аргумента командной строки. Скрипт считает, что если аргумент есть — то значит версия скрипта «Для разработки».
В файле functions.php я добавил наиболее часто используемые мной функции:
- PutLog — вывод лога в файл и дублирование в консоль, если скрипт запущен из командной строки
- _GET — получение параметра $_GET, если отсутствует, возвращается пусто, или значение по умолчанию
- _POST — получение параметра $_POST, если отсутствует, возвращается пусто, или значение по умолчанию
- GetIpUser — попытаться получить IP пользователя вызвавшего выполнение скрипта
- jsonExit — отдать на выход содержимое в формате json, установить заголовок json и выйти из программы
- String2Boolean — преобразовать строку в тип boolean, Например на входе может быть строка «True» или число 1, на выходе будет именно Тип. Функция полезна при работе с JSON, где тип зачастую не определен однозначно.
Ну собственно и всё: этот шаблон консольного скрипта можно использовать на серверах как разместив его в cron, так и просто вызывая его через браузер.