Вызов PHP с виртуального / пользовательского " веб-сервера"

в принципе, я пытаюсь выяснить, как PHP можно вызвать с "веб-сервера".

Я прочитал документацию, но это не очень помогло.

насколько я могу судить, существует три способа вызова PHP:

  • через командную строку (например: php -f "/path/to/script.php")
  • через CGI(??) / через FastCGI (???)
  • через модуль веб-сервера (например: Apache)

Итак, начнем с CGI. Может, я просто слепой, но ... spec не упоминает, как на Земле веб-сервер передает данные (заголовки и обратные вызовы) к вещи, реализующей CGI. Ситуация еще хуже с FastCGI-сервера.

Далее, у нас есть серверные модули, которые я даже не знаю, что искать, так как все ведет в никуда.

2 ответов


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

setenv GATEWAY_INTERFACE="CGI/1.1"
setenv SCRIPT_FILENAME=/path/to/script.php
setenv QUERY_STRING="id=123&name=title&parm=333"
setenv REQUEST_METHOD="GET"
...

exec /usr/bin/php-cgi

большинство из них шаблонный. SCRIPT_FILENAME - это то, как вы передаете фактическое имя файла php интерпретатору PHP, а не как параметр exec. Решающее значение для PHP также имеет нестандартная переменная REDIRECT_STATUS=200.

для запроса GET вам нужны только переменные среды. Для запроса POST, вы просто передайте тело HTTP-запроса как stdin к исполняемому двоичному файлу php-cgi. Вернувшийся stdout - это ответ CGI, состоящий из неполного заголовка HTTP, \r\n\r\n и тела страницы.

(просто из памяти. Там может быть несколько подводных камней.)


FastCGI, вероятно, лучший вариант, так как он так мудро используется, это даст вам независимость языка (вы можете зайти в Ruby позже, например), и это хорошо документированы С много of примеры.

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

Я бы вообще не беспокоился о прямом CGI, FastCGI существует не просто так.