Подтвердить что ты не робот

Как PHP-интерфейс с Apache?

Я почти закончил писать HTTP/1.0-совместимый веб-сервер под Java (без коммерческого использования как такового, это просто для удовольствия), и в основном я хочу включить поддержку PHP. Я понимаю, что это совсем непростая задача, но я думаю, что это будет приятное достижение.

Итак, я хочу знать, как PHP точно взаимодействует с веб-сервером Apache (или любым другим веб-сервером), поэтому я могу учиться на нем и писать свою собственную PHP-оболочку. Это не обязательно должно быть mod_php, я не против писать обертку FastCGI, которая, насколько мне известно, также способна запускать PHP.

Я бы подумал, что все, что нужно PHP, - это вывод, который поступает на клиентский компьютер (чтобы он мог интерпретировать части PHP), полный HTTP-запрос от клиента (чтобы он мог извлекать переменные POST и т.д.), а клиентский хост имя. И тогда вы просто берете проанализированный PHP-код и записываете его в выходной поток. Вероятно, будет больше вещей, но по существу, как бы я думал, что это работает.

Из того, что я собрал до сих пор, apache2handler предоставляет API, который PHP использует для подключения к Apache. Я предполагаю, что это идея взглянуть на исходный код для apache2handler и php5apache2.dll или так, но прежде чем я это сделаю, я подумал, что сначала попрошу SO.

Если у кого-то есть дополнительная информация, опыт или какая-то спецификация, которая имеет отношение к этому, пожалуйста, дайте мне знать.

Спасибо заранее!

4b9b3361

Ответ 1

Есть 3 способа вызывать PHP из Apache:

1) в качестве модуля - это связано с связыванием php-интерпретатора с библиотекой крючков, опубликованной веб-сервером

2) CGI - веб-сервер запускает экземпляр интерпретатора для каждого запроса и передает параметры интерпретатору через stdin, командную строку и переменные среды, stdout отправляется клиенту, а stderr следует записывать в error_log

3) fastCGI - это устраняет накладные расходы при запуске нового процесса для каждого запроса - интерпретатор работает как демон

CGI является самым простым в реализации, но не масштабируется/не работает, модуль будет самым сложным на сегодняшний день. FastCGI почти так же быстро, как и модульный подход. CGI и fastCGI - это открытые, хорошо документированные API.

Существуют и другие способы достижения вашей цели - например, Quercus

С.

Ответ 2

Проще говоря, вот как это работает:

Apache обычно обслуживает файлы, выбирая файл и отправляя поток по HTTP-соединению. С PHP, однако, Apache извлекает файл, передает его в двоичный файл PHP и отправляет выходной поток из команды вниз по HTTP-соединению.

Ответ 3

В дополнение к файлу php, HTTP-запросу и имени хоста клиента есть некоторые другие элементы информации, которые обычно передаются PHP для установки некоторых других элементов $_SERVER superglobal. На странице связанной документации есть список того, что обычно задается.

Ответ 4

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

Короче говоря, ваш сервер должен настроить некоторые переменные среды, а затем вызвать cgi- script, который является только самой PHP скрипт.