Копия викизеркало

Это зеркало вики с pascal.chat. Правка, история и вход — там.

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(http://modelbuilder.svn.sourceforge.net/viewvc/modelbuilder/html/cgi/)

Отладка 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 the Internet Archive kept it on 2023-03-23, last changed on 2020-02-11. 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.

Версия 4, последнее изменение: WikiArchive, .