Практика применения скриптов CGI
Применение скриптов широко практикуется в WWW. При их помощи, например, реализованы стеки графических гипертекстовых ссылок, встраивание даты в текст документов, встраивание ответов службы finger, доступ к базам данных и многое другое. Мы рассмотрим простейшие скрипты для распечатки параметров, передаваемых сервером, скрипты по обращению к shell, С скрипты, скрипты доступа к системе управления базами данных ingres и скрипт imagemap.
Простейшие скрипты и преобразование информации. Обсуждение начнем со скриптов, написанных на командном языке SHELL. Самый простой из них будет выглядеть как:
#!/bin/sh echo Content-type: text/plain echo echo This is the result of script execution. #The end of script
Первая строка определяет, что в качестве интерпретатора скрипта будет использован shell, вторая строка открывает заголовок сообщения, передаваемого скриптом серверу, и определяет тип передаваемой информации как обычный текст. Третья строка отделяет тело сообщения от его заголовка. В теле сообщения передается фраза из четвертой строки. Именно она и будет отображаться программой-интерфейсом пользователя.
В качестве следующего примера приведем скрипт, который отображает значения переменных окружения:
#!/bin/sh echo Content-type: text/plain echo echo $REQUEST_METHOD echo $QUERY_STRING echo $CONTENT_TYPE echo $CONTENT_LENGTH #The end of script.
В данном скрипте пользователю будут возвращены значения указанных в строках команды echo переменных окружения.
Пользователю можно вернуть не только значения переменных окружения, но и результаты выполнения команд.
#!/bin/sh echo Content-type: text/plain echo finger paul@polyn.kiae.su #The end of script.
В результате выполнения этого скрипта пользователь получит информацию о пользователе paul с машины polyn.kiae.su.
Завершим обзор простейших скриптов небольшой программой на С:
#include <stdlib.h>; #include <sys/types.h>; main() { long i,n,uid; char input_ch[1024]; char *env; env = getenv("CONTENT_LENGTH"); /* Here we recieve a length */ sscanf(env,"%d",&n); /* of input stream and form */ for(i=0;i<;n;i++) /* command line */ { input_ch[i] = getchar(); } input_ch[i] = '\000'; printf("Content-type: text/html\n\n"); /* First message of a CGI Programme */ /* This message must be a first one */ /* in output sream. */ printf("<TITLE> Cgi script.(example#1)</TITLE>\n"); printf("<H3><I> Russian Research Center \"Kurchatov Institute\"<I></H3>\n"); c_uid = -1; sscanf(input_ch,"uid=%ld",&uid); /* Transform input data */ printf("Input Nuber:%ld.<BR><HR>",uid); exit(0); }
В приведенном выше примере программа получает данные через стандартный ввод. Это значит, что используется метод доступа POST. Число получаемых байтов указывается в переменной окружения CONTENT_LENGTH. Следует обратить внимание на то, что первой строкой записи в стандартный вывод является строка, определяющая тип информации. В данном случае он определен как текст HTML. Важно также отметить, что в этом операторе вывод завершается двумя переводами на новую строку, т.к. пустая строка должна разделять заголовок и тело сообщения, возвращаемого серверу. Остальные операторы выводят данные в виде HTML-предложений, формируя HTML-документ.
При написании скриптов следует учитывать то, что сервер обычно стартует в момент, когда не все пути могут быть определены, поэтому при обращении к ресурсам следует указывать полные пути для этих ресурсов.