Режимы работы PHP

Существует несколько режимов работы интерпретатора PHP на веб-сервере VDS, и вопрос выбора является достаточно обсуждаемым. Каждый из вариантов имеет свои преимущества и недостатки, которые будут рассмотрены далее в этой статье.

PHP как модуль Apache (mod_php)

Для работы в данном режиме в настройках Apache подключается модуль mod_php, который затем интегрируется в каждый запущенный процесс веб-сервера. В большинстве случаев это самый удачный выбор. Небольшой сайт с небольшим кол-вом посещений будет работать быстрее любого другого варианта.

Преимущества:

  • Высокая скорость исполнения скриптов.
  • Возможность увеличения производительности за счет настройки кэширования.

Недостатки:

  • Нельзя настроить собственный php.ini для каждого сайта. Конфигурирование возможно только в глобальном php.ini и незначительное количество параметров можно перегрузить (переопределить) в htaccess.
  • Все скрипты исполняются от имени apache и, соответственно, имеют его уровень прав в системе, что из соображений безопасности не является надежным методом. Исключение - mod_ruid, при котором PHP работает как модуль, но при этом выполняет скрипты под разными пользователями.
  • Модуль загружается во все запущенные процессы веб-сервера независимо от того, какой тип данных был запрошен клиентом, что создает лишнюю нагрузку на ресурсы сервера.
  • Ошибки в скрипте могут повлечь за собой крах всего веб-сервера.
  • Если через скрипт есть возможность запуска сторонних приложений, то для того, чтобы узнать, какой именно пользователь выполнял запуск, придется потратить очень много сил и времени.
  • Есть проблемы с совместимостью некоторых модулей с многопоточным запуском Apache (MPM Worker).

PHP в режиме CGI

Если включен этот режим, то для исполнения PHP и других типов скриптов, для которых установлен CGI как обработчик, запускается интерпретатор php-cgi.

Этот вариант хорошо использовать, когда сайт преимущественно состоит из статического контента и иногда нужно обрабатывать PHP. Это позволит существенно сэкономить на потреблении ОЗУ за счёт того, что PHP-интерпретатор будет запускаться только при необходимости. С другой стороны, каждый PHP-скрипт будет выполняться дольше, так как каждый раз нужно будет загружать в ОЗУ интерпретатор PHP.

Преимущества:

  • Возможность запуска обработчика CGI от имени какого-либо существующего в системе пользователя. Для этого используется приложение suexec.
  • Возможность индивидуальной конфигурации PHP под нужды каждого пользователя.
  • Использование ОЗУ для запуска CGI начинается только при наличии явной необходимости.
  • Вероятность краха работы веб-сервера из-за скриптов сведена к минимуму за счет того, что PHP работает как отдельный процесс.
  • Можно запускать разные версии PHP для разных клиентов.

Недостатки:

  • Низкая производительность.
  • Есть ограничения в создании PHP-авторизации с использованием команды Header. Это связано с тем, что скрипту не передаются некоторые серверные переменные.

SuPHP

При использовании SuPHP, интерпретатор PHP так же запускается как модуль CGI.

Преимущества:

  • PHP-скрипты запускаются от имени их владельца, благодаря чему всегда можно просмотреть, какой пользователь запускал скрипт.
  • Любой скрипт, владельцем которого текущий пользователь не является, запущен не будет.
  • Файлы, загружаемые через сайт на сервер, будут иметь права пользователя, через которого производилась загрузка.

Недостатки:

  • Нагрузка на процессор немного больше, чем у CGI.
  • Отсутствует возможность использования функций кэширования (APC, XCache и т.п.).

PHP в режиме FastCGI (mod_fastcgi)

По своим свойствам FastCGI является золотой серединой между mod_php и CGI режимами. В нём исключены недостатки CGI и присутствуют его достоинства. При включенном FastCGI, в ОЗУ сервера располагается постоянно запущенный процесс-обработчик. Это избавляет от необходимости при каждом запросе запускать новый процесс, как в случае использования CGI. По быстродействию FastCGI аналогичен mod_php.

Также из достоинств можно отметить следующее:

  • Возможность увеличения производительности за счет настройки кэширования.
  • Исполнение скриптов происходит от имени пользователя-владельца.
  • Для снижения риска зависания в FastCGI введена переменная, которая определяет, сколько запросов обслужить до перезапуска интерпретатора.

Из недостатков имеются такие пункты:

  • Высокая нагрузка на ОЗУ из-за постоянно работающего процесса (php-cgi) независимо от наличия запросов. Но, в тоже время, она меньше, чем в случае с mod_php, так как выдача статического контента обходится без обращений к PHP-интерпретатору.

Как узнать текущий режим PHP?

Способ 1. Функция phpinfo()

  • Создаем на хостинге файл, например, test.php и добавляем в него следующий код:
<?php
phpinfo();
?>
  • Сохраняем изменения и открываем этот файл в браузере. В результате должна отобразиться страница с информацией о версии PHP и его параметрах, среди которых будет параметр Server API, значение которого и показывает текущий режим PHP.

Php-modes-1.jpg

На изображении приведён пример значения Server API при работающем PHP в режиме FastCGI.

Способ 2. Функция php_sapi_name()

  • Создаем на хостинге файл, например, test.php и добавляем в него следующий код:
<?php
$sapi = php_sapi_name();
echo $sapi;
?>
  • Сохраняем изменения, после чего открываем файл в браузере. В результате должна открыться страница на которой выведется название текущего режима PHP. На примере ниже показан вывод при FastCGI.

Php-modes-2.jpg