What is SAPI and when would you use it?
I’ve been learning about error handling in PHP recently and came across the error_log() function. In the PHP manual, it talks about all the error log types and I understand all of them except for type 3 which states that the error message is sent directly to the SAPI logging handler. My question is what exactly is SAPI and when would you want to use it?
129k 108 108 gold badges 277 277 silver badges 259 259 bronze badges
asked Mar 30, 2012 at 17:50
1,188 1 1 gold badge 9 9 silver badges 17 17 bronze badges
6 Answers 6
SAPI stands for «Server API» (and API stands for «Application Programming Interface»). It is the mechanism that controls the interaction between the «outside world» and the PHP/Zend engine. So, you would always want to use it. In fact, you cannot avoid using it without a lot of effort since even CLI is considered a SAPI.
562 1 1 gold badge 5 5 silver badges 17 17 bronze badges
answered Mar 30, 2012 at 17:54
Ignacio Vazquez-Abrams Ignacio Vazquez-Abrams
779k 153 153 gold badges 1346 1346 silver badges 1364 1364 bronze badges
+0, Needs elaboration.
Oct 14, 2014 at 5:40
so how do you find out what your SAPI logger is on a running configuration neatly assembled by your package maintainer? (in order to make it log the messages you desperately want to see :).)
Aug 24, 2015 at 11:48
@n611x007: With a simple test script. If in doubt ask the system engineer who setup the system, verify the acceptance criteria for the configuration with her and then demand the test protocol of the current configuration revision for review. Then confirm the acceptance criteria from your end. No need to make things less straight forward.
Jun 4, 2022 at 13:48
SAPI ( Server Application Programming Interface ) also know as ISAPI ( Internet Server Application Programming Interface) for Microsoft, NSAPI (Netscape Server Application Programming Interface) for Netscape.
API meaning.
For web developer, you can think of API such as REST, SOAP. You call a link you get a data from server. It allows you interact with the web server.
SAPI is different with REST or SOAP, SAPI is API (contract) used for server.
For example: Common Gateway Interface is an SAPI. If a web server support CGI and another executable program implement it so web server can inteface and generate web pages dynamically.
Look the picture below:

mod_php implement an interface which apache and php can understand each other.
So what is SAPI exactly: It is a contract between Server (any kind of server) and the program. Just follow the contract and they don’t need to know other side details.
Что такое sapi
Замечание: Эти директивы не могут быть инициализированы другими значениями из конфигурационного файла php.ini или любого другого (в случае, если он указан). Это ограничение связано с тем, что значения применяются после обработки конфигурационных файлов. Тем не менее, эти значения могут быть изменены во время работы скрипта (хотя это не имеет особого смысла для всех них, например register_argc_argv).
Замечание: Рекомендуется установить опцию ignore_user_abort для скриптов, используемых из командной строки. За подробностями обращайтесь к функции ignore_user_abort() .
Пример #1 Пример, демонстрирующий разницу с CGI SAPI :
// Простейший тестовый скрипт под названием test.php
echo getcwd (), «\n» ;
?>?php
В случае, если используется CGI -версия, результат работы будет следующим:
$ pwd /tmp $ php -q another_directory/test.php /tmp/another_directory
Это наглядно демонстрирует, что PHP изменяет текущую директорию на директорию исполняемого скрипта.
Режимы запуска интерпретатора PHP (SAPI)
SAPI (Server Application Programming Interface) — программный интерфейс, который предназначен для встраивания интерпретатора PHP в другие приложения и отвечает за его работу (запуск, остановка, передача скриптов на исполнение, доступ к внешним данным). В частности, SAPI позволяет интерпретатору PHP работать в качестве части web-приложения (а по сути — как часть веб-сервера), получать конкретные запросы от программы-сервера и отдавать данные.
Существует несколько основных SAPI, определяющих способы запуска и использования PHP:
В качестве модуля к веб-серверу (например, для Apache модуль mod_php ). В этом случае интерпретатор PHP выполняется в окружении процесса веб-сервера. Веб-сервер управляет количеством запущенных процессов PHP и сообщает им какие скрипты требуется исполнить.
CGI SAPI. Использование CGI подразумевает запуск нового процесса для обработки каждого запроса. Для исполнения PHP скрипта веб-сервер запускает
./php-cgi /path/to/script.php
Сам принцип такого использования подразумевает, что интерпретатор PHP исполняет только один скрипт, после чего заканчивает свою работу. Затраты на запуск процесса интерпретатора и его инициализацию очень часто сопоставимы или даже превышают затраты на исполнение PHP скрипта. Для решения этой проблемы в CGI SAPI был введён режим FastCGI. В этом режиме PHP интерпретатор запускается как независимый сервер, обрабатывающий входящие запросы на исполнение PHP скриптов по протоколу FastCGI, что позволяет ему работать с любым веб-сервером, поддерживающим этот протокол.
FPM SAPI, известный как php-fpm — это другая реализация протокола FastCGI. Данная реализация решала ряд проблем, которые мешали использованию CGI/FastCGI SAPI. В частности, появилась возможность перезапуска пула интерпретаторов PHP без потери запросов, запуск нескольких пулов под разными пользователями, аварийный перезапуск интерпретаторов в случае проблем с ними и ещё несколько приятных дополнений. В дальнейшем был добавлен режим динамического управления числом запущенных процессов PHP (по принципу управления числом процессов в веб-сервере Apache).
В качестве скрипта командной строки (CLI SAPI), являющегося исполняемым файлом, который вызывается пользователем из командной строки; скрипт выполняется в окружении вызвавшего пользователя. В этом случае возможно использование PHP для создания клиентских GUI-приложений и решения административных задач в операционных системах UNIX, Linux, Microsoft Windows.
Начиная с версии PHP 5.4.0 в CLI SAPI появилась возможность запуска PHP как отдельного HTTP сервера. Однако этот режим предназначен исключительно для разработки, так как запускает только один процесс интерпретатора и выполняет все запросы исключительно последовательно.
Чтобы узнать версию SAPI достаточно выполнить код:
echo php_sapi_name();
- Коротко о CGI, FastCGI, PHP-FPM и mod_php
- Установка PHP как FastCGI под Apache (Windows 10)
- Vagrant. Начало работы. Часть 2 из 2
- Установка Nginx, MySQL и PHP на Ubuntu 18.04 LTS
- Установка Apache, MySQL и PHP на Ubuntu 18.04 LTS
- Магазин на Laravel 7, часть 2. Создание контроллера и шаблонов, добавление маршрутов
- Магазин на Laravel 7, часть 1. Создание таблиц БД, заполнение начальными данными
SAPI (сапи) — что это в программировании на PHP (web)
![]()
SAPI (Server Application Programming Interface ) — программный интерфейс позволяющий интерпретатору PHP (или чему-то другому) работать в качестве части web-приложения (а по сути — как часть веб-сервера), а именно:
- получать конкретные запросы от программы-сервера
- и отдавать данные клиенту (определяемые уже внутренней логикой, которую реализовал на программист).
Чуть проще: это некий программный модуль (реализующий соответствующий протокол/интерфейс — набор правил взаимодействия с окружением), который отвечает за связь php c «внешней средой» в рамках серверного компьютера. Этой средой прежде всего является программа-сервер, которая и получает запросы от пользователя (например, какой-то URL — адрес страницы сайта) (см. пример схемы работы LAMP).
Ещё проще: это способ взаимодействия между программой веб-сервером и php-интерпретатором.
Примеры/виды SAPI для PHP
- mod_php — модуль-веб сервера (например. Apache)
- CGI
- FAST CGI
- php-FMP — служба типа fpm