Способы создания CGI-сценариев
CGl-программы очень часто называют CGI-сценариями или просто сценариями из-за того, что они написаны, как правило, на каком-нибудь языке-интерпретаторе (Perl, Bash и др.). Однако никто не мешает написать обыкновенную CGI-программу, например, на языке С. В этом случае у вас будет исполнимый файл (ехе-файл в Windows), который будет обрабатывать данные пользователя.
Попробуем создать небольшой CGI-сценарий на языке командного интерпретатора COMMAND.СОМ. По сути, это будет обыкновенный ВАТ-файл, который будет запущен системой Файл test.bat @echo off echo Content-type: text/html echo. echo. echo Hello!
Файл test.bat нужно поместить в каталог cgi-bin вашего Web-сервера (Web-сервер может запускать программы, находящиеся только в этом каталоге).
Рассмотрим, что делает данное приложение. Сначала наш CGI-сценарий сообщает серверу формат передаваемых данных: Content-type: text/ html. Затем мы выводим два символа перевода строки (LF или \n) — команда «echo.» сообщает серверу, что мы больше не будем выводить никаких заголовков — и приступаем к выводу данных.
Вы, наверное, обратили внимание на расширение файла .bat. Это небольшой сценарий, обработкой которого занимается командный интерпретатор command.com.
В Linuxнет понятия «расширение файла». Поэтому вы легко можете написать следующий сценарий на языке Bash (Bourne Again Shell): #!/bin/bash echo Hello!
Затем данный файл (test.gif)нужно поместить в каталог CGIи сделать его исполнимым:chmod +x test.gif
Несмотря на то, что мы назвали файл test.gif,система запустит его, и в окне браузера вы увидите строку Hello!Точно таким же образом поступают программы, выводящие изображения: сначала они выводят формат (например, gif),а затем — содержимое файла в формате GIF.
Благодаря тому, что в Linuxотсутствует понятие «расширение файла», мы можем достичь еще большего уровня прозрачности. В Windows,чтобы запустить программу, она должна иметь расширение .com, .exe, .bat. Понятное дело, что пользователь догадается, что он имеет дело с программой. В Linuxзапуск программы происходит совершенно незаметно для пользователя.
Методы передачи данных GET и POST
Зачем и в каком виде происходит передача данных серверу и CGI-сценариям?
Программы предназначены для того, чтобы решать определенные задачи. Но кто же будет писать программу, которая решает конкретную задачу? Программы должны решать все задачи определенного класса. Например, следующая программа не является универсальной:а = 2 + 2; print a;
В данном исполнении программа каждый раз будет выводить одно и то же число. Сделаем программу универсальной: для этого будем передавать ей два параметра — числа, которые она должна сложить:read a, b;с = а + b; print с;
Точно такая же ситуация сложилась вокруг CGI-сценариев. Для работы сценарию нужно передать определенные параметры, он их обработает и передаст ответ. Поскольку браузер не позволяет вводить параметры напрямую — с клавиатуры, он передает их с помощью форм: вы вводите параметры в форму, затем браузер складывает все параметры в одну строку — строку запроса — и передает ее сценарию.
Алгоритм работы любой CG1-программы (или сценария — как кому больше нравится) выглядит следующим образом:
1. Получить данные, переданные пользователем.
Обработать данные.
Вывести результат.
Завершить работу.
Передача данных пользователя в HTML,как вы уже знаете, реализуется с помощью форм. Рассмотрим небольшую форму, передающую имя пользователя.
Пример формы
<form action="/cgi/delete. cgi" method= "post">
<input type- "text" name- "user_name">
<input type- "submit" name- "go" value- "Go!">
< / form >
Если данную форму сохранить как файл в формате HTML,то в окне браузера вы увидите поле для ввода имени и кнопку для передачи параметра на сервер.
Рис. 3.1. Форма в окне браузера
Теперь давайте разберемся с самой формой. Когда пользователь введет имя и нажмет кнопку «Go»,введенное имя будет передано сценарию delete. cgiв качестве параметра. Этот параметр будет называться user name. Метод передачи данных задается параметром methodтэга <form>. Сейчас мы используем метод Get. После того, как будет нажата кнопка «Go»,в поле Адрес браузера будет показано примерно следующее: http://localhost/cgi/delete.cgi?user_name=Denis
После имени узла и пути к CGI-программе, ей передаются введенные пользователем данные в виде параметров. Параметр при пересылке присоединяется к URL-адресу сценария через знак вопроса (?), Если параметров несколько, то они разделяются амперсантом (&): http://localhost/cgi/delete.cgi?user_name = Denis&sex=Male
Метод передачи определяет, как именно данные будут переданы сценарию. «На глаз» определить какой метод используется можно следующим образом. Метод, при котором передаваемые параметры отображаются и строке браузера, является методом GET. Если вы не видите передаваемых параметров, значит, используется метод POST.
После того, как параметры переданы сценарию, задача сценария состоит в том, чтобы выполнить разбор строки, то есть выделить пары имя_параметра =значение. Теперь рассмотрим оба эти метода подробнее.
Метод GET