Учебник PHP

         

Глава 24. Использование PHP из командной строки

Начиная с версии 4.3, РНР поддерживает новый SAPI-тип (Server Application Programming Interface) под названием CLI, что означает Command Line Interface. Как следует из названия, главной задачей этого SAPI-типа является разработка приложений оболочки/shell (или рабочего стола) с помощью РНР. Имеются весьма небольшие отличия CLI SAPI от других SAPI, которые будут далее рассмотрены в этой главе.

CLI SAPI был выпущен в первый раз с PHP 4.2.0, но тогда это был эксперимент, и нужно было явно включать его командой --enable-cli при запуске ./configure. Начиная с PHP 4.3.0, CLI SAPI больше не является экспериментальным и всегда встроен и устанавливается как двоичный исполняемый файл php (называется php.exe в Windows).

Существенные отличия CLI SAPI от других SAPI:

  • В отличие от CGI SAPI, никакие шапки/headers не записываются в вывод.

    Хотя в CGI SAPI имеется способ подавления HTTP-шапок, эквивалентного переключателя для их включения в CLI SAPI нет.

  • Имеются определённые директивы php.ini, которые переопределены в CLI SAPI, поскольку они не имеют смысла в среде окружения оболочки:

Таблица 24-1. Переопределение php.ini-директив
ДирективаCLI SAPI- значение по умолчаниюКомментарий
html_errorsFALSE Бывает довольно сложно прочитать в оболочке сообщение об ошибке, наполненное всеми этими бессмысленными

HTML-тэгами, поэтому по умолчанию значение этой директивы FALSE.
implicit_flushTRUE Желательно, чтобы любой вывод из print(), echo() и компании немедленно записывался в вывод, а не отправлялся в какой-нибудь буфер. Вы всё ещё можете пользоваться буферизацией вывода, если хотите поработать со стандартным выводом.
max_execution_time0 (unlimited) Из-за бесконечно больших возможностей использования PHP в среде окружения оболочки, максимальное время выполнения не ограничено. В то время как приложения, написанные для web, выполняются в течение долей секунды, приложения оболочки пытаются занять для своего выполнения максимальное время.
register_argc_argv TRUEГлобальные переменные PHP $argc (количество аргументов, передаваемых приложению) и $argv (массив текущих аргументов) всегда регистрируются и заполняются соответствующими значениями при использовании CLI SAPI.

Примечание: эти директивы не могут быть инициализированы другим значением из файла конфигурации php.ini или специального файла (если специфицирован). Это является некоторым ограничением, поскольку эти значения по умолчанию применяются после разбора всех файлов конфигурации. Однако их значение может быть изменено на этапе прогона программы (что не имеет смысла для всех других директив, например, для register_argc_argv).

  • Легче работать в среде оболочки, когда определены следующие константы:

    Таблица 24-2. Специфические CLI-константы
    КонстантаОписание
    STDINУже открытый поток в stdin. Она хранит открывшего её
    Содержание раздела