Запускаем php скрипты без сервера (CLI)
Автор: SysaninНоя 21
Правда было б удобно некоторые операции в системе автоматизировать с помощью пхп? Ну например резервное копирование каких-то файлов на удаленный ftp сервер. Можно, конечно, установить у себя http сервер с поддержкой пхп или взять готовую сборку (денвер, например), но это не удобно, да и для запуска скрипта придеться колдовать с ключами запуска браузера. Но есть более простой выход. Начиная с версии php 4.3 можно запускать на исполнение пхп файлы через консоль, используя интепретатор php. Это стало возможно благодаря новому SAPI-типу (Server Application Programming Interface) под названием CLI (Command Line Interface).
Для запуска скриптов нам понадобиться интепретатор пхп версии >= 4.3 В версии для windows в нем будет файл php.exe. Имено этому файлу мы будем передавать скрипт для выполнения. Самое простое использование будет выглядить так (команда для командной строки):
в таком случае интепретатор выполнит скрипт "D:\temp\php\echo.php". Существует ещё много различный ключей запуска для php.exe. Посмотреть их вы можете, если передадите php.exe ключ -h.
При таком запуске интерпретатор автоматически делает предопределение некоторых параметров из php.ini. А именно:
- html_errors=off (чтобы не захламлять консоль бессмыслеными для неё тегами)
- implicit_flush=on (отключает буферезацию вывода)
- max_execution_time=0 (бесконечное по времени выполнение скрипта)
- register_argc_argv=on (включает глобальные переменные PHP: $argc количество аргументов, передаваемых приложению и $argv массив текущих аргументов)
На счет последнего пункта: вы можете вызвать скрипт с дополнительными параметрами, которые после передадуться на обработку в скрипт. Они будут доступны в массиве $argv, причем элемент 0, будет содержать путь и имя скрипта. Единственное, если вам нужно использовать знак "-", то его следует заменить на "--". Например:
тогда код вида:
вернет: "file=D:\temp\php\echo.php 1=temp".
CLI так же добавляет три константы для удобной работы с консолью:
- $stdin = fopen('php://stdin', 'r');
- $stdout = fopen('php://stdout', 'w');
- $stderr = fopen('php://stderr', 'w');
где в переменную, в которую присваиваем значение, будет возращаться файловый указатель. В первом случае мы получим возможность читать команды, которые будут вводиться в консоли, во втором и третьем выводить в консоль сообщения.
В этом посте я не ставил цель рассказать как можно рульно писать скрипты под консоль, просто хотель сделать небольшой обзорчик о том, что это впринципе возможно и примерно какой функционал будет.
Нет комментариев