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

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

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

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

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

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

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

Ответы [ 2 ]

7 голосов
/ 13 августа 2011

Вызов скрипта 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 и тела страницы.

(только из памяти. Возможно, есть еще несколько ошибок).

1 голос
/ 13 августа 2011

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

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

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

...