Що таке mod_php?


108

Проходячи підручник із Zend , я натрапив на таке твердження:

Зауважте, що параметри php_flag у .htaccess працюють лише у тому випадку, якщо ви використовуєте mod_php.

Хтось може пояснити, що це означає?

Відповіді:


158

mod_phpозначає PHP, як модуль Apache .

В основному, завантажуючись mod_phpяк модуль Apache, він дозволяє Apache інтерпретувати файли PHP (ті, що інтерпретуються mod_php) .


EDIT: Під час роботи з Apache є (принаймні) два способи запуску PHP:

  • Використання CGI : процес PHP запускається Apache, і саме той процес PHP інтерпретує код PHP - не сам Apache
  • Використання PHP в якості модуля Apache (називається mod_php) : тоді інтерпретатор PHP "вбудовується" всередину процесу Apache: немає зовнішнього процесу PHP - це означає, що Apache та PHP можуть краще спілкуватися .


І відредагуйте після коментаря : використовуйте CGI або mod_phpвирішувати вам: це лише питання конфігурації вашого веб-сервера.

Щоб знати, який спосіб використовується зараз на вашому сервері, ви можете перевірити вихід phpinfo(): має бути щось, що вказує, чи працює PHP через mod_php (або mod_php5) або через CGI.

Ви також можете поглянути на php_sapi_name()функцію: вона повертає тип інтерфейсу між веб-сервером та PHP .


Якщо ви перевіряєте файли конфігурації свого Apache, під час їх використання mod_phpмає бути такий LoadModuleрядок:

LoadModule php5_module        modules/libphp5.so

(Назва файлу праворуч може бути різною - наприклад, у Windows це повинно бути a .dll)


Я використовував xampp для встановлення пакету php, apache та mysql ... Отже, що буде моїм налаштуванням?
SpikETidE

Ви повинні ввімкнути його, якщо PHP наразі не працює. Якщо PHP вже працює, тоді він повинен використовувати CGI, і в цьому випадку вам, мабуть, доведеться зробити більше, ніж просто включити модуль. Модуль може навіть не існувати в системі.
d11wtq

1
Так..!. Коли я запускаю phpinfo (), я бачу, що mod_php5 включений у розділ "Завантажені модулі" .... А це означає, що я запускаю його як модуль apache ... правда?
SpikETidE

3
mod_phpна сьогоднішній день є найбільш поширеною конфігурацією.
troelskn

@Pascal, я б сказав, що mod_phpце не справжній PHP; це просто Апачевий аддон. А точніше, я думаю, вам слід почати відповідь із визначення того, що саме означає PHP?
Печер'є

58

Ця відповідь взята з TuxRadar :

Під час запуску PHP через ваш веб-сервер є два різних варіанти: запустити його за допомогою CGI SAPI PHP або запустити його як модуль для веб-сервера. У кожного є свої переваги, але загалом переважний модуль.

Запуск PHP як CGI означає, що ви в основному повідомте своєму веб-серверу розташування виконуваного файлу PHP, і сервер запускає цей виконуваний файл, надаючи йому сценарій, який ви викликали, кожного разу, коли ви відвідуєте сторінку. Це означає, що кожного разу, коли ви завантажуєте сторінку, PHP потрібно прочитати php.ini та встановити її параметри, їй потрібно завантажити всі її розширення, а потім потрібно розпочати роботу з розбору сценарію - багато повторюється робота.

Якщо ви запускаєте PHP як модуль, PHP буквально сидить всередині вашого веб-сервера - він запускається лише один раз, завантажує його настройки та розширення лише один раз, а також може зберігати інформацію протягом сеансів. Наприклад, прискорювачі PHP розраховують на те, що PHP зможе зберігати кешовані дані через запити, що неможливо за допомогою версії CGI.

Очевидною перевагою використання PHP в якості модуля є швидкість - ви побачите велике збільшення швидкості, якщо перетворите з CGI в модуль. Багато людей, особливо користувачі Windows, не усвідомлюють цього, і продовжують використовувати php.exe CGI SAPI, що шкода - модуль, як правило, у три-п’ять разів швидший.

Однак є одна ключова перевага використання версії CGI, і це те, що PHP читає свої параметри кожного разу при завантаженні сторінки. Якщо PHP працює як модуль, будь-які зміни, внесені у файл php.ini, не починаються, поки ви не перезапустите веб-сервер, що робить версію CGI бажаною, якщо ви протестуєте багато нових налаштувань і хочете побачити миттєві відповіді.


@JohannEchavarria, Якщо ви не додали багато шалених речей, перезапуск сервера займе лише кілька секунд. Для "нормальних" сучасних систем з SSD це менше 2 секунд.
Pacerier

12

Ваш сервер повинен мати встановлені модулі php, щоб він міг розбирати php-код.

Якщо ви перебуваєте на ubuntu, ви можете це легко зробити

sudo apt-get install apache2

sudo apt-get install php5

sudo apt-get install libapache2-mod-php5

sudo /etc/init.d/apache2 restart

Інакше ви можете компілювати apache за допомогою php: http://dan.drydog.com/apache2php.html

Визначення вашої ОС сервера допоможе іншим відповісти конкретніше.


5

Це означає, що вам потрібно встановити PHP як модуль в Apache, а не запускати його як сценарій CGI.


3

Просто слід додати до цих відповідей те, що mod_php - це найстаріший і найповільніший метод, доступний на сервері HTTPD для використання PHP. Це не рекомендується, якщо ви не використовуєте старі версії Apache HTTPD і PHP. php-fpm та proxy_cgi є кращими методами.


0

mod_php - інтерпретатор PHP.

Одним із важливих уловок mod_php є документ,

"mod_php не є безпечним для потоків, і змушує вас дотримуватися попередньої формати mpm (мультипроцес, без потоків), що є найбільш повільною конфігурацією"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.