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