Sign in Join
Wiki copytemporary

CGI Web Programming/ru

Bahasa Indonesia · English · Español · Français · Русский · 中文(中国)

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

Общие сведения

Общий интерфейс шлюза - CGI (Common Gateway Interface) в общих чертах работает следующим образом:

У нас есть два компьютера:

Вы можете использовать Cgi-скрипты только, если ваш сервер обладает поддержкой CGI. После размещения ваших файлов CGI, вы можете получить доступ к ним по ссылке вида: **http://www.ваш_сервер.зона\[:порт\]/ваш_логин/cgi-bin/имя_cgi_программы.exe**

Примечания:

Об использовании FreePascal для CGI

CGI программа, написанная на Free Pascal, является обычной программой, как и любая другая. В отличии от CGI программы, написанной на Perl, Free Pascal CGI не интерпретируется.

Для тестирования CGI, необходимо установить на ваш компьютер "'HTTP Сервер"' с поддержкой CGI, например Apache.

Простой пример

Ниже приведён небольшой пример простой CGI программы, которая осуществляет:

  1. Установку cookie
  2. Вывод content-type (т.е. отмечает текст для передачи по HTTP)
  3. Чтение файлов Cookie
  4. Чтение данных формы переданных методом GET
  5. Чтение данных формы переданных методом POST
pascal
program mini;

uses dos;

var
  a:string;
  c:char;
begin
// устанавливаем cookie (должно быть выведено до передачи content-type)
// не забудьте изменить срок окончания

writeln('Set-cookie:widget=value; path=/; expires= Mon, 21-Mar-2005  18:37:00 GMT');

  // указываем тип содержимого, как html
  writeln('Content-Type:text/html',#10#13);

  // получаем cookies
  a:= GetEnv('HTTP_COOKIE');
  writeln('cookies:',a);
  
  // данные, переданные методом GET
  a:='';
  a:= GetEnv('QUERY_STRING');
  writeln('GET: ',a);
    
  // данные, переданные методом POST
  a:='';
  while not eof(input) do
  begin
     read(c);
     a:= a+c;
  end;   
  writeln('POST: ',a);
end.

Простой счетчик посещений

Приложение "'hitcounter"' представляет собой простой счетчик посещений для вашего веб-сайта.

Исходный код находится здесь: 1

Отладка CGI программ

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

Одно из решений состоит в запуске из CGI-приложения отладчика:
При использовании в программе, ниже приведенного кода, сначала, как часть инициализации, запустится терминал (windows:cmd, linux:xterm), а затем отладчик (gdb) для вызывающего процесса.

Функция "sleep" выполняет прерывание программы, для инициализации gdb.

Данный пример был протестирован на:

Пример модуля, использующий отладку.

pascal
unit SelfDebug;

{
Инструкция:
-Подключить модуль в любом месте программы.
-Измените константу DEBUGGER на имя используемого вами отладчика (gdb, ddd,gdbtui...)
-Для Windows, если программа для отладки запущена в качестве службы (т.е. CGI приложение запущено
из Apache выполняемого как служба) убедитесь, что служба настроена как
«взаимодействовать с рабочим столом». Если так не сделать, будет запущен отладчик
без консоли. Он прервёт программу и зависнет, ожидая ввода. 
- Для Linux: если программа для отладки, запущена другим пользователем (напр. CGI-приложением),
запустите "xhost +" в терминале, чтобы все пользователи могли подключиться к xserver.
 Если необходимо, измените DISPLAY, чтобы соответствовать вашей переменной окружения DISPLAY
}

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils,Process;

implementation

const
  {$ifdef windows}
  DEBUGGER='C:\lazarus\mingw\bin\7.3\gdb.exe';
  {$endif}
  {$ifdef linux}
  DEBUGGER='gdb';
  DISPLAY=':0.0';
  {$endif}
  MSWAIT=2000;

var
  AProcess: TProcess;

initialization
AProcess := TProcess.Create(nil);
{$ifdef windows}
AProcess.CommandLine := format('cmd /C START "Debugging %s" /WAIT "%s" "%s" %d"',[paramstr(0),debugger,paramstr(0),GetProcessID]);
{$endif}
{$ifdef linux}
AProcess.CommandLine := format('xterm -display %s -T "Debugging %s" -e "%s" "%s" %d',[DISPLAY,paramstr(0),DEBUGGER,paramstr(0),GetProcessID]);
{$endif}
AProcess.Execute;
sleep(MSWAIT);
finalization
AProcess.Free;
end.

Исходник: http://www.hu.freepascal.org/lists/fpc-pascal/2011-October/030752.html

Так же отладку можно реализовать через ведение журнала программы.

Существующие средства разработки для CGI приложений


From the Free Pascal wiki, page "CGI Web Programming/ru", as it stood on 2020-02-10 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Revision 1, last changed by WikiArchive .

Edited on wiki.freepascal.org by 5 people, 2014–2020

From the official wiki's backup of 26 May 2024: who edited this page there, and when. Edits made there after that date were not recorded, and the earlier versions are not shown here; the main page says why.

WhenWhoWhat changed
AmberCreated page
XakeRОбщие сведения
XakeRОбщие сведения
XakeRОбщие сведения
FTurtlecategories (minor)
SerbodСуществующие средства разработки для CGI приложений: link to Brook Framework page
TrevFixed syntax highlighting; deleted category already in page template (minor)

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.