Основные отличия 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 при запуске из командной строки.