Існує кілька режимів роботи інтерпретатора 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.