PHP Conference Nagoya 2025

Основные отличия от остальных реализаций SAPI

Основные отличия CLI-версии SAPI-интерфейса от остальных реализаций SAPI:

  • В отличие от CGI-версии SAPI-интерфейса, заголовки не пишутся в поток вывода.

    Хотя в CGI-версии SAPI-интерфейса предусмотрели способ подавления HTTP-заголовков, в CLI SAPI заголовки включить нельзя.

    CLI по умолчанию запускается в тихом режиме, тем не менее, ключи -q и --no-header сохранили для обратной совместимости, что разрешает запускать старые CGI-скрипты.

    Текущая директория не изменяется на рабочую директорию скрипта. Ключи -C и --no-chdir сохранили для обратной совместимости.

    Сообщения об ошибках выдаются в текстовом режиме — без HTML-форматирования.

  • Отдельные настройки файла php.ini переопределяются CLI SAPI, поскольку в них нет смысла при работе в командной строке:

    Переопределяемые директивы php.ini
    Директива Значение по умолчанию в CLI-версии SAPI-интерфейса Комментарий
    html_errors false Значение по умолчанию равно false, поскольку трудно читать в консоли сообщения об ошибке, когда их наполнили бессмысленными HTML-тегами.
    implicit_flush true Обычно в консоли желательно отображать вывод, например, из функции print, языковой конструкции echo и других, сразу же минуя буфер. Тем не менее, по-прежнему разрешается использовать буферизацию вывода для отложенного вывода или манипуляций с ним.
    max_execution_time 0 (без ограничений) PHP, который выполняют в консоли, часто используют для более широкого диапазона задач, чем обычные веб-скрипты. И поскольку иногда задачи выполняются долго, максимальное время выполнения не ограничивается.
    register_argc_argv true

    Установка этой опции в значение true означает, что скрипты запускаемые через CLI SAPI всегда имеют доступ к argc (количество аргументов, переданных приложению) и argv (массив текущих аргументов).

    При использовании CLI SAPI переменные $argc и $argv автоматически заполняются соответствующими значениями. Эти значения можно также найти в массиве $_SERVER, например: $_SERVER['argv'].

    output_buffering false

    Несмотря на то, что эта опция php.ini жёстко установлена в false, функции буферизации вывода всё ещё доступны.

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

Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top