SAPI
Упомянутый здесь режим работы PHP на самом деле относится к SAPI (интерфейс программирования серверных приложений, порт программирования серверных приложений). SAPI предоставляет интерфейс для связи PHP с внешним миром, и PHP использует этот интерфейс для взаимодействия с другими приложениями. Для различных сценариев приложений PHP также предоставляет множество различных SAPI, наиболее распространенными из которых являются: apache, apache2filter, apache2handler, cli, cgi, embed, fast-cgi, isapi и так далее.
php_sapi_name()
— Возвращает тип интерфейса между веб-сервером и PHP. Возможные возвращаемые значения включают aolserver, apache, apache2filter, apache2handler, caudium, cgi (до PHP 5.3), cgi-fcgi, cli, cli-server, Continuity, Embed, fpm-fcgi, isapi, litespeed, milter, nsapi, phttpd , pi3web, роксен, thttpd, смокинг
и веб-джеймы.
Многие реализации SAPI, встроенные в PHP, больше не поддерживаются или становятся несколько неосновными, и сообщество PHP в настоящее время рассматривает возможность удаления некоторых SAPI из кодовой базы. Сообщество считает, что многие функции, если они действительно не нужны или некоторые функции не являются почти очень общими, находятся в библиотеке PECL.
Далее будут описаны пять наиболее распространенных режимов работы.
режим командной строки
CLI (интерфейс командной строки), который является интерфейсом командной строки, PHP будет установлен по умолчанию. Через этот интерфейс вы можете взаимодействовать с PHP в среде оболочки. Введите в терминалеphp -v
, вы получите результат, аналогичный следующему рисунку (при условии установки PHP):
Благодаря наличию интерфейса командной строки мы можем запускать PHP-скрипты непосредственно из командной строки терминала, как при использовании оболочки и Python, не полагаясь на веб-сервер. Например, инструмент командной строки Artisan в среде Laravel на самом деле является PHP-скриптом, помогающим нам быстро создавать приложения Laravel.
Режим компьютерной графики
CGI (Common Gateway Interface, общий интерфейс шлюза) — важная интернет-технология, позволяющая клиенту запрашивать данные из веб-браузера в программе, выполняющейся на веб-сервере. CGI описывает стандарт передачи данных между серверами и обработчиками запросов.
Веб-сервер — это всего лишь распространитель контента. Например, Nginx, если клиент запрашивает/index.html
, то Nginx найдет файл в файловой системе и отправит его в браузер, где раздаются статические данные; если клиент сейчас запрашивает/index.php
, Согласно конфигурационному файлу, Nginx знает, что это не статический файл и для его обработки нужно обратиться к парсеру PHP, после чего он отдаст запрос парсеру PHP после простой обработки. Какие данные Nginx будет передавать парсеру PHP? Он должен быть указан в URL-адресе, а также в строке запроса, POST
Данные тоже должны быть там.Заголовок HTTP-запроса не может отсутствовать.Ну, CGI-это протокол, который указывает, какие данные должны быть переданы и в каком формате должны быть переданы в тыл для обработки запроса.
Принцип работы режима CGI: когда Nginx получает браузер/index.php
После этого запроса сначала будет создан процесс, соответствующий реализации протокола CGI, здесь php-cgi (парсер PHP). Далее php-cgi проанализирует файл php.ini, инициализирует среду выполнения, обработает запрос, вернет обработанный результат в формате, заданном CGI, и завершит процесс. Наконец, Nginx возвращает результат в браузер. Весь процесс представляет собойFork-And-Execute
модель. Когда количество пользовательских запросов очень велико, это будет сжимать много системных ресурсов, таких как память и ЦП.
время и т. д., что приводит к низкой производительности. Таким образом, при работе сервера в режиме CGI количество дочерних процессов CGI равно количеству запросов на подключение, и повторная загрузка дочерних процессов является основной причиной низкой производительности CGI.
Преимущество режима CGI в том, что он полностью независим от какого-либо сервера, просто выступая в роли посредника: предоставляя интерфейс к WEB-серверу и язык сценариев или полностью независимый язык программирования. Они подключены через протокол CGI для завершения передачи данных. Преимущество этого состоит в том, чтобы свести к минимуму связь между ними, делая их более независимыми и независимыми друг от друга.
Режим CGI уже является относительно старым режимом, и в последние годы он редко использовался.
Режим FastCGI
FastCGI (Fast Common Gateway Interface) — это протокол, позволяющий интерактивным программам взаимодействовать с веб-серверами. FastCGI — это расширенная версия более раннего Common Gateway Interface (CGI). FastCGI стремится уменьшить нагрузку на взаимодействие между веб-сервером и программами CGI, чтобы сервер мог обрабатывать больше запросов веб-страниц одновременно.
По определению FastCGI тоже протокол.Программа реализующая протокол FastCGI больше похожа на резидентную (долгоживущую) программу протокола CGI.Пока она активирована,может выполняться все время,а не каждый раз , Требуется время, чтобы раскошелиться один раз.
Принцип работы режима FastCGI: после запуска диспетчера процессов FastCGI он сначала анализирует файл php.ini, инициализирует среду выполнения, а затем запускает несколько демонов интерпретатора протокола CGI (вы можете видеть несколько php-cig или php-cgi). .exe) и ожидает соединения с веб-сервером; когда клиентский запрос поступает на веб-сервер, менеджер процессов FastCGI выберет и подключится к интерпретатору CGI, а веб-сервер отправит переменные среды CGI и стандартный ввод дочернему элементу FastCGI В процессе php-cgi; после того, как подпроцесс php-cgi завершает обработку, он возвращает стандартный вывод и информацию об ошибках в WEB-сервер; в этот момент дочерний процесс php-cgi закроет соединение, запрос будет обработан, а затем продолжит ждать и обработать следующий запрос на соединение от диспетчера процессов FastCGI.
В режиме FastCGI используется структура C/S, которая позволяет разделить веб-сервер и сервер анализа сценариев и одновременно запустить один или несколько демонов анализа сценариев на сервере анализа сценариев. Каждый раз, когда веб-сервер сталкивается с динамической программой, она может быть напрямую доставлена в процесс FastCGI для выполнения, а затем результат возвращается в браузер. Таким образом, веб-сервер может исключительно обрабатывать статические запросы или возвращать клиенту результаты сервера динамических сценариев, что значительно повышает производительность всей системы приложений.
Кроме того, в режиме CGI после изменения конфигурации php.ini php-cgi необходимо перезапустить процесс php-cgi, чтобы новая конфигурация php-ini вступила в силу, и не может перезапуститься плавно. В режиме FastCGI PHP-FPM может обеспечить плавный перезапуск после модификации php.ini, порождая новые подпроцессы.
PHP-FPM (PHP-FastCGI Process Manager) — менеджер процессов, реализующий протокол FastCGI на языке PHP, написан и реализован Андреем Нигматулиным, официально включен в состав PHP и интегрирован в ядро.
Преимущества режима FastCGI:
- С точки зрения стабильности, режим FastCGI запускает программы протокола CGI с независимым пулом процессов.Если один процесс умирает, система может легко отбросить его, а затем переназначить новые процессы для выполнения логики;
- С точки зрения безопасности режим FastCGI поддерживает распределенные вычисления. Программа FastCGI полностью независима от Сервера хоста, и программа FastCGI зависает, не затрагивая Сервер;
- С точки зрения производительности режим FastCGI отделяет обработку динамической логики от сервера, а обработка операций ввода-вывода с большой нагрузкой остается на хост-сервере, так что хост-сервер может полностью обрабатывать операции ввода-вывода.Для обычной динамической веб-страницы , логическая обработка может быть только небольшой частью, большая часть статична, например изображения.
Режим FastCGI в настоящее время является основным режимом работы веб-сервиса PHP, имеет эффективную и надежную работу и рекомендуется для использования всеми.
Модульный режим
PHP часто используется в паре с сервером Apache для формирования среды выполнения, совместимой с LAMP. Интеграция PHP в Apache в качестве подмодуля — это модульный режим.Общие конфигурации в Apache следующие:
LoadModule php5_module modules/mod_php5.so
Это используетLoadModule
команда, первым параметром этой команды является имя модуля, которое можно найти в исходном коде реализации модуля. Второй вариант — это путь, по которому находится модуль. Если вам нужно загрузить модуль во время работы сервера, вы можете отправить сигнал с помощьюHUP
илиAP_SIG_GRACEFUL
на сервер, как только этот сигнал будет получен, Apache перезагрузит модуль без перезапуска сервера. зарегистрировавшись на apache2ap_hook_post_config
крючок, в
Этот модуль запускается, когда Apache начинает принимать запросы на файлы PHP.
Например, когда клиент обращается к файлу PHP, Apache вызываетphp5_module
для разбора PHP-скриптов. Каждый раз, когда Apache получает запрос, он запускает процесс для подключения к PHP для выполнения запроса. В режиме модуля, иногда из-за того, что PHP скомпилирован в Apache как модуль, трудно найти проблему PHP или Apache, когда есть проблема.
В прошлом, с богатыми модулями и функциями, предприятия часто использовали Apache в качестве веб-сервера, поэтому комбинация PHP + Apache, работающая в модульном режиме, очень распространена. В последние годы, с появлением асинхронных, управляемых событиями, высокопроизводительных серверов Nginx, доля рынка быстро росла.Комбинация PHP + Nginx, работающая в режиме FastCGI, имеет лучшую производительность и, как правило, превосходит Apache.
ISAPI-режим
ISAPI (Internet Server Application Program Interface) — это набор API-интерфейсов для интернет-служб, предоставляемых Microsoft.Библиотека ISAPI DLL может находиться в памяти после активации по запросу пользователя, ожидания другого запроса от пользователя или в библиотеке DLL. Несколько функций обработки пользовательских запросов, кроме того, приложение ISAPI DLL и веб-сервер находятся в одном процессе, эффективность значительно выше, чем CGI. Из-за эксклюзивности Microsoft он может работать только в среде Windows.
Он используется реже и не будет здесь подробно описываться.
Вышеупомянутый контент организован из Интернета, см. статью: