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

6 0 Новини високих технологій

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

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

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


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


Конфігурація і монтаж

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

Дозвіл файлів

Існує три типи доступу до даних з трьома різними дозволами для кожної групи.
CGI-скрипти: що це, способи створення
Сервери UNIX дозволять встановити різні рівні доступу. Важливо знати, які дозволу має сценарій:
  • Група - складається з доданих користувачів на сервері. При необхідності буде дозволено видалити їх дозвіл.
  • Користувач - складається тільки з власника файлу в групі, це обліковий запис хостингу.
  • Інша група складається з всіх інших аспектів на сервері.
  • Читання - дозволяє користувачам читати і розуміти дані, зазначені у файлі.
  • Write - дозвіл на запис дозволить користувачам розшифрувати і записати нову дату, видалити старі дані з архіву.
  • Execute - дозвіл на виконання, дозволить відправляти файл тільки в тому разі, якщо програма або Upload скрипт CGI exe виконуються. Попередньо переконуються, що скрипт буде працювати до заслання в режимі загального користування.
  • Приклад використання Application

    CGI-скрипти: що це, способи створення
    CGI - програма спрощує створення складних, високопродуктивних, багаторазових веб-додатків, виконання проектування, запис та розвиток веб-проектів. Воно розумно застосовує використання сучасних технологій і методів, які пов'язують розробника з будь-яким набором інструментів операційної системи або сервера.
    Має легкий вага (з точки зору використання пам'яті), що робить його підходящим для звичайних середовищ CGI, і високий вибір продуктивності в таких постійних середовищах, як FastCGI або mod_perl. Додаючи PLUGINS по мірі зростання потреб, можна використовувати складні функції, коли вони будуть потрібні, наприклад, потрібно написати додаток для пошуку через базу даних віджетів. Скрипт примірника - це те, що фактично викликається користувача веб-сервером. Це дуже маленький простий файл, який просто створює екземпляр інтерфейсу програми і викликає успадкований метод 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. Він повертає посилання на пакет додатків (клас). Він може приймати набір параметрів, як пари: ключ => значення.
    CGI-скрипти: що це, способи створення
    Цей метод може приймати деякі конкретні параметри:
  • TMPL_PATH - визначає шлях до каталогу шаблонів.
  • QUERY - дозволяє вказати вже створений об'єкт запиту CGI.pm.
  • 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 так само, як і до нового. Це повертає PSGI-сумісний coderef, використовуючи CGI ::: PSGI в якості об'єкта запиту. Щоб використовувати інший об'єкт запиту, створюють власний об'єкт run_as_psgi(), як показано нижче: run_as_psgi () my $psgi_aref = $webapp->run_as_psgi Точно так само, як run, друк, не виводить і не повертає структуру даних, необхідну специфікацією PSGI. Використовують це, якщо потрібно запустити додаток поверх обробника, сумісного з PSGI, наприклад, Plack. Кінцевий результат може виглядати так:
    CGI-скрипти: що це, способи створення
    Специфікація PSGI дозволяє повертати дескриптор файлу або посилання підпрограми замість байтових рядків. В режимі PSGI це підтримується безпосередньо CGI Application.

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

    CGI реалізує деякі методи, які, як очікується, будуть перевизначені шляхом їх реалізації в модулі підкласу. Ці методи полягають в наступному:
  • Настройка(). Цей метод викликається успадкованим методом конструктора new ().
  • Метод setup () слід використовувати для визначення наступного властивості методів.
  • CGI-скрипти: що це, способи створення
    Метод setup () може викликати будь-який з методів примірника користувальницького додатка. Ця функція є хорошим місцем для визначення властивостей, специфічних для програми, з допомогою $ webapp-> param (). Метод setup () може бути реалізований, як зображення нижче:
    CGI-скрипти: що це, способи створення
    Однак часто все, що повинно бути в 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 набагато простіше, ніж на інших мовах. Коли сервер починає виконання, він надає всю необхідну йому контекстну інформацію:
  • Повна інформація про запит, включаючи ім'я/IP віддаленого хоста, запитаний URL і його аргументи, рядок запиту (якщо вони є).
  • Куки, пов'язані з запитом.
  • У разі запиту POST, в результаті відправки веб-форми, імена і значення параметрів.
  • Основний приклад скрипта PHP

    Сценарій повинен виконати процес, а потім виводити допустимий HTML-код, включаючи заголовки HTTP. Приклад скрипта PHP:
    CGI-скрипти: що це, способи створення
    У цьому скрипті перша і остання рядки є HTML-кодом, а пропозиції PHP укладені у маркери, потім отримують скрипт з браузера, додаючи рядок запиту з двох аргументів «data1» і «data2». Крім глобальної змінної $ _SERVER в скрипті доступні наступні асоціативні масиви запуску CGI скриптів:
  • $ _GET - імена і значення аргументів, переданих сервера на запит GET.
  • $ _POST - імена і значення параметрів, відправлених на сервер в запиті POST, при відправці форми.
  • $ _COOKIE - імена і значення файлів cookie, прикріплених до запитом.
  • $ _REQUEST - всі елементи в $ _GET, $ _POST і $ _COOKIEnpm для запуску php-скриптів з nodejs через cgi. Цей модуль був розроблений для deskshell, щоб забезпечити безперешкодну обробку сценаріїв php.
  • Враховуючи, що розробник отримує запит в nodejs та має об'єкт запиту, званий req, і об'єкт відповіді, званий res, він повинен використовувати цей модуль, як наведено нижче:
    CGI-скрипти: що це, способи створення
    Таким чином запит на /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-скрипти: що це, способи створення
    Цей скрипт працює за тим же принципом, що і останній, але видає системний час, використовуючи функцію при розробці CGI скриптів на Perl - «localtime» і друкує значення. Кожен раз, коли перезавантажується скрипт, час буде оновлюватися. Ще раз цей скрипт виводить звичайний текст. Потрібно розглянути версію, яка повертає HTML:
    CGI-скрипти: що це, способи створення
    Ця програма виглядає трохи більш складним, але насправді вона робить те ж саме, що і в попередньому прикладі. Додана складність виходить виключно з того факту, що повинні відображати повну HTML-сторінку. Якщо користувач коли-небудь переглядав налаштування свого браузера, ймовірно, бачив прапорці або перемикачі для вмикання або відключення javascript і Java, але ніколи не бачив їх для CGI або PHP. Це тому, що javascript і Java виконуються браузером (або ні, якщо користувач вимикає їх). Браузер нічого не знає про CGI або PHP. Він просто отримує чистий HTML-код після виконання сценаріїв на сервері. Вбудований спосіб створення CGI скриптів PHP, ColdFusion, ASP, в основному, використовується розробниками, створює веб-сторінки «front end», які будуть звертатися до баз даних «назад», наприклад, клієнт/серверні веб-додатки. Великою перевагою методу CGI є те, що скрипти зберігаються у файлах, тому є буквально тисячі вільно доступних скриптів, вже написаних і готових для завантаження та використання на веб-сайті. Це означає, що не потрібно вивчати мову сценаріїв, щоб отримати переваги від скриптів, хто вже зробив цю роботу.