Існує кілька режимів роботи інтерпретатора PHP на веб-сервері VDS, і питання вибору досить обговорюване. Кожен із варіантів має свої переваги та недоліки, які будуть розглянуті у цій статті.

Зміст

  1. PHP як модуль Apache (mod_php)
  2. PHP у режимі CGI
  3. SuPHP
  4. PHP у режимі FastCGI (mod_fastcgi)
  5. Як дізнатися про поточний режим 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

На зображенні наведено приклад значення Server API при PHP, що працює в режимі FastCGI.

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

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