Что такое mod_php?

108

Просматривая учебник по Zend , я наткнулся на следующее утверждение:

Обратите внимание, что настройки php_flag в .htaccess работают, только если вы используете mod_php.

Может кто-нибудь объяснить, что это значит?

SpikETidE
источник

Ответы:

159

mod_phpозначает PHP как модуль Apache .

По сути, при загрузке mod_phpв качестве модуля Apache он позволяет Apache интерпретировать файлы PHP (они интерпретируются mod_php) .


РЕДАКТИРОВАТЬ: Есть (как минимум) два способа запустить PHP при работе с Apache:

  • Использование 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; это просто аддон Apache. Или, скорее, я думаю, вам следует начать ответ с определения того, что именно означает PHP?
Pacerier
58

Этот ответ взят из TuxRadar :

При запуске PHP через веб-сервер есть два различных варианта: запуск с использованием PHP CGI SAPI или запуск в качестве модуля для веб-сервера. У каждого из них есть свои преимущества, но в целом модуль предпочтительнее.

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

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

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

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

SpikETidE
источник
@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

Указание ОС вашего сервера поможет другим ответить более конкретно.

cdated
источник
5

Это означает, что вам необходимо установить PHP как модуль в Apache, а не запускать его как сценарий CGI.

Ондрей Слинтак
источник
3

Просто добавлю к этим ответам, что mod_php - это самый старый и самый медленный метод, доступный на сервере HTTPD для использования PHP. Не рекомендуется, если вы не используете старые версии Apache HTTPD и PHP. php-fpm и proxy_cgi - предпочтительные методы.

Теджас Сараде
источник
0

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

Из документации, одна важная уловка mod_php:

"mod_php не является потокобезопасным и заставляет вас придерживаться prefork mpm (многопроцессный, без потоков), что является самой медленной конфигурацией"

kta
источник