Intereting Posts
Водяной знак в mPDF (PHP) работает неправильно Строковая переменная Javascript, содержащая PHP-код PHP – загрузить и перезаписать файл (или загрузить и переименовать его)? Почему 65.6 * 100% 10 равно 9, вместо 0 в PHP? Запуск PHP: невозможно загрузить динамическую библиотеку php5.4.3 / ext / php_ffmpeg.dll не является допустимым приложением Win32 Как зашифровать идентификатор сессии в cookie? Преобразуйте PNG в JPG и установите прозрачный фон в белый цвет с помощью ImageMagick и PHP Рефакторинг require_once-файла в проекте Неустранимая ошибка: Class 'Google_Auth_AssertionCredentials' не найден Regex для захвата только изображений JPG Apache, javascript и PhoneGap: Каков наилучший способ прослушать какое-то случайное событие? Интервал или длительный опрос? ckfinder php 2.6.2 просмотр настроек, отображение, сортировка не работает Как отобразить шрифт удивительный значок в форме symfony Проверка PHP между pthreads и curl Обновление долговременной стороны доступа к токен-серверу

Как 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.

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

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

Существует три способа, с помощью которых PHP можно вызывать из Apache:

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

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

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

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

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

C.

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

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

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

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

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