Где CGI участвует в компиляции кода Zend Engine [duplicate]

Фреймы не заменяются новой «технологией». Современное состояние заключается в том, чтобы поместить весь контент в один и тот же документ и создать его с помощью CSS. Конечно, серверная часть может помочь вам в этом.

706
задан Avindra Goolcharan 10 August 2016 в 19:59
поделиться

12 ответов

CGI - это интерфейс, который сообщает веб-серверу, как передавать данные в приложение и из него. Более конкретно, он описывает, как информация запроса передается в переменных среды (например, тип запроса, удаленный IP-адрес), как тело запроса передается через стандартный ввод и как ответ передается через стандартный вывод. Подробнее см. Спецификацию CGI .

Чтобы использовать ваше изображение:

user (client) request for page ---> webserver ---[CGI]----> Server side Program ---> MySQL Server.

Большинство, если не все , веб-серверы могут быть сконфигурированы для выполнения программы как «CGI». Это означает, что веб-сервер после получения запроса пересылает данные в определенную программу, устанавливая некоторые переменные среды и сортируя параметры через стандартный ввод и стандартный вывод, чтобы программа могла знать, где и что искать.

Основное преимущество заключается в том, что вы можете запускать любой исполняемый код из Интернета, учитывая, что как веб-сервер, так и программа знают, как работает CGI. Вот почему вы можете писать веб-программы на C или Bash с помощью обычного веб-сервера с поддержкой CGI. Это означает, что большинство программных сред могут легко использовать стандартные входные данные, стандартные выходные данные и переменные среды.

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

Итак, отвечая на ваши вопросы:

Что такое CGI?

См. выше.

В чем дело с /cgi-bin/*.cgi? Что с этим? Я не знаю, для чего этот каталог cgi-bin на сервере. Я не знаю, почему у них есть расширения * .cgi.

Это традиционное место для cgi-программ, многие веб-серверы поставляются с этим каталогом, предварительно настроенным для выполнения всех двоичных файлов там как программы CGI. Расширение .cgi обозначает исполняемый файл, который, как ожидается, будет работать через CGI.

Почему Perl всегда мешает. CGI & amp; Perl (язык). Я также не знаю, что с этими двумя. Почти все время я слушаю эти два в комбинации «CGI и Perl». Эта книга - еще один отличный пример CGI-программирования с Perl. Почему бы не «Программирование CGI с помощью PHP / JSP / ASP». Я никогда не видел таких вещей.

Поскольку Perl является древним (старше PHP, JSP и ASP, которые все стали известны, когда CGI был уже старым, Perl существовал, когда CGI был новым) и стал справедливым известный тем, что является очень хорошим языком для обслуживания динамических веб-страниц через CGI. В настоящее время существуют другие альтернативы для запуска Perl в веб-сервере, главным образом mod_perl .

Программирование CGI в C меня очень смущает. в C ?? Шутки в сторону?? Я не знаю, что сказать. Я просто смущен. "В C"? Это меняет все. Программа должна быть скомпилирована и выполнена.Это полностью меняет мой взгляд на веб-программирование.Когда я компилирую? Как программа запускается (потому что это будет машинный код, поэтому он должен выполняться как независимый процесс) .Как он взаимодействует с веб-сервером? IPC? и взаимодействует со всеми серверами (в моем примере MATLAB & amp; MySQL) с помощью программирования сокетов? / g16]

Вы компилируете исполняемый файл один раз, веб-сервер выполняет программу и передает данные в запросе программе и выводит полученный ответ. CGI указывает, что один экземпляр программы будет запущен для каждого запроса.

Говорят, что CGI устарел, но его больше не используется. Это его последнее обновление?

CGI по-прежнему используется, когда производительность не является первостепенной, и требуется простое средство для выполнения кода. неэффективен по ранее указанным причинам, и есть более современные средства для выполнения любой программы в веб-среде. В настоящее время самым известным является FastCGI .

396
ответ дан Dylan Little 15 August 2018 в 21:41
поделиться
  • 1
    Более конкретно, он описывает, как информация запроса передается в переменных среды (например, тип запроса, удаленный IP-адрес), как передается тело запроса с помощью стандартного ввода и как ответ передается через стандартный вывод. Подробнее см. Спецификацию CGI ( hoohoo.ncsa.illinois.edu/cgi ). – daf 18 January 2010 в 22:23
  • 2
    Предполагая, что Server side Program в вашей фигуре - мой PHP-скрипт. Итак, я никогда не программировал CGI? Потому что я никогда не писал ничего, что попадало между webserver & amp; мой PHP-скрипт. Черт!! это убивает меня. – claws 18 January 2010 в 22:24
  • 3
    PHP по-прежнему сильно основан на протоколе CGI, большая часть контента $ _SERVER прямо из спецификации CGI. И "программирование CGI" всегда означало программу обработки запроса, а не реализацию самого протокола. Если вы объясните, что вы делаете с PHP, пионером веб-программирования эпохи 1993 года, он рассмотрит его как усовершенствованную (хотя возможно, небольшую) форму программирования CGI. – Michael Borgwardt 18 January 2010 в 22:36
  • 4
    @Michael: Но при запуске через mod_php не является CGI вообще (даже если он основан на нем). И я согласен с тем, что CGI ссылается как на протокол, так и на скрипты, выполняемые через него. – Vinko Vrsalovic 18 January 2010 в 22:42
  • 5
    @Vinko Vrsalovic: если CGI является интерфейсом для Perl, C или других языков для выполнения на веб-сервере, чем какой интерфейс используется PHP для запуска в Apache ???????? и PHP входит в спецификации CGI? – hardik 31 August 2011 в 06:41

Возможно, вам захочется узнать, что не является CGI, и ответ - это МОДУЛЬ для вашего веб-сервера (если я предполагаю, что вы запущен Apache). И это БОЛЬШОЕ РАЗМЕЩЕНИЕ, потому что CGI нуждается и внешняя программа, нить, что бы создать экземпляр сервера приложений PERL, PHP, C, где, когда вы запускаете в качестве МОДУЛЯ эту программу, является веб-сервером (apache) per se.

Из-за всего этого в игре много проблем с производительностью, безопасностью и переносимостью. Но хорошо знать, что не является CGI первым, чтобы понять, что это такое.

7
ответ дан denica 15 August 2018 в 21:41
поделиться

CGI - это механизм, посредством которого веб-сервер вызывает внешнюю программу для обработки запроса, причем переменные среды и стандартный ввод используются для подачи данных запроса в программу. Точный язык, на котором написана внешняя программа, не имеет значения, хотя проще писать программы CGI на некоторых языках по сравнению с другими.

Поскольку CGI-скрипты требуют прав на выполнение, httpd по умолчанию разрешает только CGI-программы в cgi-bin для запуска (возможно, в настоящее время ошибочных) целей безопасности.

Большинство скриптов PHP выполняются в процессе веб-сервера через mod_php. Это не CGI.

CGI медленный, так как программа (и связанный интерпретатор) должна быть запущена за запрос. Современные альтернативы - это встроенное исполнение, используемое mod_php и длительные процессы, используемые FastCGI. У данного языка может быть свой собственный способ реализации этих механизмов, поэтому обязательно обращайтесь к CGI.

11
ответ дан Ignacio Vazquez-Abrams 15 August 2018 в 21:41
поделиться
  • 1
    Привет! Я упомянул об этом ниже в своем ответе. – Nathan Osman 18 January 2010 в 22:35
  • 2
    @Ignacio Vazquez-Abrams: если CGI-интерфейс создает новый процесс, каждый раз, когда он получает запрос на CGI-ресурс, чем то, что представляет собой различие между CGI и mod_php ??????? это CGI и mod_php одинаковы ???? или возможно написать PHP-скрипты, которые выполняются под интерфейсом CGI не под mod_php ??? – hardik 31 August 2011 в 06:53
  • 3
    @Hardik: mod_php работает как часть HTTPd, который отвечает за свои собственные процессы. – Ignacio Vazquez-Abrams 31 August 2011 в 21:36
  • 4
    что это за «внешняя программа»? это интерпретатор, если я запускаю php с php-fpm? – slier 2 February 2015 в 17:33
  • 5
    @slier: Это произвольная программа, которая не является веб-сервером. – Ignacio Vazquez-Abrams 2 February 2015 в 17:34
  • 6

Посмотрите на CGI в Википедии. CGI является протоколом между веб-сервером и внешней программой или скриптом, который обрабатывает ввод и генерирует вывод, который отправляется в браузер.

CGI - это просто способ веб-сервер и программа для общения, не более того, не меньше. Здесь сервер управляет сетевым соединением и протоколом HTTP, и программа обрабатывает ввод и генерирует вывод, который отправляется в браузер. CGI-скрипт может быть в основном любой программой, которая может быть выполнена веб-сервером и следует протоколу CGI. Таким образом, программа CGI может быть реализована, например, на C. Однако это очень редко, так как C не очень хорошо подходит для задачи.

/cgi-bin/*.cgi - это просто путь, их сценарий CGI. Веб-сервер обычно настроен по умолчанию для получения CGI-скриптов с этого пути.

скрипт CGI может быть реализован также в PHP, но все PHP-программы не являются скриптами CGI. Если веб-сервер имеет встроенный PHP-интерпретатор (например, mod_php в Apache), тогда фаза CGI пропускается более эффективным прямым протоколом между веб-сервером и интерпретатором.

Независимо от того, был ли вы реализован сценарий CGI или нет, это зависит от как ваш скрипт выполняется веб-сервером.

12
ответ дан Juha Syrjälä 15 August 2018 в 21:41
поделиться

CGI - это программа (или веб-API), которую вы пишете, и сохраняете ее на веб-сервере. CGI - это файл.

Этот файл сидит и ждет на веб-сервере. Когда клиентский браузер отправляет запрос на веб-сервер для выполнения вашего файла CGI, веб-сервер запускает ваш файл CGI на сайте сервера. Входы для этой программы CGI, если таковые имеются, находятся в клиентском браузере. Выходы этой программы CGI отправляются в браузер.

Какой язык вы используете для написания программы CGI? Другие сообщения уже упоминают c, java, php, perl и т. Д.

5
ответ дан Loc Pham 15 August 2018 в 21:41
поделиться

CGI указан в RFC 3875 , хотя это более поздняя «официальная» кодификация исходного документа NCSA . В принципе, CGI определяет протокол для передачи данных о HTTP-запросе с веб-сервера в программу для обработки - любую программу на любом языке. В то время, когда спецификация была написана (1993), большинство веб-серверов содержали только статические страницы, «веб-приложения» были редкой и новой вещью, поэтому казалось естественным отделить их от «нормального» статического контента, например, в cgi-bin, кроме статического содержимого, и заканчивая их .cgi.

В это время здесь также не было выделенных «языков веб-программирования», таких как PHP, а C было доминирующим переносным программированием язык - так много людей написали свои сценарии CGI в C. Но Perl быстро оказался более подходящим для такого рода вещей, и CGI стал почти синонимом Perl на некоторое время. Затем появились Java Servlets, PHP и множество других и заняли большую часть доли рынка Perl.

16
ответ дан Michael Borgwardt 15 August 2018 в 21:41
поделиться
  • 1
    Почему PHP является «выделенным языком веб-программирования»? PHP - это общий язык назначения, а люди используют его для приложений пользовательского интерфейса. – Pacerier 25 June 2015 в 06:11
  • 2
    @Pacerier: он был разработан, чтобы быть языком программирования для создания веб-страниц, и именно это использует 99,9% его пользователей. Это даже в name . Утверждение чего-либо еще просто бессмысленно раскалывает волосы. Если вы используете его для приложений пользовательского интерфейса, научных вычислений или встроенного программирования, хорошо, будьте счастливы, никто не говорит, что вам не разрешают. – Michael Borgwardt 25 June 2015 в 07:36

Пример в реальной жизни: сложная база данных, которая должна отображаться на веб-сайте. Поскольку база данных была спроектирована где-то около 1986 года (!), Многие данные были упакованы по-разному, чтобы сэкономить место на диске.

По мере развития разработчики больше не могли решать сложные запросы данных только в SQL, например, потому что алгоритмы сортировки были необычными.

Существует три разумных решения:

  1. быстро и грязно: отправьте несертифицированные данные на PHP, отсортируйте их там. Очевидно, это очень дорогое решение, потому что это повторяется каждый раз, когда страница называется
  2. записывает плагин в механизм базы данных, но администратор не был готов разрешить использование внешнего кода на своем сервере, или
  3. вы можете обрабатывать данные в программе (C, Perl и т. д.) и выводить HTML. Сама программа входит в / cgi-bin и вызывается веб-сервером (например, Apache) напрямую, а не через PHP.

CGI запускает ваш скрипт в решении №3 и выводит эффект в браузер. У вас есть скорость скомпилированной программы, гибкость языка лучше, чем SQL, и нет необходимости писать плагины на SQL-сервер. (Опять же, это пример, специфичный для SQL и C)

6
ответ дан Michał Leon 15 August 2018 в 21:41
поделиться

Идея CGI заключается в том, что программа / сценарий (независимо от того, Perl или даже C) получает вход через STDIN (данные запроса) и выводит данные через STDOUT (echo, printf statements). Причина, по которой большинство скриптов php не квалифицируется, заключается в том, что они выполняются в модуле PHP Apache.

4
ответ дан Nathan Osman 15 August 2018 в 21:41
поделиться

CGI - это спецификация интерфейса между веб-сервером (HTTP-сервером) и исполняемой программой определенного типа, которая предназначена для обработки конкретного запроса.

В нем описывается, как определенные свойства этого запроса должны быть переданы среда этой программы и то, как программа должна сообщать ответ на сервер и как сервер должен «заполнить» ответ, чтобы сформировать правильный ответ на исходный HTTP-запрос.

Некоторое время CGI был проект IETF в Интернете и, как таковой, имел срок действия. Он истек без обновления, поэтому не было стандарта CGI. Теперь это информационный RFC, но, как таковой, общепринятая практика и сама по себе не является стандартом. rfc3875.txt , rfc3875.html

Программы, реализующие интерфейс CGI, могут быть записаны на любом языке, который запускается на целевой машине. Они должны иметь доступ к переменным среды и обычно стандартный вход , и они генерируют свой вывод на стандартном выходе .

Скомпилированный языки, такие как C, обычно использовались, как и языки сценариев, такие как perl, часто использующие библиотеки, чтобы облегчить доступ к среде CGI.

Одним из больших недостатков CGI является то, что для каждого запроса создается новая программа поэтому сохранение состояния между запросами может быть серьезной проблемой производительности. Состояние может быть обработано в файлах cookie или закодировано в URL-адресе, но если оно становится большим, оно должно храниться в другом месте и вводиться в ключ из кодированной информации URL-адреса или файла cookie. Каждый вызов CGI затем должен будет перезагрузить сохраненное состояние из хранилища где-нибудь.

По этой причине и для очень простого интерфейса к запросам и сеансам гораздо более популярны лучшие интегрированные среды между веб-серверами и приложениями , Среды, такие как современная реализация php с apache, намного лучше интегрируют целевой язык с веб-сервером и обеспечивают доступ к объектам запросов и сеансов, которые необходимы для эффективного обслуживания HTTP-запросов. Они предлагают гораздо более простой и богатый способ писать «программы» для обработки HTTP-запросов.

Будете ли вы писать сценарий CGI, скорее, зависит от интерпретации. Это, безусловно, сделало одно, но гораздо более обычным является запуск php в качестве модуля, где интерфейс между скриптом и сервером не является строго интерфейсом CGI.

39
ответ дан Pacerier 15 August 2018 в 21:41
поделиться
  • 1
    Беспокоить. Я начал писать это, когда не было других ответов, но получил вызов. Теперь это около # 8 в списке. У меня нет желания удалить его сейчас, я вернусь и удалю его позже. – CB Bailey 18 January 2010 в 23:02
  • 2
    Эй .. Пожалуйста, не удаляйте его. Это говорит о некоторых вещах более ясным образом. Я нашел это полезным. Может быть, некоторые другие также могут это найти. :) – claws 18 January 2010 в 23:08
  • 3
    Хорошо, я оставлю это немного. Вероятно, было бы хорошо, если бы кто-то интегрировал любые «лучшие» отрывки в один из более полных ответов. Тогда мы могли бы получить более окончательный ответ. – CB Bailey 18 January 2010 в 23:12

Что такое CGI?

Средство для веб-сервера для получения своих данных из программы (вместо, например, файла).

В чем дело с /cgi-bin/*.cgi?

Нет большой сделки. Это просто соглашение.

Я не знаю, для чего этот каталог cgi-bin на сервере. Я не знаю, почему у них есть расширения * .cgi.

Сервер должен знать, что делать с файлом (например, рассматривать его как программу для выполнения вместо того, чтобы просто служить вверх). Наличие расширения .html говорит ему использовать тип содержимого text / html. Имея расширение .cgi, он запускает его как программу.

Сохранение исполняемых файлов в отдельном каталоге дает некоторую дополнительную защиту от выполнения неправильных файлов и / или обслуживания CGI-программ в качестве исходных данных в случае, если сервер получает misconfigured.

Почему Perl всегда мешает.

Это не так. Perl был просто большим и популярным одновременно с CGI.

Я не использовал Perl CGI в течение многих лет. Я использовал mod_perl в течение долгого времени и склоняюсь к PSGI / Plack с FastCGI в эти дни.

Эта книга - еще один отличный пример программирования CGI с Perl. Почему бы не «Программирование CGI с помощью PHP / JSP / ASP».

CGI не очень эффективен. Лучшие методы для общения с программами из веб-серверов приходили примерно одновременно с PHP. JSP и ASP - это разные методы для общения с программами.

Программирование CGI в C меня очень смущает. в C ?? Серьезно ??

Это язык программирования, почему бы и нет?

Когда я компилирую?

  1. Запись кода
  2. Скомпилировать
  3. URL-адрес доступа
  4. Веб-сервер запускает программу

Как программа получает

Он не должен выполняться как независимый процесс (вы можете писать модули Apache в C (это значит, что это будет машинный код, поэтому он должен выполняться как независимый процесс). ), но вся концепция CGI заключается в том, что он запускает внешний процесс.

Как он взаимодействует с веб-сервером? IPC?

STDIN / STDOUT и переменные среды - как определено в спецификации CGI.

и сопряжение со всеми серверами (в моем примере MATLAB & amp; MySQL) с помощью программирования сокетов?

Использование любых методов, которые вам нравятся и которые поддерживаются.

Говорят, что CGI обесценивается. Его больше не используют. Это так?

CGI неэффективен, медленен и прост. Он редко используется, когда он используется, потому что он прост.

Какое значение имеет последнее обновление?

1.1

59
ответ дан Quentin 15 August 2018 в 21:41
поделиться
  • 1
    1. Напишите код 2. Скомпилируйте 3. URL доступа 4. Программа веб-сервера запускает программу. || Но , как знает веб-сервер , где вы помещаете скомпилированную исполняемую программу? Как он знает, какую исполняемую программу (в том числе все) запустить? – Pacerier 25 June 2015 в 06:03
  • 2
    @Pacerier - Точно так же, как он знает, какой статический файл отправить клиенту, если запрашивается статический файл. – Quentin 25 June 2015 в 07:02

CGI-скрипт - это консольная / оболочечная программа. В Windows, когда вы используете окно «Командная строка», вы запускаете консольные программы. Когда веб-сервер выполняет скрипт CGI, он предоставляет вход в программу console / shell с использованием переменных среды или «стандартного ввода». Стандартный ввод похож на ввод данных в программу console / shell; в случае скрипта CGI веб-сервер выполняет типизацию. Сценарий CGI записывает данные на «стандартный вывод», и этот вывод отправляется клиенту (веб-браузеру) в виде HTML-страницы. Стандартный вывод похож на вывод, который вы видите в программе console / shell, за исключением того, что веб-сервер читает его и отправляет.

CGI-скрипт может быть выполнен из браузера. URI обычно включает строку запроса, которая предоставляется сценарию CGI. Если метод «get», строка запроса предоставляется в CGI Script в переменной среды QUERY_STRING. Если метод «post», то строка запроса предоставляется в CGI Script с использованием стандартного ввода (CGI Script читает строку запроса из стандартного ввода).

Раннее использование скриптов CGI состояло в обработке форм , В начале HTML формы HTML обычно имели атрибут «действие» и кнопку, обозначенную как кнопка «отправить». Когда кнопка отправки нажата, URI, указанный в атрибуте «действие», будет отправлен на сервер с данными из формы, отправленной в виде строки запроса. Если «действие» указывает скрипт CGI, тогда будет выполнен сценарий CGI, а затем будет выведен HTML-страница.

RFC 3875 «Интерфейс общего шлюза (CGI)» частично определяет CGI с использованием C, как в говоря, что переменные среды "получают доступ к библиотечной подпрограмме C getenv () или переменной environ".

Если вы разрабатываете скрипт CGI с использованием C / C ++ и используете Microsoft Visual Studio для этого, тогда вы будете разрабатывать консольная программа.

5
ответ дан user34660 15 August 2018 в 21:41
поделиться

CGI по существу передает запрос на любой интерпретатор , настроенный с помощью веб-сервера. Это может быть Perl, Python, PHP, Ruby, C почти что угодно. Perl был наиболее распространенным в тот день, поэтому вы часто видите его в отношении CGI.

CGI не мертв. На самом деле большинство крупных хостинговых компаний используют PHP как CGI, а не mod_php, потому что он предлагает конфигурацию пользовательского уровня и некоторые другие вещи, в то время как он медленнее, чем mod_php. Ruby и Python также обычно запускаются как CGI. они имеют ключевое различие в том, что серверный модуль работает как часть реального серверного программного обеспечения - где, как и CGI, полностью за пределами сервера. Сервер просто использует модуль CGI для определения того, как передавать и получать данные внешнему интерпретатору.

11
ответ дан xwlee 15 August 2018 в 21:41
поделиться
  • 1
    Не вниз, но большинство веб-сайтов python я видел, где на mod_wsgi или mod_python. – ChristopheD 18 January 2010 в 22:28
  • 2
    Так большинство людей используют термин CGI-скрипт, но это не совсем то, что означает этот термин. – reinierpost 17 October 2016 в 09:43
  • 3
    Вы говорите интерпретатору, но C редко интерпретируются и компилируются такие программы, как C-скомпилированные программы, которые могут использоваться для CGI. – user34660 20 January 2017 в 23:12
Другие вопросы по тегам:

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