Существует несколько режимов работы интерпретатора PHP на веб-сервере VDS, и вопрос выбора является достаточно обсуждаемым. Каждый из вариантов имеет свои преимущества и недостатки, которые будут рассмотрены далее в этой статье.
Содержание
- PHP как модуль Apache (mod_php)
- PHP в режиме CGI
- SuPHP
- PHP в режиме FastCGI (mod_fastcgi)
- Как узнать текущий режим PHP
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.
На изображении приведён пример значения Server API при работающем PHP в режиме FastCGI.
Способ 2. Функция php_sapi_name()
- Создаем на хостинге файл, например, test.php и добавляем в него следующий код:
<?php $sapi = php_sapi_name(); echo $sapi; ?>
- Сохраняем изменения, после чего открываем файл в браузере. В результате должна открыться страница на которой выведется название текущего режима PHP. На примере ниже показан вывод при FastCGI.