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