Основные отличия CLI-версии SAPI-интерфейса от остальных реализаций SAPI:
В отличие от CGI-версии SAPI-интерфейса, заголовки не пишутся в поток вывода.
Хотя в CGI-версии SAPI-интерфейса предусмотрели способ подавления HTTP-заголовков, в CLI SAPI заголовки включить нельзя.
CLI по умолчанию запускается в тихом режиме, тем не менее, ключи -q и --no-header сохранили для обратной совместимости, что разрешает запускать старые CGI-скрипты.
Текущая директория не изменяется на рабочую директорию скрипта. Ключи -C и --no-chdir сохранили для обратной совместимости.
Сообщения об ошибках выдаются в текстовом режиме — без HTML-форматирования.
Отдельные настройки файла php.ini переопределяются CLI SAPI, поскольку в них нет смысла при работе в командной строке:
Директива | Значение по умолчанию в CLI-версии SAPI-интерфейса | Комментарий |
---|---|---|
html_errors | false |
Значение по умолчанию равно false , поскольку трудно читать в консоли
сообщения об ошибке, когда их наполнили бессмысленными HTML-тегами.
|
implicit_flush | true |
Обычно в консоли желательно отображать вывод, например, из функции print, языковой конструкции echo и других, сразу же минуя буфер. Тем не менее, по-прежнему разрешается использовать буферизацию вывода для отложенного вывода или манипуляций с ним. |
max_execution_time | 0 (без ограничений) | PHP, который выполняют в консоли, часто используют для более широкого диапазона задач, чем обычные веб-скрипты. И поскольку иногда задачи выполняются долго, максимальное время выполнения не ограничивается. |
register_argc_argv | true |
Установка этой опции в значение При использовании CLI SAPI переменные $argc и $argv автоматически заполняются соответствующими значениями. Эти значения можно также найти в массиве $_SERVER, например: $_SERVER['argv']. |
output_buffering | false |
Несмотря на то, что эта опция php.ini жёстко установлена в |
max_input_time | false |
PHP CLI не поддерживает GET, POST или загрузку файлов. |
Замечание:
Эти директивы не могут быть инициализированы другими значениями из конфигурационного файла php.ini или любого другого (в случае, если он указан). Это ограничение связано с тем, что значения применяются после обработки конфигурационных файлов. Тем не менее, эти значения могут быть изменены во время работы скрипта (хотя это не имеет особого смысла для всех них, например register_argc_argv).
Замечание:
Рекомендуется установить опцию ignore_user_abort для скриптов, используемых из командной строки. За подробностями обращайтесь к функции ignore_user_abort().
Для облегчения работы в окружении оболочки было определено некоторое количество констант для потоков ввода-вывода.
CLI SAPI не изменяет текущую директорию на директорию исполняемого скрипта.
Пример #1 Пример, демонстрирующий разницу с CGI SAPI:
<?php
// Простейший тестовый скрипт под названием test.php
echo getcwd(), "\n";
?>
В случае, если используется CGI-версия, результат работы будет следующим:
$ pwd /tmp $ php -q another_directory/test.php /tmp/another_directory
Это наглядно демонстрирует, что PHP изменяет текущую директорию на директорию исполняемого скрипта.
Использование CLI SAPI даёт другой результат:
$ pwd /tmp $ php -f another_directory/test.php /tmp
Это обеспечивает большую гибкость при написании консольных скриптов на PHP.
Замечание:
CGI SAPI позволяет получить аналогичное CLI SAPI поведение в случае использования ключа -C при запуске из командной строки.