Cgi bin

Что такое CGI-программа.

      CGI-программа выполняется на Web-сервере в ответ на запрос, сделанный броузером. Сервер в этом случае является как бы посредником между броузером и CGI-программой — он передает программе запрос броузера и возвращает броузеру информацию, выданную программой. Например, программа может получить от броузера название некоторого товара, посмотреть в таблице цену этого товара и вернуть полученную цену пользователю (броузеру). Или программа может принять от пользователя некоторый текст комментария и переслать его в виде почтового сообщения создателю Web-узла. Для написания такой программы можно использовать почти любой язык программирования — CGI определяет только стандарт интерфейса между Web-сервером и программой, которую вы пишете.

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

        Запускаться из командной строки простым вводом ее имени. (Например, для выполнения Java-программы нужно запустить виртуальную машину Java, т.е. набрать в командной строке Java имя_программы, а это делает ее непригодной в качестве CGI-программы).

        Генерировать правильный заголовок типа данных, которые она возвращает (content type header).

      Программа может возвращать данные любого типа, например HTML-текст, рисунки в формате GIF, простой текст, документы Microsoft Word, аудиофайлы и пр. Заголовок типа возвращаемых данных сообщает броузеру о типе данных, для того чтобы обеспечить их правильную обработку. Если Web-сервер может запустить программу на выполнение и если программа возвращает правильные данные, она может быть использована в качестве CGI-программы.

Как работает CGI-программа.

      Сеанс HTTP (процесс передачи данных по протоколу HTTP) начинается с того, что клиент (обычно это Web-броузер) запрашивает некоторый ресурс у Web-сервера. Всякий ресурс однозначно определяется своим URL (uniform resource locator). Когда речь идет о простых статических Web-страницах, ресурс представляет собой файл, a URL — положение этого файла на сервере.

      Предположим, в нашем случае URL выглядит так:

      http://www.гсЗ.org/cgibook/index.html

      Этот URL соответствует файлу с именем index.html, расположенному в подкаталоге cgibook каталога Web-сервера. Если каталог Web-сервера — /home/httpd/htdocs, тогда URL указывает на следующий файл: /home/httpd/htdocs/cgibook/index.html.

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

      Если же URL указывает на CGI-программу, все обстоит немного сложнее. Давайте для примера рассмотрим следующий URL: http://www.гсЗ.org/cgi-bin/example.cgi

      В данном случае запрошенным ресурсом является программа с именем example.cgi. Что именно делает эта программа — не важно, важно то, что когда сервер видит, что затребована программа, он запускает ее на выполнение и передает возвращенные ей данные броузеру.

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

      1. Существует ли запрошенный файл?

      2. Действительно ли запрошенный файл является CGl-программой?

      3. Есть ли разрешение на выполнение этой программой?

      4. Выполнилась ли программой без ошибок?

      5. Соответствуют ли выходные данные программы запросу броузера?

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

Как выполняется запрос.

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

Обычно стандарт MIME ассоциируется с почтовыми сообщениями, но в случае с типом данных работает та же самая система, что и с типом данных, вложенных в сообщение электронной почты.

В табл. 7.1 перечислены типы данных, которые может возвращать CGl-программа.

Таблица 7.1

      Если программа возвращает текст HTML, она должна генерировать такой заголовок типа данных:

      Content-type:   text/html

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

      Значительная часть информации, передаваемой при сеансе HTTP, видна пользователю. Например, запрашиваемый URL или данные, введенные в таблицу, непосредственно видны на экране броузера. Текст HTML, возвращенный сервером, также выводится на экран. Однако, помимо такой информации, в обмене участвует много данных, напрямую пользователю невидимых. Эти данные нужны серверу и броузеру для решения своих внутренних проблем.

Как данные передаются CGI-программе.

      В самом общем случае данные передаются от броузера серверу с помощью HTML-форм, но существуют и другие способы для этого. Перед тем как передавать данные серверу, эти данные должны быть специальным образом обработаны (из них должны быть исключены некоторые символы, имеющие специальное значение для сервера). Чаще всего для этого применяется техника, называемая URL-кодированием. Эта техника состоит в маскировании символов, которые могут вызвать проблемы. Например, знак «?» применяется для того, чтобы отделить в URL имя файла от строки запроса. Если же строка запроса сама по себе содержит символ «?», то это может ввести сервер в заблуждение, поэтому такие специальные символы в данных, передаваемых из форм, должны быть закодированы.

      Аналогичная проблема возникает со знаками пробела и знаками «+». Поскольку знак «+» используется вместо пробела в обычном потоке данных, в данных формы он также должен быть закодирован. В главе «6-й час. Обработка ввода» я расскажу подробно, как работает техника кодирования, и познакомлю вас с полезными библиотеками, которые облегчат вам эту работу.

Языки CGI-программирования.

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

Язык Perl

      Perl — это «дедушка» всех языков программирования, которые применяются в наши дни для написания CGI-программ. Он обладал набором приятных свойств еще в те времена, когда были созданы первые Web-серверы, поддерживающие технологию CGI. Не следует думать, что он дает программисту какие-то особые преимущества, просто это язык, применяемый для создания CGI-программ большинством разработчиков.

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

      Еще одно важное достоинство языка Perl — это то, что в сети Internet есть много CGI-программ, которые можно загрузить и использовать для своих нужд. Очень часто оказывается проще переделать чужую программу, чем заново писать собственную.

UNIX Shell

      Когда требуется быстро написать несложную программу, особенно если предполагается, что она будет взаимодействовать с программами среды UNIX, очень часто это делают на языке сценариев, или, как его называют, на языке оболочки, или просто на языке Shell. Особенно часто к этому языку прибегают системные администраторы, так как для них Shell — практически язык «повседневного общения», кроме того, на Shell удобно обеспечивать интерфейс между программами.

      Например, если вам нужно написать программу, вычисляющую среднюю загрузку вашего Web-сервера (с помощью команды uptime), есть прямой смысл писать ее на языке Shell. Недостатком этого языка является то, что он предназначен все-таки для простых программ с несложной логикой. Для сложных программ существуют более развитые языки.

Язык С

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

Главное преимущество языка С — высокая эффективность скомпилированных программ. Выполнение такой программы занимает меньше времени, чем потребуется только для загрузки интерпретатора Perl.

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

      Интерпретирующие языки имеют некоторые преимущества перед языками компилирующего типа. Первое из них — это быстрота разработки программ. В интерпретирующих языках обычно есть операторы высокого уровня, предназначенные для выполнения специальных задач. Например, в языке Perl есть высокоразвитые средства для работы с текстовыми файлами. Для написания программы, которая ищет в текстовом файле адрес электронной почты, понадобится написать гораздо больше операторов на языке С, чем на языке Perl.

      Второе преимущество — скорость отладки. При написании программы на компилирующем языке вам требуется компилировать программу каждый раз при внесении изменений, т.е. необходимо пробовать запустить программу и, если она не работает, необходимо внести изменения и перекомпилировать ее. При использовании интерпретирующего языка экономится время на этом этапе. Просто вносятся изменения и запускается программа еще раз.

      Третье преимущество — скорость обучения. Интерпретирующие языки осваивать проще и быстрее. Можно использовать те конструкции, которые уже знакомы, вместо того чтобы изучать философию языка, структуру его программ и типы его данных. Многие интерпретирующие языки позволяют наращивать сложность и эффективность программ по мере освоения, но вначале можно писать исключительно простые программы.

      Но, с другой стороны, существуют и недостатки таких языков или преимущества языков компилирующего типа. Первое из них — высокая эффективность. Интерпретирующий язык требует запуска интерпретатора и генерирования исполнимого кода перед выполнением программы (и делать это нужно перед каждым выполнением).

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

      Второе важное преимущество языков типа С состоит в их универсальности, или пригодности для написания любых программ. Большинство интерпретирующих языков имеют некоторую специализацию, т.е. предназначены для решения какого-то класса задач. Про такие языки говорят, что они проблемно-ориентированные. Хотя и существуют интерпретирующие языки общего назначения, ни один из них не обладает той мощью и гибкостью, которые присущи языку С. Несмотря на то что часто средств интерпретирующего языка бывает достаточно для решения стоящей задачи, иногда единственным решением оказывается использование универсального языка С.

Visual Basic

      Язык Visual Basic чрезвычайно широко применяется для написания приложений типа клиент/сервер. Компания Microsoft утверждает, что на Visual Basic работает больше программистов, чем на любом другом языке. Однако, несмотря на это, Visual Basic не очень удобен для написания CGI-программ.

      Сервер компании Microsoft поддерживает технологию Active Server Pages (ASP), которая позволяет вставлять логику программы непосредственно в текст Web-страницы. Эта технология предусматривает использование языка VBScript, который можно назвать упрошенной версией Visual Basic. Кроме того, можно писать на языке Visual Basic СОМ-объекты и обращаться к ним со страниц ASP.

Язык Python

      Python — это объектно-ориентированный интерпретирующий язык, реализованный на большей части современных операционных систем. Как и Perl, Python, будучи языком общего назначения, пригоден для многих задач, в том числе и для CGI-программирования. Его поклонники особенно ценят возможность написания легко читаемых программ на языке, близком к человеческому. Он сочетает в себе многие преимущества интерпретирующих языков, такие как удобство разработки программ, с развитой логикой и структурой программ, которые свой¬ственны языкам компилирующего типа. Одной из ярких, но и противоречивых черт языка Python является использование пробелов в качестве разделителей блоков программы. Другими словами, для того чтобы программа работала правильно, ее текст должен быть отформатирован в манере, близкой к человеческой.

Java

      Когда речь заходит о CGI-программировании, приверженцы языка Java оказываются в той же лодке, что и любители Visual Basic. Программы на Java выполняются с помощью виртуальной машины Java, поэтому они не могут быть запущены непосредственно Web-сервером. Выход существует — можно написать вспомогательную CGl-программу на другом языке, которая будет запускать виртуальную машину, выполняющую программу на Java.

      Однако для программистов на Java, как и для приверженцев Visual Basic, существует альтернативный путь. Можно создавать Web-приложения с помощью Java-сервлетов. (Слово servlet происходит от слова server, как и слово applet от application; если аплет — это небольшое вспомогательное приложение, то сервлет — это маленький вспомогательный сервер, или, если угодно, серверок. При поступлении запроса на выполнение сервлет запускает Java-программу и передает ее результат клиенту. Кроме того, существует много серверов приложений, использующих Java в качестве языка программирования. Любой из этих путей все же лучше, чем написание CGI-программ на языке Java.

G’day,

Веб-сервер, например. Apache, просто отправляет обратно статический контент, является ответом на запрос клиента на контент. Например, запрос http://www.myserver.com/index.html обычно заставляет сервер открывать файл и возвращать содержимое файла, связанного с соответствующими http-компонентами.

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

Каталог cgi-bin обычно используется для размещения сценариев.

Хотя он в значительной степени сосредоточен на Perl Книга » Программирование CGI с Perl» имеет отличное введение в CGI.

Изменить: Как указано в комментариях ниже, «если PHP может позаботиться о динамическом контенте, то какова потребность в CGI». Здесь несколько пунктов.

  • из коробки, PHP может быть довольно медленным.

    CGI, особенно в виде mod_perl или при использовании приложения, встроенного в скомпилированные языки,

  • PHP не имеет очень сильной обработки ошибок, но это можно обойти,
  • Я не думаю, что там есть реальная поддержка ASP, приложения Windows или DB, и
  • Безопасность PHP немного беспокоит, например. с включенными register_globals, и недостатки PHP очень хорошо известны.

Конструкция самого языка PHP также содержит много несоответствий, например.

  • довольно бесполезная объектная модель,
  • показывается довольно плохо,
  • непоследовательное именование и
  • неудовлетворительная организация стандартной библиотеки.

Я считаю, что PHP5 значительно улучшает эти моменты.

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

НТН

веселит,

ответ дан Rob Wells 02 янв. '10 в 5:43

источникподелиться

 

Работа с базами данных

Основные принципы работы с базами данных на Perl описаны Брайаном Уилсоном (e-mail: brian.wilson@netscapeworld.com) (см. «Мир ПК», № 11/97, с. 52). Если невозможно найти печатный вариант издания, то можно найти нужную статью на Web-сервере www.pcworld.ru.

CGI-программирование

CGI (Common Gateway Interface) — спецификация программ, которые пользователь может выполнять на Web-сервере. В этом случае устройством ввода-вывода считается программа просмотра гипертекстовых страниц или браузер. CGI представляет собой стандарт взаимодействия Web-сервера с прикладными программами.

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

В журнале «Мир ПК», № 8/97, с. 88 была опубликована статья А. и Г. Фроловых «Активный сервер Web: расширения CGI». Поскольку ее авторы в основном специализируются на программировании в Си/Си++, их работа также была ориентирована на разработчиков, использующих именно эти средства в сочетании с MS IIS (Microsoft Internet Information Server).

Рассмотрим ниже аналогичные возможности при программировании на Perl. Ниже будет показано, как реализовать диалог с посетителем Web-страницы или Web-узла, чтобы собирать различную информацию. Будут рассмотрены вопросы создания Perl-программ типа гостевой книги (рис.

1), списка рассылки новостей и простейшей системы идентификации посетителя.

Можно загрузить из Internet практически любые необходимые Perl-программы. Вот несколько узлов, на которых есть ПО на любой вкус: www.freescripts.com, www.scripts.ru, www.basicnet.sonnet.ru/download.

Как же работает механизм взаимодействия клиента с сервером, а конкретнее — с CGI-программой? Из приведенной на рис. 1 схемы видно, что пользователь сначала заполняет форму и подтверждает введенную им информацию нажатием соответствующей кнопки. Затем эти сведения из формы передаются на сервер.

HTML-код нашей формы гостевой книги выглядит следующим образом (листинг 5):

Листинг 5. Исходный текст HTML-формы <FORM METHOD=”POST” ACTION=”/cgi-bin/guestbook.cgi”> <BLOCKQUOTE> <TABLE BORDER=”0” CELLPADDING=”0” CELLSPACING=”0”> <TR> <TD COLSPAN=”2”>ГОСТЕВАЯ КНИГА<BR> <BR> </TD> </TR> <TR> <TD>Ваше имя: </TD> <TD><INPUT TYPE=”text” NAME=”signer” SIZE=”40”></TD> </TR> <TR> <TD>E-Mail: </TD> <TD><INPUT TYPE=”text” NAME=”email” SIZE=”40”></TD> </TR> <TR> <TD>Город: </TD> <TD><INPUT TYPE=”text” NAME=”city” SIZE=”20”></TD> </TR> <TR> <TD>Home Page URL: </TD> <TD> <INPUT TYPE=”text” NAME=”url” SIZE=”40” VALUE=”http://”></TD> </TR> <TR> <TD COLSPAN=”2”>Комментарии:<BR> <TEXTAREA NAME=”comments” COLS=”40” ROWS=”4”> </TEXTAREA><BR> <INPUT TYPE=”submit” VALUE=”PostIt!”></TD> </TR> </TABLE> </BLOCKQUOTE> </FORM>

Из всех тегов, присутствующих здесь, непосредственно к форме относятся только <FORM>, <INPUT>, <TEXTAREA> и </FORM>.

<FORM>

При создании HTML-форм используется пара тегов <FORM></FORM>. Чтобы послать информацию на сервер (запустить на нем CGI-программу, которая обработает введенные данные), к тегу

к оглавлению

Спецификация CGI

CGI определяет 4 информационных потока.

  1. Переменные окружения
  2. Стандартный входной поток
  3. Стандартный выходной поток
  4. Командная строка

Рисунок 4-2. CGI-интерфейс.

Переменные окружения

Переменные окружения условно делятся на два типа:

  • общие для всех типов запросов (устанавливаются для всех типов)
  • зависящие от метода запроса

К переменным первого типа относятся следующие переменные:

SERVER_SOFTWARE содержит информацию о WWW сервере (название/версия)

SERVER_NAME содержит информацию об имени машины, на которой запущен WWW сервер, символическое имя или IP адрес соответствующие URL.

GATEWAY_INERFACE содержит информацию о версии CGI(CGI/версия)

Следующие переменные являются специфичными для разных типов запросов и значения этим переменным присваиваются перед вызовом cgi-модуля.

CONTENT_LENGTH значение этой переменной соответствует длине стандартного входного потока в символах.

CONTENT_TYPE эта переменная специфицирована для запросов содержащих дополнительную информацию, таких как HTTP POST и PUT, и содержит тип данных этой информации.

SERVER_PROTOCOL эта переменная содержит информацию об имени и версии информационного протокола (протокол/версия).

SERVER_PORT значение переменной содержит номер порта, на который был послан запрос.

REQUEST_METHOD метод запроса, который был использован "POST","GET","HEAD" и т.д.

PATH_INFO значение переменной содержит полученный от клиента виртуальный путь до cgi-модуля

PATH_TRANSLATED значение переменной содержит физический путь до cgi-модуля, преобразованный из значения PATH_INFO.

SCRIPT_NAME виртуальный путь к исполняемому модулю, используемый для получения URL.

QUERY_STRING значение этой переменной соответствует строке символов следующей за знаком "?" в URL соответствующему данному запросу. Эта информация не декодируется сервером.

REMOTE_HOST содержит символическое имя удаленной машины, с которой был произведен запрос. В случае отсутствия данной информации сервер присваивает пустое значение и устанавливает переменную REMOTE_ADDRESS.

REMOTE_ADDRESSсодержит IP адрес клиента

AUTH_TYPE если WWW-сервер поддерживает аутентификацию (подтверждение подлинности) пользователей и cgi-модуль является защищенным от постороннего доступа то, значение переменной специфицирует метод аутотентификации.

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

REMOTE_IDENT содержит имя пользователя, полученное от сервера (если сервер поддерживает аутентификацию согласно RFC 931)

HTTP_ACCEPT список типов MIME известных клиенту. Каждый тип в списке должен быть отделен запятой согласно спецификации HTTP (тип/подтип,тип/подтип и т.д.)

HTTP_USER_AGENT название программы просмотра которую использует клиент при посылке запроса.

Стандартный вывод

СGI — модуль выводит информацию в стандартный выходной поток. Этот вывод может представлять собой или документ, сгенерированный cgi-модулем, или инструкцию серверу, где получить необходимый документ. Обычно cgi-модуль производит свой вывод. Преимущество такого подхода в том, что cgi-модуль не должен формировать полный HTTP заголовок на каждый запрос.

Заголовок выходного потока
В некоторых случаях необходимо избегать обработки сервером вывода cgi-модуля, и посылать клиенту данные без изменений. Для отличия таких cgi-модулей, CGI требует, чтобы их имена начинались на nph-. В этом случае формирование синтаксически правильного ответа клиенту cgi-модуль берет на себя.

Заголовки с синтаксическим разбором
Вывод cgi-модуля должен начинаться с заголовка содержащего определенные строки и завершаться двумя символами CR(0x10).

Любые строки не являющиеся директивами сервера, посылаются непосредственно клиенту. На данный момент, CGI спецификация определяет три директивы сервера:

Content-type
MIME или тип возвращаемого документа

Например: Content-type: text/html <CR><CR> сообщает серверу, что следующие за этим сообщением данные — есть документ в формате HTML

Location
указывает серверу, что возвращается не сам документ, а ссылка на него

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

Например: Location: http://host/file.txt приведет к тому, что WWW сервер выдаст file.txt, как если бы он был затребован клиентом. Если cgi-модуль возвращает ссылки на gopher сервер, например на gopher://gopher.ncsa.uiuc.edu/. Вывод будет следующий:

Location: gopher://gopher.ncsa.uiuc.edu/

*Status
задает серверу HTTP/1.0 строку-статус, которая будет послана клиенту в формате: nnn xxxxx

где: nnn — 3-х цифровой код статуса

ххххх — строка причины

Например: HTTP/1.0 200 OK

Server: NCSA/1.0a6

Content-type: text/plain

<динамически генерируемый текст сообщения>

В данном случае, клиенту будет сообщено об успешном выполнении запроса.

Стандартный входной поток

В случае метода запроса POST данные передаются как содержимое HTTP запроса.

И будут посланы в стандартный входной поток.

Данные передаются cgi-модулю в следующей форме:

name=value&name1=value1&…&nameN=valueN
где name — имя переменной,
value — значение переменной,
N — количество переменных

На файловый дескриптор стандартного потока ввода посылается CONTENT_LENGTH байт. Так же сервер передает cgi-модулю CONTENT_TYPE (тип данных). Сервер не посылает символ конца файла после передачи CONTENT_LENGTH байт данных или после того, как cgi-модуль их прочитает. Переменные окружения CONTENT_LENGTH и CONTENT_TYPE устанавливаются в тот момент, когда сервер выполняет cgi-модуль. Таким образом, если в результате исполнения формы с аргументом тега FORM — METHOD="POST" сформирована строка данных firm=МММ&price=100023, то сервер установит значение CONTENT_LENGTH равным 21 и CONTENT_TYPE в application/x-www-form-urlencoded, а в стандартный поток ввода посылается блок данных.

В случае метода GET, строка данных передается как часть URL.
Т.е. например
http://host/cgi-bin/script?name1=value1&name2=value2

В этом случае переменная окружения QUERY_STRING принимает значение
name1=value1&name2=value2

4.2.4 Аргументы командной строки

СGI-модуль в командной строке от сервера получает:

  • остаток URL после имени cgi-модуля в качестве первого параметра (первый параметр будет пуст, если присутствовало только имя cgi-модуля), и
  • список ключевых слов в качестве остатка командной строки для скрипта поиска, или
  • чередующиеся имена полей формы с добавленным знаком равенства и соответствующих значений переменных.

Ключевые слова, имена и значения полей формы передаются декодированными (из HTTP URL формата кодирования) и перекодированными в соответствии с правилами кодирования Bourne shell так, что cgi-модуль в командной строке получит информацию без необходимости осуществлять дополнительные преобразования.

к оглавлению

Знаете ли Вы, что в 1974 — 1980 годах профессор Стефан Маринов из г. Грац, Австрия, проделал серию экспериментов, в которых показал, что Земля движется по отношению к некоторой космической системе отсчета со скоростью 360±30 км/с, которая явно имеет какой-то абсолютный статус. Естественно, ему не давали нигде выступать и он вынужден был начать выпуск своего научного журнала «Deutsche Physik», где объяснял открытое им явление. Подробнее читайте в FAQ по эфирной физике.
НОВОСТИ ФОРУМА
Рыцари теории эфира
 

Добавить комментарий

Закрыть меню