CGI-скрипти: що це, способи створення

CGI-скрипти: що це, способи створення

CGI - це абревіатура від слів Common Gateway Interface. Так називається невелика програма, яка пропонує надійний спосіб взаємодії веб-серверів у браузері, виконуючи це способами, які були неможливі за допомогою HTML. Більшість скриптів CGI написано на Perl. Це звичайна мова програмування, яка використовується для створення сценаріїв на стороні сервера зі стандартним текстовим файлом з розширенням (.cgi).

Основні умови роботи програми

Перш ніж використовувати символи CGI скриптів, користувач повинен перевірити, чи підтримує їх веб-вузол сайту, а також уточнити, чи якщо у розробника повноваження на їх застосування. Деякі хости цього не допускають. Якщо розробник сайту бачить теку CGI-bin під час завантаження HTML-файлів, йому дозволено використовувати сценарії GCI.


Одні вузли дозволять запросити у них функцію CGI-bin, оскільки вона не завжди надається за замовчуванням. Інші хости можуть протестувати і схвалити сценарії, перш ніж дати дозвіл на використання CGI скриптів.

Якщо розробнику не потрібне редагування, йому все одно потрібен текстовий редактор для написання сценарію за запитами сайту. Який би редактор не планувався до використання, важливо зберігати файл у вигляді звичайного тексту.

Крім того, знадобиться програма FTP, яка поставляється з комерційною версією Pro або безкоштовною версією Lite. Будь-який варіант буде працювати до тих пір, поки він завантажується в режимі ASCII, щоб допомогти користувачеві пройти через установку, оскільки створення CGI скриптів може зайняти багато часу.

Налаштування і монтаж

Якщо у користувача є CGI-bin, то є хороший шанс для виконання сценарію CGI. Для правильного встановлення попередньо рекомендується переглянути сторінку часто заданих запитань веб-хосту, панель керування сайтом, документи підтримки або настановне повідомлення. Однією з найбільш поширених помилок для веб-майстрів є встановлення скриптів CGI з неправильним шляхом.

Якщо вже є скрипт, відкритий для використання, шлях повинен бути правильним, інакше сервер не буде працювати. Поки відкривається скрипт, перевіряють зворотний зв 'язок щодо будь-яких змінних, які вимагають налаштування і коментарі цього рядка, що починаються з "#".

Після визначення скрипту для сервера ви можете розпочати звантаження. Обов 'язково виконують це в режимі ASCII, оскільки простий CGI скрипт є текстовим файлом. Технічно сценарії можуть бути виконані з будь-якого каталогу, але більшість хостів дозволяє це виконувати тільки з CGI-біна. Важливо також використовувати правильну роздільну здатність для файлів, які використовують сценарій CGI.


Роздільна здатність для файлів

Існує три типи доступу до даних з трьома різними дозволами для кожної групи.

Сервери UNIX дозволять встановити різні рівні доступу. Важливо знати, які дозволи має сценарій:

  1. Користувач - складається тільки з власника файлу в групі, це обліковий запис хостингу.
  2. Інше - група складається з усіх інших аспектів на сервері.
  3. Читання - дозволяє користувачам читати і розуміти дані, зазначені у файлі.
  4. Write - дозвіл на запис дозволить користувачам розшифрувати і записати нову дату, видалити старі дані з архіву.
  5. Execute - дозвіл на виконання, дозволить надсилати файл тільки в тому випадку, якщо програма або Upload скрипт CGI exe виконуються. Попередньо переконуються, що скрипт працюватиме до посилання в режимі загального користування.

Приклад використання Application

CGI - додаток спрощує створення складних, високопродуктивних, багаторазових веб-додатків, виконання проектування, запис і розвиток веб-проектів. Воно розумно застосовує використання сучасних технологій і методів, які пов 'язують розробника з будь-яким набором інструментів операційної системи або сервера.

Має легку вагу (з точки зору використання пам 'яті), що робить її підходящою для звичайних середовищ CGI, і високий вибір продуктивності в таких постійних середовищах, як FastCGI або mod_perl.

Додаючи PLUG-INS у міру зростання потреб, можна використовувати складні функції, коли вони будуть потрібні, наприклад, потрібно написати додаток для пошуку через базу даних віджетів. Скрипт екземпляра - це те, що фактично викликається користувальницьким веб-сервером. Це дуже маленький простий файл, який просто створює екземпляр програми користувача і викликає успадкований метод, run (). Нижче наведено повний опис "widgetview.cgi":

#!/usr/bin/perl -wuse WidgetView

my $webapp = WidgetView->new()


$webapp->run()

Як можна бачити, widgetview.cgi просто використовує прикладний модуль, який реалізує пакет Perl під назвою WidgetView.pm.

CGI Application дбає про впровадження методів new () і run (). При цьому користувач ніколи не повинен викликати print () для надсилання будь-якого виводу в STDOUT. Замість цього весь висновок повертається, як скаляр.

CGI - найбільший внесок у управління станом програми. Все, що необхідно для просування програми вперед, це встановити значення параметра форми HTML "rm" у значення "режиму виконання", яке потрібно обробити відправленням форми. Це ключ до CGI Application.

Методи сценаріїв

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


Метод new () є конструктором для CGI. Він повертає посилання на пакет програм (клас). Він може приймати набір параметрів, як пари: ключ = > значення.

Цей метод може приймати певні параметри:

  1. TMPL_PATH - визначає шлях до каталогу шаблонів.
  2. QUERY - дозволяє вказати вже створений об 'єкт запиту CGI.pm.
  3. PARAMS - це параметр, який надає вам змогу встановити під час виконання низки налаштованих режимів. Передаючи різні значення в сценаріях різних примірників, які використовують один і той самий додаток, можна досягти більш високого рівня повторного використання.

Run () викликається на об 'єкт Application Module зі скрипту. При виклику він виконує функціональні можливості користувацького прикладного додатка.

Цей метод спочатку визначає стан програми, переглядаючи значення параметра CGI, визначеного параметром mode_param (). За замовчуванням "rm" для "Run Mode", що містить назву режиму роботи. Якщо це не вказано, типовий стан дорівнює значенню start_mode (). Як тільки режим визначено, run () переглядає таблицю відправлення, що зберігається в run_modes (), і знаходить індекс функції, який вводиться з імені режиму. Якщо знайдено, функція викликається, а повернуті дані print () 'ed відправляються в STDOUT і в браузер. Якщо вказаний режим не знайдено, у таблиці run_modes (), run () буде croak ().

Підтримка PSGI

Додаток пропонує вбудовану підтримку PSGI. Типовим об "єктом запиту є:


psgi_app ()

$psgi_coderef = WebApp->psgi_app({ ... args to new() ... })

Найпростіший спосіб - створити і повернути PSGI - сумісний coderef. Потрібно передати аргументи в hashref так само, як і до нового. Це повертає сумісний coderef PSGI за допомогою CGI::: PSGI як об 'єкт запиту. Щоб використовувати інший об 'єкт запиту, створюють власний об' єкт run_as_psgi (), як показано нижче:

run_as_psgi ()

my $psgi_aref = $webapp->run_as_psgi


Так само, як run, друк, не виводить і не повертає структуру даних, необхідну специфікацією PSGI. Використовують це, якщо потрібно запустити програму поверх обробника, сумісного з PSGI, наприклад, Plack. Кінцевий результат може виглядати так:

Специфікація PSGI дозволяє повертати дескриптор файлу або посилання підпрограми замість байтових рядків. У режимі PSGI це підтримується безпосередньо CGI Application.

Методи можливого перевизначення

CGI реалізує деякі методи, які, як очікується, будуть перевизначені шляхом їх реалізації в модулі підкласу. Ці методи полягають у наступному:

  1. Параметри (). Цей метод викликається успадкованим методом конструктора new ().
  2. Метод setup () слід використовувати для визначення наступної властивості/методів.

Метод setup () може викликати будь-який з методів примірника програми користувача. Ця функція є гарним місцем для визначення властивостей, специфічних для програми, за допомогою $ webapp- > param ().

Метод setup () можна реалізувати як зображення нижче:

Однак часто все, що має бути в setup (), визначає режими запуску AutoRunmode, що дозволяє зробити це за допомогою простого синтаксису, використовуючи атрибути режиму запуску.

Метод teardown (). Якщо він реалізований, то викликається автоматично після створення CGI скриптів і запуску програми. Його можна використовувати для очищення після операцій. Типове використання функції teardown () - вимкнути з 'єднання з базою даних, яке було встановлено у функції setup (). Також можна використовувати метод teardown () для зберігання інформації про стан програми на сервері: cgiapp_init ().

Надсилання чистих URI для запуску режимів

Сучасні веб-фреймворки обходяться без обмежень в URI, забезпечуючи замість цього чисті URI:

/cgi-bin/item.cgi?rm=view&id=15

Чистим URI для опису одного і того ж ресурсу може бути:

/item/15/view.

Процес порівняння цих URI для запуску режимів називається диспетчеризацією і обробляється CGI:: Application :: Dispatch. Додатковий менеджер не потрібен.

Можна працювати над проектом CGI:: Application на робочому столі або ноутбуці без встановлення повнофункціонального веб-сервера, такого як Apache. Замість цього встановлюють CGI:: Application :: Server з CPAN. Після декількох хвилин встановлення у користувача буде власний сервер програм.

Проводять автоматизоване тестування. Test :: WWW :: Mechanize :: CGIApp дозволяє виконувати функціональне тестування проекту CGI:: App без запуску веб-сервера. Test :: WWW :: Mechanize можна використовувати для перевірки програми через справжній веб-сервер.

Пряме тестування також виконується легко. CGI- програма зазвичай друкує вихідні дані своїх режимів роботи в STDOUT. Це можна придушити за допомогою змінної середовища CGI_APP_RETURN_ONLY. Додаток має підключувану архітектуру, яка проста у використанні і в розробці нових плагінів.

Користувацький контент CGI

Він був першою специфікацією, встановленою для розробки динамічного контенту на веб-сервері. CGI контент, який постачається користувачам, не є статичним HTML-кодом, який видається з файлу на сервері. Це динамічний контент, створений у скрипті, який може витягувати інформацію з бази даних, адаптувати вміст до типу браузера, що робить запит, чи то новий користувач, чи ні.

PHP - це мова, спеціально призначена для реалізації динамічного вмісту на веб-серверах. Це робить розробку скриптів CGI у PHP набагато простішою, ніж іншими мовами. Коли сервер починає виконання, він надає всю необхідну йому контекстну інформацію:

  1. Повна інформація про запит, включаючи назву/IP віддаленого вузла, запитаний URL і його аргументи, рядок запиту (якщо вони є).
  2. Куки, пов 'язані із запитом.
  3. У разі запиту POST, у результаті надсилання веб-форми, назви та значення параметрів.

Головний приклад скрипту PHP

Сценарій повинен виконати процес, а потім виводити допустимий HTML-код, включаючи заголовки HTTP. Приклад скрипту PHP:

У цьому скрипті перший і останній рядки є HTML-кодом, а пропозиції PHP укладені в маркери, потім отримують скрипт з браузера, додаючи рядок запиту з двох аргументів "data1" і "data2".

Крім глобальної змінної $ _SERVER у скрипті доступні наступні масиви CGI скриптів:

  1. $ _GET - імена і значення аргументів, переданих серверу у запиті GET.
  2. $ _POST - імена і значення параметрів, надісланих на сервер у запиті POST під час надсилання форми.
  3. $ _COOKIE - імена і значення файлів куки, прикріплених до запиту.
  4. $ _REQUEST - всі елементи в $ _GET, $ _POST і $ _COOKIEnpm для запуску php-скриптів з nodejs через cgi. Цей модуль було розроблено для deskshell, щоб забезпечити безперешкодну обробку сценаріїв php.

Враховуючи, що розробник отримує запит в nodejs і має об 'єкт запиту, званий req, і об' єкт відповіді, званий res, він повинен використовувати цей додаток, як представлено нижче:

Таким чином запит на/test.php відповідатиме модулю php для скриптів CGI. Функція paramsForRequest зчитує об 'єкт запиту і встановлює правильні змінні середовища cgi для запиту. Це надається як окрема функція, тому за потреби можна додавати додаткові змінні запиту. Функція detectBinary у вікнах шукає додатковий додаток вузла php-bin-win32, який надає змінений php-файл. Цей код працює для deskshell і в тому випадку, якщо необхідно використовувати його для будь-яких інших цілей і додаткових функцій.

Перша програма

Щоб написати просту програму CGI в Perl, дотримуючись традиції, використовують фразу "привіт світ". Тут вона представлена повністю. Зберігають це у файл з назвою "hello" в каталозі cgi-bin і запускають його, вказавши URL-адресу:localhost/cgi-bin/hello у браузері. Користувач повинен побачити текст "Hello world" у браузері. Якщо ні, знайомляться з розділом boxout для зневаджування програм CGI, щоб отримати допомогу у відстеженні проблеми.

Це проста програма. Є лише кілька моментів, які відрізняють розробку CGI скриптів на Perl від стандартної програми, що запускається з командного рядка. Першою з них є опція -T на лінії shebang. Це перекладає Perl в режим "taint". У цьому режимі Perl автоматично ігноруватиме будь-які дані, що надходять від користувача, і не дозволить передавати ці дані в операційну систему до тих пір, поки вони не будуть очищені. У цьому сенсі taint-режим - хороша ідея.

Друга відмінність полягає у додаванні рядка, який друкує заголовок вмісту. Це буде перша проба користувача з протоколом CGI.

Всі програми CGI повинні виводити набір заголовків у браузер користувача. У більшості випадків єдиним заголовком, який потрібно буде повернути, є контент. Це повідомляє браузеру, які дані програма відправляє. У цьому прикладі повертається простий текст, тому тип вмісту був "text/plain".

Зазвичай повертають HTML, тому тип контенту буде "text/html". Немає причин, чому програма не може повернути більш складні дані, наприклад PNG ("image/png"). Набір заголовків повинен бути відокремлений від фактичних даних порожнім рядком. Це досягнуто шляхом друку двох символів нового рядка після фінального заголовка CGI скриптів на сервері. Також звертають увагу, що програма записує свій висновок до STDOUT.

Веб-сервер буде організований для збору будь-яких даних, записаних у STDOUT, і для передачі їх назад у браузер. Попередній приклад насправді нічого не робив. Немає необхідності мати програму CGI, яка відображає тільки фіксований текст. Це можна було б легко зробити за допомогою HTML-сторінки. Користувач повинен вчитися на прикладі того, що має динамічний вихід. Наприклад, сценарій, який друкує поточний час:

Цей скрипт працює за тим же принципом, що і останній, але видає системний час, використовуючи функцію при розробці CGI скриптів на Perl - "localtime" і друкує це значення. Кожен раз, коли перезавантажується скрипт, час буде оновлюватися. Ще раз цей скрипт виводить звичайний текст. Потрібно розглянути версію, яка повертає HTML:

Ця програма виглядає дещо складнішою, але насправді вона робить те ж саме, що і в попередньому прикладі. Додана складність виходить виключно з того факту, що повинні відображати повну HTML-сторінку.

Якщо користувач коли-небудь переглядав параметри свого браузера, ймовірно, бачив прапорці або перемикачі для включення або відключення Javascript і Java, але ніколи не бачив їх для CGI або PHP. Це тому, що Javascript і Java виконуються браузером (або ні, якщо користувач відключить їх). Браузер нічого не знає про CGI або PHP. Він просто отримує чистий HTML-код після виконання сценаріїв на сервері. Вбудований спосіб створення CGI скриптів - PHP, ColdFusion, ASP, в основному, використовується розробниками, що створюють веб-сторінки "front end", які будуть звертатися до баз даних "назад", наприклад, клієнт/серверні веб-програми.

Великою перевагою методу CGI є те, що скрипти зберігаються у файлах, тому є буквально тисячі вільно доступних скриптів, вже написаних і готових для завантаження і використання на веб-сайті. Це означає, що не потрібно вивчати мову сценаріїв, щоб отримати переваги від скриптів, хтось вже зробив цю роботу за користувача.