Что такое cgi скрипты

Perl и CGI-программы – особенности использования

Разработчики сайтов и администраторы нередко сталкиваются со скриптами CGI (микросценариями обработки текстовых данных). Они применяются при создании интерактивных страниц, содержание которых зависит от действий пользователя. Например, это могут быть формы регистрации или отправки комментариев. Также есть «невидимая» область применения – сбор и обработка информации о посетителях при помощи файлов cookies.

Что такое CGI и PERL

Важно понимать, что CGI – не язык программирования, а протокол передачи данных веб-серверу через stdin и их прием из stdout. В качестве обработчика команд используется любая программа с поддержкой функций потокового ввода-вывода. Например, написанная на языке Perl. Главное, что от скрипта требуется «умение» заполнять таблицы в базе данных и получать данные из них путем подачи запроса, чего никогда не сделать средствами HTML.

Что такое cgi скрипты. Смотреть фото Что такое cgi скрипты. Смотреть картинку Что такое cgi скрипты. Картинка про Что такое cgi скрипты. Фото Что такое cgi скрипты

Особенности применения языка Perl:

В качестве альтернативы Perl все чаще применяется язык программирования Python, но администраторы «старой закалки» продолжают придерживаться классики создания CGI-скриптов, так как поддержка Perl «по умолчанию» имеется в большинстве дистрибутивов Linux. Поэтому программы на нем начинают работать без предварительной подготовки сервера. Формально же скрипты можно писать на чем угодно – хоть на C/C++, Pascal, Java или Visual Basic.

Использование готовых скриптов

Если CGI-скрипт уже готов (используется стандартный модуль), перед использованием его нужно скопировать на сервер хостинга. Выполняется процедура при помощи файлового менеджера в панели управления или через FTP-доступ, например программой FileZilla. Выбор расположения остается на усмотрение пользователя; к программе можно обращаться независимо от имени каталога или подкаталога, но рекомендуется придерживаться определенных стандартов.

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

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

Написание простейшего CGI-скрипта

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

Что такое cgi скрипты. Смотреть фото Что такое cgi скрипты. Смотреть картинку Что такое cgi скрипты. Картинка про Что такое cgi скрипты. Фото Что такое cgi скрипты

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

При помощи специального виджета, установленного в CMS, или путем ручного редактирования шаблона в нужный участок HTML вставляется код:

В приведенном примере решена типовая ошибка новичков. Она заключается в отсутствии метки о типе выводимого результата (строка Content-type: text/html). После нее располагается пустая строка для указания, что следом идет непосредственно программный код.

Просмотр установленных модулей PERL

Проверить ранее подключенные PERL-модули можно командой vim. Перед ее вводом необходимо подключиться к серверу хостинга по защищенному каналу SSH. После авторизации нужно ввести в консоли:

В результате будет создан файл с указанным названием. Следующий шаг – открыть его в текстовом редакторе и изменить содержимое на следующий код:

Источник

Скрипты CGI

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

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

Почему Web-узлы используют CGI

Для создания динамических файлов HTML нет необходимости в применении CGI-скриптов. Однако без таких скриптов всякий раз, когда понадобится новая интерактивная динамическая страница Web, придется модифицировать программу-сервер. Спустя какое-то время программа-сервер может стать исключительно большой. Для того чтобы исключить такую модификацию сервера, разработчики используют CGI. Используя CGI-скрипты, сервер может переложить задачу создания линамических Web-документов на прикладную программу, созданную для этих специфических потребностей. Вы будете создавать вашу прикладную программу, используя C/C++, Perl, JavaScript, VBScript, или какой-либо другой язык программирования.

Программа-сервер должна вызвать CGI-скрипт

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

Броузер, сервер и CGI

Как известно, для получения броузером HTML-документов, он сначала устанавливает контакт с сервером, затем запрашивает документ ( обычно ваш броузер определяет GET-метод HTTP для получения информации от сервера ). Далее, если документ существует, сервер отвечает броузеру, посылая ему HTML-документ, и затем закрывает соединение. Применение CGI-скриптов вносит изменения в этот процесс только на стороне сервера. Броузер не знает, что сервер вызывает CGI-скрипт, и он не заботится о том, каким именно способом поступают к нему данные от сервера. Как Web-программист, при написании CGI-скриптов вы заботитесь только о входах и выходах сервера. Броузер будет устанавливать контакт с программой сервера, которая, в свою очередь, исполняет CGI-скрипт. Ваш скрипт, в свою очередь, выполняет необходимую обработку данных, чтобы сформатировать требуемый выход. Обычно ваш сервер передает выходные данные из скрипта в форме HTML-броузеру. Чтобы выполнить это, верверная программа добавляет необходимую заголовочную информацию к выходным данным, сформированным скриптом, и посылает эту заголовочную информацию вместе с данными обратно броузеру. Затем сервер закрывает соединение и ждет новых запросов.

Как вы, возможно, знаете, серверы, которые работают под 32-битными операционными системами, такими как Windows 95/98 или Windows NT, могут обрабатывать запросы от многих пользователей одновременно. Отсюда следуте, что несколько пользователей могут одновременно использовать скрипт. Поэтому каждый из них, в зависимости от запроса, будет видетьь свою картину ответа сервера.

Взаимосвязь сервера и CGI-скрипта

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

Как вы уже знаете, HTTP является протоколом, с помощью которого клиенты и серверы Web обеспечиваются информацией. Заголовочная HTTP информация помогает программам эффективно выполнять обмен данными. Поэтому необходимо уделить особое внимание заголовочной информации, которой сервер снабжает броузер. Например, когда программа-сервер готова послать данные броузеру, она посылает заголовки, описывающие статус данных, тип данных и т.д. В свою очередь броузер использует заголовок ( Content-type ) для подготовки к выводу данных на экран. Сервер отвечает за то, чтобы обеспечить этой метаинформацией броузер каждый раз, когда он посылает ему данные.

CGI т базы данных

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

Где находятся скрипты

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

Расширение имен файлов CGI-скриптов

Серверы HTTP для Windows-систем обычно для CGI-файлов используют расшерение EXE или PL. Например, если вы создаете CGI-программу ( скрипт ), используя язык программирования С, то расширение ваших файлов-скриптов будет, вероятно, ЕХЕ. Аналогично, если вы создаете скрипт с помощью языка Perl, расширение ваших файлов будет PL.

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

Основы взаимодействия между Web-сервером и CGI-скриптом

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

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

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

Переменная AUTH_TYPE

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

Переменная CONTENT_LENGTH

Скрипты используют переменную окружения CONTENT_LENGTH для того, чтобы определить точное число байт, содержащихся в просоединенных данных. Например, если запрос содержит документ длиной в 1,024 байта, то переменной окружения присваивается следующее значение:

Переменная CONTENT_TYPE

Переменная GATEWAY_INTERFACE

Скрипты используют эту переменную для того, чтобы определить версию, номер выпуска спецификации CGI, которой удовлетворяет Web-сервер. Формат номера выпуска спецификации следующий: CGI/номер выпуска. Например, для CGI выпуска 1.1 переменная окружения будет иметь следующий вид:

Переменная PATH_INFO

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

Путь записывается в относительной форме, где за базу берется корневой каталог сервера. Иными словами, корневой каталог сервера является базисом для относительного пути, который и присваивается переменной PATH_INFO. Например, если задан путь c:/cgi-bin/example1.exe/sports.html, то переменная окружения будет иметь следующий вид:

Переменная PATH_TRANSLATED

Скрипты используют эту переменную для получения окончательной, пригодной для непосредственного использования информации относительно пути. Сервер переводит информацию переменной путем выполнения необходимых преобразований пути. Например, если переменная PATH_TRANSLATED имеет значение /sports.html, а корневым дирикторием сервера служит c:\, то переменная окружения будет иметь следующее значение:

Переменная QUERY_STIRNG

Скрипты используют эту переменную для того, чтобы получить информацию в текстовой форме ( состоящую из аргументов ), которая следует справа от знака вопроса после URL, переданного от пользователя скрипту для обработки. Эта текстовая сторока содежит вход для скрипта. Далее сервер заменяет в данном тексте каждый пробел на знак » + «, а все непечатные символы знаком » %dd», где d является базой десятичной системы счисления.

Скрипт должен содержать код для расшифровки этой текстовой строки. Сервер, передавая эту информацию скрипту, не должен заниматься декодированием информации запроса каким-либо образом. Сервер должен также установить переменную QUERY_STRING в случае, если пользователь обеспечивает какую-то информацию запроса. Например, для URL http://www.jamsa.com/cgi-bin/grandma.exe?name=margaret+alarcon переменная окружения имеет значением следующую величину:

Переменная REMOTE_ADDR

Скрипты используют эту переменную для получения IP-адресса удаленного узла ( броузера ), который делает запрос. Например, значение переменной окружения может быть следующим:

Переменная REMOTE_HOST

Переменная REMOTE_IDENT

Переменная REMOTE_USER

Переменная REQUEST_METHOD

Используется для того, чтобы определить тип HTTP-запроса, который послан броузером серверу и служит для вызова скриптов. Эта переменная может принимать значения GET, HEAD или POST. Например, если броузер посылает GET-метод, то переменная окружения содержит следующее:

Переменная SCRIPT_NAME

Используется для того, чтобы определить виртуальный путь к скрипту, который будет запущен сервером. Например, если имеется URL http://www.jamsa.com/cgi-bin/someprog.exe, то переменная окружения примет следующее значение:

Переменная SERVER_NAME

Использутся для того, чтобы определитьимя домена ли IP-адрес комрьютера, на котором раположен Web-сервер. Например, когда сервер возвращает IP-адрес, переменная окружения будет иметь вид, подобный следующему:

Переменная SERVER_PORT

Используется для того, чтобы определить номер порта, который пользователь (броузер) использует для связи с Web-сервером. Если используется HTTP-порт по умолчанию, то эта величина равна 80. Если используется какой-то другой порт, например, http://www.jamsa.com:3000, то переменная принимает следующее значение:

Переменная SERVER_PROTOCOL

Используется для того, чтобы определить имя и номер выпуска протокола, используемогоклиентом (броузером) для того, чтобы послать запрос к Web-серверу. Анализируя содержание переменной, скрипт может идентифицировать имя и номер выпуска протокола, который он должен использовать при передаче данных серверу. Формат имени протокола и номера выпуска следующий: протокол/номер выпуска. Например, для HTTP 1.1 переменная окружения будет иметь следующий вид:

Переменная SERVER_SOFTWARE

Дополнительные переменные окружения

В дополнение к переменным окружения. обсуждавшимся ранее, сервер также помещает данные из заголовка запроса, полученного от клиента, в переменные окружения. Сервер присваивает значения переменным, чьи имена начинаются с префикса HTTP_, после которого идет имя заголовка. Сервер заменяет все символы переноса (-) в заголовке на (_). Сервер может также исключать любые заголовки, которые он уже обработал, используя переменные окружения, такие как AUTH_TYPE, CONTENT_TYPE и CONTENT_LENGTH.

Переменная HTTP_ACCEPT

Используется для того, чтобы определить, какие MIME-типы может принимать броузер. Они определены в HTTP-заголовках, которые броузер послал серверу. Как известно, MIME-тип задается в виде тип/расширение. Если имеется насколько MIME-типов, то они разделяются запятыми. Например, переменная окружения может принимать следующее значение:

Переменная HTTP_USER_AGENT

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

Опции командной строки CGI

Обычно CGI-скрипты используют командную строку в качестве входа для того, чтобы выполнить запрос ISINDEX, позволяющий добавить интерактивный поиск по ключевому слову к вашему HTML-документы. Однако не все серверные программы поддерживают ISINDEX-запрос. Броузер посылает запрос в виду командкной строки серверу. Программа сервера может идентифицировать входную командную строку, устанавливая, использовал ли броузер GET-метод HTTP и содержит ли строка URL символы uuencoded =.

Если броузер использует GET-метод HTTP и строка URL-поиска не содержит символы uuencoded =, то запрос осуществляется в форме командной строки. Перед тем как сервер вызовет соответствующий скрипт, серверная программа должна расщепить командную строку, используя знак (+), для отделения параметров. Затем сервер выполняет дополнительное декодирование ( если необходимо ) каждого параметра, переданного в URL-строке поиска, и хранит каждый параметр-строку в массиве, названную argv.

Дополнительное декодирование, выполняемое сервером, состоит в разделении отдельных строк, используя амперсанда (&) в качестве разделителя. Далее сервер расщепляет каждую из этих строк снова, используя знак (=) для того, чтобы отделить имя переменной, которое ставиться слева от знака (=), от значения переменной, которое стоит справа от (=). Сервер хранит число элементов, содержащихся в массиве argv, в переменной целого типа argс.

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

Стандартный ввод ( STDIN )

Когда броузер запрашивает сервер ( например, используя HTTP-метод POST ), информация, которую получает скрипт, приходит со стандартного дескриптора ввода stdin. Серверная программа посылает скрипту переменную окружения CONTENT_LENGTH. Эта переменная содержит число байт, которое сервер посылает скрипту через этот дескриптор. Скрипт может использовать значение переменной CONTENT_LENGTH для того, чтобы определить, сколько данных должно поступить со стандартного ввода. Сервер также снабжает скрипт переменной окружения CONTENT_TYPE, которая помогает скрипту определить, как обрабатывать получаемые данные. В конце этого потока данных сервер может послать ( а может и не посылать ) маркер конца файла. Однако именно скрипт обязан определить, какой объем данных читать, и использует он для этого переменную окружения CONTENT_LENGTH.

Например, если форму использует HTTP-метод POST (

Источник

Библиотека Интернет Индустрии I2R.ru

Малобюджетные сайты.

Продвижение веб-сайта.

Контент и авторское право.

Что такое CGI?

Е сли это программа, то она должна иметь любой приемлемый для конкретной операционной системы исполняемый формат. Программы можно писать на чем угодно: C/C++, Pascal, Java, Visual и просто Basic, delphi и т.д.

Е сли это скрипт (сценарий), то на операционной системе, под которой крутиться веб-сервер должен быть соответствующий интерпретатор сценариев: shell, perl, tcl/tk, command.com и т.д.

Механизм работы CGI программ

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

С огласно последним веяниям по соблюдению безопасности не рекомендуется использование shell для написания CGI скриптов.

1.1 Вызов CGI без параметров

П ростейший скрипт, выводящий текущую дату: #!/bin/sh echo Content-type: text/html echo echo «

Today is » date echo «

1.2 Передача параметров CGI скрипту или программе

П ри использовании GET параметры добавляются к запрашиваемому URL и его можно вызывать таким образом: http://какой-то_хост/cgi-bin/какой-то_скрипт?параметры что позволяет делать на такой скрипт ссылки в HTML документах. А на сервере переданные параметры присваиваются переменной QUERY_STRING.

Текст самого скрипта: #!/bin/sh echo Content-type: text/html echo echo «

Вы посылали вот это:

Н о применение метода GET для передачи параметров, содержащих конфиденциальную информацию недопустимо, т.к. в данном случае вся эта информация передается открыто.

М етод POST позволяет обеспечить конфиденциальность при передаче параметров скрипту. Но он передает параметры на стандартный поток ввода и для этого приходится использовать формы. Сервер не посылает скрипту EOF в конце передачи. Вместо этого вам придется использовать пременную окружения CONTENT_LENGTH, чтобы определить какой объем данных вам надо считать из stdin.

Пишем счетчик

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

Э та глава руководства будет скорее полезна тем, кому интересен именно механизм работы счетчиков, поскольку все прилагаемые примеры особыми «наворотами» по части настроек, администрения, и т.п. не обладают. Более «навороченые», готовые к эксплуатации счетчики ищите на Altavista, Yahoo и др. поисковых серверах. Или спрашивайте в соответствующих конференциях новостей (relcom.www.users, relcom.www.support; в фидошных эхах ru.internet.*).

2.1 Типы счетчиков


2.2 Cчетчик посещений работающий как SSI

В от тут будем считать :
(нажимайте Reload пока не надоест)

Э тот счетчик текстовый, т.е. скрипт возвращает просто текст, который и показывается. Аналогичным образом можно выводить и картинки. Для этого нужно, чтоб вместо текстовых цифр выводились тэги img src=»http://www.i2r.ru/static/260/%D0%BA%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%BA%D0%B0_%D1%81_%D1%81%D0%BE%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%81%D0%B2%D1%83%D1%8E%D1%89%D0%B5%D0%B9_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B9″. Пытливый читатель легко догадается, что количество тегов img src. равно количеству цифр в значении возвращаемом счетчиком.

В ызов этого счетчика в теле документа осуществляется командой:

2.3 Счетчик не использующий SSI

П оскольку данный тип счетчиков является самым популярным в Интернете, то алгоритм его работы рассмотрим более подробно.

Server side includes


3.1 Что такое SSI


3.2 Основные SSI директивы

CGI скрипту передаются так же значения переменных PATH_INFO и QUERY_STRING оригинального запроса клиента.

3.3 SSI переменные окружения


3.4 Настройка сервера

Д ля того, чтобы серевер знал, в каком месте в документе подставлять данные, он должен этот документ проанализировать. Анализируемые сервером документы называются server-parsed документами.

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

Для получения более детальной информации по конфигурированию вашего сервера на предмет использования SSI читайте документайию на ваш сервер.

Приложения


Приложение 1. Переменные окружения сервера

Н иже приведен список основных переменных окружения сервера с краткими описанием назначения.В данном случае сервер Apache 1.2.5 с модулем PHP/FI-2.0.1. Для других веб-серверов (MS IIS, Netscape, NCSA httpd, и т.д.) переменные могут отличаться.

Источник

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *