Sapi PHP теория основы

175
01 ноября 2018, 18:10

Всем привет! Изучая Nginx дошел до того, что есть SAPI, и что их несколько видов и бла,бла,бла. Вопрос: у нас есть сервер(демон, который ждёт, когда же к нему придет запрос) и есть механизм обработки (запрос/сервер -> пхп интерпретатор -> ответ/сервер)

Вопрос возник в том свете, что Апач в моих глазаг, это:

  1. Пришел запрос на 80й порт, его смотрит Апач.
  2. Увидев, что есть запрос, демон принимает его в работу, и тут же, использует свой модуль для обработки

Тогда как CGI/FastCGI/FPM ==> то же самое, только программа, которая на 80 порту другая, и php интерпретатор установлен как самостоятельное приложение, а не подпрограмма

Правильно ли, что SAPI, - это механизм, который определяет, как и куда сервер будет стучатся для обработки запроса, а так же куда и как вернуть эти данные обратно ?

Вопрос 2: как система понимает, что я запрос пришел через cli или mod_apache

Answer 1

Правильно ли, что SAPI, - это механизм, который определяет, как и куда сервер будет стучатся для обработки запроса, а так же куда и как вернуть эти данные обратно ?

Частично, если на пальцах то так:

[Клиент] <---> [WEB-Server] <----- SAPI ------> ([ZEND] <---> [PHP])

Тогда как ваши CGI/FastCGI/FPM как раз и являются SAPI.

Наглядно можно так:

[Apache] <----- CGI------> [PHP]

Вопрос 2: как система понимает, что я запрос пришел через cli или mod_apache

Обычно вы работаете только с одним SAPI.

Вы немного запутались. Что значит система? Нет никакой системы.

В общем плане: апачу надо обработать запрос, у него есть набор инструментов (SAPI), которыми он этот запрос может выполнить. Обычно вы берете один инструмент, который выгоден для вашей задачи, и всегда с ним работаете. Вы берете к примеру CGI, и говорите ZEND-y, вот мне нужен результат работы конкретного скрипта (апач уже знает какой нужен), верни мне результат, по стандарту CGI. Тогда ZEND говорит, а есть ли у меня информация, что такое стандарт CGI, смотрит в свой кармашек и видит, что есть (ибо все что вы назвали поддерживается в php из коробки и даже больше). Раз есть, то отправляем на работу интерпретатору php, он дает результат и zend по стандарту отправляет обратно.

В PHP проверить SAPI можно так: php_sapi_name().

READ ALSO
Как пользоваться этим куском кода? RedBeanPHP

Как пользоваться этим куском кода? RedBeanPHP

Как этим пользоваться? Что на что изменить? За что отвечает $oldAdapter, $oldToolBox и все переменные в этом коде, а так же на что их нужно заменять, проблема...

169
Long polling не работает

Long polling не работает

Решил добавить подобного рода соединения, как оказалось на примере он работает, а пример заключается в обновление файлаВ реальности при...

171
Почему поле пустое? yii2

Почему поле пустое? yii2

Поле var_dump($user); вывод:

158
Как в Laravel узнать какой table заденет команда php artisan migrate:rollback?

Как в Laravel узнать какой table заденет команда php artisan migrate:rollback?

Есть база данных, после команды php artisan migrate:rollback изменился не тот table который был нужен

168