Какие программы можно создавать с помощью cgi

Статья гуляет в интернете уже довольно давно, но, как автор думаю имею право на ее перепост здесь. Многое (если не все) написаное здесь устарело, и может показаться бесполезным с первого взгляда, однако пройдя этот путь, спустя 6 лет могу сказать, это не оказалось лишним. Итак.
В этой статье я хочу рассказать о CGI интерфейсе вообще, его реализации для windows и использовании при написании CGI-программ языка ассемблер в частности. В рамки этой статьи не входит полное описание CGI, так-как в Интернете материала по этому вопросу просто море и пересказывать все это здесь я просто не вижу смысла.

Теория CGI

CGI – (Common Gateway Interface) – Общий Шлюзовый Интерфейс. Как не трудно догадаться интерфейс этот служит шлюзом между сервером (здесь я подразумеваю программу — сервер) и какой-либо внешней программой написанной для ОС на которой этот самый сервер запущен. Таким образом CGI отвечает за то, каким именно образом данные будут переданы от программы-сервера к CGI-программе и обратно. Интерфейс не накладывает никаких ограничений на то, на чем должна быть написана CGI-программа, это может быть как обычный исполнимый файл, так и любой другой файл – главное, чтобы сервер смог его запустить (в среде windows это например может быть файл с расширением, привязанным к какой-либо программе).
С момента когда Вы вызвали (например нажали кнопку формы, к которой привязан вызов CGI-программы) CGI-программу до получения вами результата в окно браузера происходит следующее:
— Вэб-клиент (например браузер) создает подключение к серверу, указанному в URL;
— Вэб-клиент посылает запрос серверу, запрос этот обычно делается с помощью двух методов GET или POST;
— Данные из запроса клиента (например значения полей формы) передаются сервером, используя CGI-интерфейс, CGI-программе, указанной в URL;
— CGI-программа обрабатывает данные клиента, полученные от сервера и генерирует на основе этой обработки ответ клиенту, который она передает по все тому же CGI-интерфейсу серверу, а он в свою очередь передает его уже непосредственно клиенту;
— Сервер разрывает соединение с клиентом.
В стандартной спецификации CGI принято, что сервер может обмениваться с программой следующими способами:
— Переменные окружения – они могут быть установлены сервером при запуске программы;
— Стандартный поток ввода (STDIN) – с его помощью сервер может передать данные программе;
— Стандартный поток вывода (STDOUT) – программа может писать в него свой вывод, передающийся серверу;
— Командная строка – в ней сервер может передать некоторые параметры программе.
Стандартные потоки ввода/вывода весьма удобны и широко используются на UNIX-системах, чего не скажешь о windows, поэтому существует спецификация CGI, разработанная специально для windows-систем так и называемая «Windows CGI». Но, естественно, и стандартные потоки ввода/вывода так же можно использовать в windows CGI программировании.

Здесь я не буду затрагивать стандарт «Windows CGI», и на это существует по крайней мере две причины – первая, и самая главная – на данный момент не все http-сервера под windows поддерживают эту спецификацию (в частности мой любимый Apache 1.3.19). Вторую причину вы можете наблюдать набрав в любой поисковой системе строчку «Windows CGI». Отмечу относительно этого интерфейса лишь общие детали – все данные от сервера к клиенту передаются посредством обычного для windows *.ini файла, имя которого передается программе в командной строке. При этом все данные в файле уже заботливо разбиты по секциям сервером и вам лишь остается используя функции «GetPrivateProfile*» извлечь их оттуда. Ответ серверу передается опять же посредством файла, имя которого указано в соответствующей записи ini-файла.
Какие же данные могут быть переданы клиентом CGI-программе? – практически любые. В общем случае программе передаются значения полей формы, которые заполняет клиент, но это также могут быть и какие-либо двоичные данные, например файл с картинкой или музыкой. Данные могут быть переданы на сервер двумя различными методами – это метод GET и метод POST. Когда мы создаем форму для заполнения на нашей страничке мы явно указываем каким из приведенных методов мы хотим отправить введенные пользователем данные, делается это в основном тэге формы примерно так:
При отправке данных методом GET, данные браузером считываются из формы и помещаются следом за URL скрипта, за знаком вопроса, если значимых полей в форме несколько, то они передаются все через значёк «your_age=90 HTTP/1.0
Использование метода GET имеет сразу несколько слабых сторон – первое и самое главное – т.к. данные передаются в URL то он имеет ограничение на количество этих самых передаваемых данных. Вторая слабость опять же вытекает из URL – это конфиденциальность, при такой передаче данные остаются абсолютно открытыми. Итак, хорошо если у нас в форме 2-3 небольших поля… встает вопрос что же делать если данных больше? Ответ – использовать метод POST!
При использовании метода POST данные передаются серверу как блок данных, а не в URL, что несколько развязывает нам руки для увеличения объема передаваемой информации, для вышеприведенного примера формы POST блок, посылаемый серверу будет примерно такой:

Читайте также:
Фотошоп сколько весит программа

POST /cgi-bin/test.exe HTTP/1.0
Accept: text/plain
Accept: text/html
Accept: */*
Content-type: application/x-www-form-urlencoded
Content-length: 36
your_name=Pupkinyour_age=90

  • Программа должна уметь писать в стандартный поток вывода (stdout), чтобы передать результат своей работы серверу;
  • Из первых двух пунктов следует, то, что для того, чтобы сервер мог передать нашей программе что-либо в stdin, а она могла ему что-либо ответить в stdout CGI-программа должна быть консольным приложением;
  • Наша программа должна уметь читать переменные своего окружения.
  • Тебе НЕ НУЖЕН VFX! Как снимать ЛЮБОЕ ВИДЕО, не выходя из дома? Виртуальный продакшен | Unreal Engine

    СЦЕНА С ЧЕЛОВЕКОМ-ПАУКОМ ЗА 5 МИНУТ / 50 МИНУТ / 5 ЧАСОВ В BLENDER 3D

    • STD_INPUT_HANDLE — для stdin (стандартный ввод);
    • STD_OUTPUT_HANDLE — для stdout (стандартный вывод);
    • STD_ERROR_HANDLE — для stderr.

    Функция возвратит необходимый нам для операций чтения/записи хэндл. Следующее что нам необходимо делать это писать/читать эти потоки. Делается это обычными операциями чтения/записи файлов, т.е. ReadFile и WriteFile. Тут есть одна тонкость, можно подумать, что для этих целей можно использовать WriteConsole/ReadConsole, да это действительно справедливо для консоли и будет прекрасно работать, результаты, так же как и с WriteFile будут выводиться на консоль, но продолжаться это будет пока мы не запустим нашу программу как скрипт на сервере. Происходит это потому что, когда нашу программу запускает сервер хндлы, возвращаемые функцией «GetStdHandle» уже не будут хндлами консоли как таковыми, они будут хэндлами pipe, что необходимо для связи двух приложений.
    Вот небольшой пример того, как должна выглядеть CGI-программа на ассемблере:

    .386
    .model flat,stdcall
    includelib import32.lib
    .const
    PAGE_READWRITE = 4h
    MEM_COMMIT = 1000h
    MEM_RESERVE = 2000h
    STD_INPUT_HANDLE = -10
    STD_OUTPUT_HANDLE = -11

    .data
    hStdout dd ?
    hStdin dd ?
    hMem dd ?
    header:
    db ‘Content-Type: text/html’,13,10,13,10,0
    start_html:
    db ‘Окружение CGI-программы выглядит так:
    ‘,13,10,0
    for_stdin:
    db ‘STDIN программы содержит:
    ‘,13,10,0
    end_html:

    db »,13,10,0
    nwritten dd ?
    toscr db 10 dup (32)
    db ‘ — Тип файла’,0
    .code
    _start:

    xor ebx,ebx
    call GetStdHandle,STD_OUTPUT_HANDLE
    mov hStdout,eax
    call GetStdHandle,STD_INPUT_HANDLE
    mov hStdin,eax

    call write_stdout, offset header
    call write_stdout, offset start_html

    call VirtualAlloc,ebx,1000,MEM_COMMIT+MEM_RESERVE,PAGE_READWRITE
    mov hMem,eax
    mov edi,eax
    call GetEnvironmentStringsA
    mov esi,eax
    next_symbol:
    mov al,[esi]
    or al,al
    jz end_string
    mov [edi],al
    next_string:
    cmpsb
    jmp short next_symbol
    end_string:
    mov [edi],’>rb add edi,3
    cmp byte ptr [esi+1],0
    jnz next_string
    inc edi
    stosb
    call write_stdout, hMem
    call write_stdout, offset for_stdin

    call GetFileSize,[hStdin],ebx
    mov edi,hMem
    call ReadFile,[hStdin],edi, eax,offset nwritten, ebx
    add edi,[nwritten]
    mov byte ptr [edi],0
    call write_stdout, hMem
    call write_stdout, offset end_html
    call VirtualFree,hMem
    call ExitProcess,-1

    write_stdout proc bufOffs:dword
    call lstrlen,bufOffs
    call WriteFile,[hStdout],bufOffs,eax,offset nwritten,0
    ret
    write_stdout endp
    extrn GetEnvironmentStringsA:near
    extrn GetStdHandle:near
    extrn ReadFile:near
    extrn WriteFile:near
    extrn GetFileSize:near
    extrn VirtualAlloc:near
    extrn VirtualFree:near
    extrn ExitProcess:near
    extrn lstrlen:near
    ends
    end _start

    Исполняемый файл строится командами:
    tasm32.exe /ml test.asm
    tlink32.exe /Tpe /ap /o test.obj
    Не забудьте, что программа должна быть консольной.
    Вызывать эту программу можно используя вышеописанную html-форму, нужно только поменять имя test.bat в форме на test.exe и скопировать его в /cgi-bin/ соответственно, при том можно выставить в методе запроса POST, программа его обрабатывает.
    Еще хочу отметить, что можно вызывать программу и по-другому, можно создать в каталоге cgi-bin файл например test.cgi с одной единственной строчкой «#!c:/_путь_/test.exe» и вызывать в запросах его, а сервер в свою очередь будет читать первую его строчку и запускать exe-файл, для этого необходимо, чтобы в настройках http-сервера было прописано расширение *.cgi как расширение для скриптов. При таком подходе сервер запустит нашу программу с командной строкой «test.exe путь_к_test.exe» это имеет несколько плюсов – первое, это то, что человек, запускающий наш скрипт не будет даже догадываться на чем скрипт написан, второе – так-как нам передается имя файла с нашей строчкой мы можем например дописать в этот файл какие-либо настройки для нашего скрипта, что упрощает отладку, кстати именно так работают все интерпретаторы – вы успели заметить, что во всех perl/php/итд программах, присутствует подобная строка – указывающая на сам командный интерпретатор. Так вот сервер при запуске cgi-программы, если расширение программы прописано у него как скрипт в настройках читает первую строку файла, и если она оказывается описанного выше формата, то запускает указанную в строчке программу с именем этого файла ч/з пробел, допустим что в строчке указан интерпретатор перла, он получив такой подарок начинает его выполнение, т.к. комментарий в перле это символ «#», то первую строчку он пропускает и идет дальнейшее выполнение скрипта, в общем штука удобная.

    Источник: habr.com

    Какие программы можно создавать с помощью cgi

    CGI (от англ. Common Gateway Interface — «общий интерфейс шлюза») — стандарт интерфейса, используемого для связи внешней программы с веб-сервером. Программу, которая работает по такому интерфейсу совместно с веб-сервером, принято называть шлюзом, хотя многие предпочитают названия «скрипт» (сценарий) или «CGI-программа».

    Читайте также:
    Программа которая узнает пароль от компьютера

    Поскольку гипертекст статичен по своей природе, веб-страница не может непосредственно взаимодействовать с пользователем. До появления JavaScript , не было иной возможности отреагировать на действия пользователя, кроме как передать введенные им данные на веб-сервер для дальнейшей обработки. В случае CGI эта обработка осуществляется с помощью внешних программ и скриптов, обращение к которым выполняется через стандартизованный (см. RFC 3875: CGI Version 1.1) интерфейс — общий шлюз.

    Упрощенная модель, иллюстрирующая работу CGI:

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

    Как работает CGI?¶

    Обобщенный алгоритм работы через CGI можно представить в следующем виде:

    1. Клиент запрашивает CGI-приложение по его URI.
    2. Веб-сервер принимает запрос и устанавливает переменные окружения, через них приложению передаются данные и служебная информация.
    3. Веб-сервер перенаправляет запросы через стандартный поток ввода (stdin) на вход вызываемой программы.
    4. CGI-приложение выполняет все необходимые операции и формирует результаты в виде HTML.
    5. Сформированный гипертекст возвращается веб-серверу через стандартный поток вывода (stdout). Сообщения об ошибках передаются через stderr.
    6. Веб-сервер передает результаты запроса клиенту.

    Области применения CGI¶

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

    CGI — это не язык программирования! Это простой протокол, позволяющий веб-серверу передавать данные через stdin и читать их из stdout. Поэтому в качестве CGI-обработчика может использоваться любая серверная программа, способная работать со стандартными потоками ввода-вывода.

    Примеры¶

    Пример на Python:

    #!/usr/bin/python print(«»»Content-Type: text/plain Hello, world!»»»)

    В этом коде строка #!/usr/bin/python указывает полный путь к интерпретатору Python.

    #include int main(void) printf(«Content-Type: text/plainnn»); printf(«Hello, world!nn»); return 0; >

    Строка Content-type: text/htmlnn — http-заголовок, задающий тип содержимого (mime-type). Удвоенный символ разрыва строки (nn) — обязателен, он отделяет заголовки от тела сообщения.

    Все скрипты, как правило, помещают в каталог cgi (или cgi-bin) сервера, но это необязательно: скрипт может располагаться где угодно, но при этом большинство веб-серверов требуют специальной настройки. В веб-сервере Apache, например, такая настройка может производиться при помощи общего файла настроек httpd.conf или с помощью файла .htaccess в том каталоге, где содержится этот скрипт. Также скрипты должны иметь права на исполнение ( chmod +x hello.py ).

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

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

    Пример вывода переменных окружения CGI-скрипта:

    1 2 3 4 5 6 7 8
    #!/usr/bin/python import os print(«Content-type: text/htmlrnrn») print(«Environment
    «) for param in os.environ.keys(): print(» %20s : %s
    » % (param, os.environ[param]))

    ../_images/cgi_env.png

    Преимущества CGI¶

    • Процесс CGI скрипта не зависит от Веб-сервера и, в случае падения, никак не отразится на работе последнего
    • Может быть написан на любом языке программирования
    • Поддерживается большинством Веб-серверов

    Недостатки CGI¶

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

    Альтернативы¶

    • FastCGI — дальнейшее развитие технологии CGI. Поддерживается многими Веб-серверами, например Nginx.
    • Веб-сервера, в которые уже встроена поддержка дополнительных стандартов и протоколов, таких как WSGI (Gunicorn, waitress, uwsgi)
    • Веб-сервер, функционал которого расширяется через модули, например, Apache (mod_wsgi, mod_php, mod_fastcgi)

    Практика¶

    • https://docs.python.org/2/library/cgihttpserver.html
    • https://docs.python.org/3/library/http.server.html

    Для запуска CGI сервера необходимо перейти в директорию sourcecode и выполнить команду:

    python -m CGIHTTPServer 8000

    Источник: lectureswww.readthedocs.io

    Что такое CGI-графика и как ее создают

    CGI — это технология, которая нужна для создания реалистичной графики и спецэффектов.

    Анастасия Хамидулина
    Автор статьи
    7 марта 2023 в 11:44

    Если дизайнер освоил векторную графику, разобрался с растровой и овладел навыком 3D-иллюстрации, пришло время для CGI (сиджиай). Спецы, которые работают с этой технологией, создают реалистичные модели, спецэффекты, анимируют объекты. На выходе получают реалистичную картинку. Как в жизни, но созданную на компьютере.

    Что такое CGI и где используют

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

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

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

    Читайте также:
    Ондувилла инструкция по монтажу шаговая программа

    ‍ Кто работает с CGI. Например:

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

    Если интересуетесь дизайном, но хотите начинать не с узкой области вроде CGI, а стать универсальным специалистом, — пройдите практический курс «Графический дизайнер» от Skypro. В программе Photoshop, Figma, Tilda, Illustrator, типографика и верстка в InDesign, UX-копирайтинг, векторная графика, лендинги и многое другое. Освоите новую профессию за 10 месяцев: учиться можно в любое время.

    Как в мире появился CGI: краткий экскурс

    CGI — это широкий термин для обозначения компьютерной графики. Впервые ее использовали в фильме «Мир Дикого Запада» аж в 1973 году.

    Пример CGI графики из фильма «Мир Дикого Запада»

    В фильме изобразили тепловидение робота-Стрелка

    Ранняя компьютерная графика не была хороша по сегодняшним меркам: выглядела нереалистично и грубо, но на неискушенного зрителя производила сильное впечатление.
    В 1993 году мир увидел реалистичных динозавров в фильме «Парк Юрского периода». С помощью CGI-технологий они двигались как настоящие, а дизайнеры сделали так, что их кожа была как у живых рептилий. Фильм оставался самым кассовым до выхода «Титаника». Затем в киноиндустрии начали массово использовать технологию.

    Пример CGI-графики из фильма «Парк Юрского периода»

    Фильм «Парк Юрского периода» — пример, что такое CGI-технология в кино: динозавры нарисованы от и до, но выглядят как живые

    В 1995 году кинематографисты впервые использовали компьютерную графику для создания целого фильма «История игрушек». Реалистичные компьютерные персонажи — Вуди, Базз и Рекс — поразили публику. Вскоре Pixar повторил успех: выпустил аналогичные фильмы «Корпорация монстров» и «В поисках Немо».

    Пример компьютерного персонажа, который взаимодействует на экране с живыми актерами, — Голлум в фильме «Властелин колец». Здесь применили технологию захвата движения: сначала сняли настоящего человека, а потом сопоставили его движения с нарисованным CGI-Голлумом.

    Пример CGI-графики из фильма «Властелин колец»

    Персонаж Голлум — компьютерный, но движения принадлежат реальному актеру

    Дальше — больше. В 2009 году фильм «Аватар» объединил захват движения актеров с захватом мимики. Персонажи, нарисованные на компьютере, получились сверхреалистичными.

    Киноиндустрия продолжает использовать и совершенствовать CGI. Пример: пробивающий стену Халк, летающий Железный Человек, бегающие по улицам с живыми людьми трансформеры — всё это CGI. Но теперь технологию применяют и в коммерции: рекламщики, дизайнеры и архитекторы.

    Python-разработчик: новая работа через 9 месяцев
    Получится, даже если у вас нет опыта в IT

    Какие выделяют этапы разработки CGI

    Моделирование. Первый этап работы CGI-дизайнера, на котором он создает форму объекта. Для этого у него есть инструмент — полигонная сетка. Дизайнер меняет сетку до тех пор, пока не получит нужный размер и форму. Результат выглядит как объект с множеством граней, по факту это черновик будущего дизайна.

    Текстурирование. Специалист берет свой многогранный объект-черновик и накладывает на него текстуры. Грани сглаживаются. Дизайн начинает выглядеть реалистично.

    Наложение света. Чтобы добиться еще большей натуралистичности, дизайнер размещает рядом с объектом источники света. Они создают тени и блики на объекте.

    Риггинг. На этом этапе создают условный скелет, с помощью которого анимируют разные части объекта. Например, если объект — собака, то через скелет спец будет управлять ее лапами, хвостом, ушами, головой.

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

    Какое ПО использовать, чтобы создавать CGI

    Обычно CGI создают сразу в нескольких программах. В одной прорабатывают динамику, в другой накладывают спецэффекты. В третьей моделируют объекты, а в четвертой всё объединяют и получают анимированную сцену. Вот самые популярные программы CGI-дизайнеров:

    After Effects. Программа, в которой создают 3D-персонажей, запускают анимации — дождя, дыма, огня. А еще строят модели объектов в трехмерном пространстве и создают визуальные эффекты.

    ZBrush. Программное обеспечение для работы с 3D-графикой. В нём рисуют, моделируют, занимаются скальпингом. Например, разрабатывают внешний вид ювелирных изделий, автомобилей, самолетов, игрушек, элементов компьютерных игр.

    Cinema 4D. Универсальное ПО для моделирования 3D-объектов, оформления эффектов, редактуры предметов, наложения теней, бликов и текстур.

    Maya Autodesk. Программа, в которой создают персонажей, работают над спецэффектами, 3D-анимацией. Maya Autodesk используют для комбинаторных съемок — когда сначала снимают живых людей, а потом поверх накладывают графику.

    Blender. Бесплатная программа, в которой работают аниматоры, дизайнеры интерьеров и игровые дизайнеры. Поддерживает рендеринг VR, шейдеры PBR, рендеринг GPU и CPU, освещение HDR.

    Главное: что такое CGI

    • CGI — это технология в дизайне. Она нужна, чтобы создавать реалистичную компьютерную графику, анимацию, спецэффекты и сцены.
    • CGI используют в кино, рекламе, инжиниринге, видеоиграх, сериалах, архитектуре. По сути — везде, где дорого использовать физические модели или небезопасно воссоздавать спецэффекты.
    • CGI-дизайнер работает не в одном ПО, а сразу в нескольких. Где-то создает модель, где-то накладывает текстуры, а где-то — анимирует разные части компьютерной сцены.
    • В основном работа CGI-дизайнера состоит из пяти этапов: моделирования, текстурирования, наложения света, риггинга и композитинга.

    Источник: sky.pro

    Рейтинг
    ( Пока оценок нет )
    Загрузка ...
    EFT-Soft.ru