Как делает интерфейс 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 или так, но прежде чем я сделаю это, я думал, что спрошу ТАКИМ ОБРАЗОМ сначала.

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

Заранее спасибо!

20
задан Waleed Amjad 5 May 2010 в 10:35
поделиться

4 ответа

Существует 3 способа вызова PHP из Apache:

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

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

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

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

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

C.

27
ответ дан 30 November 2019 в 00:19
поделиться

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

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

5
ответ дан 30 November 2019 в 00:19
поделиться

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

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

1
ответ дан 30 November 2019 в 00:19
поделиться

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

1
ответ дан 30 November 2019 в 00:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: