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. Чтение - позволяет пользователям читать и понимать данные, указанные в файле.
  5. Write - разрешение на запись позволит пользователям расшифровать и записать новую дату, удалить старые данные из архива.
  6. 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 так же, как и к новому. Это возвращает PSGI-совместимый coderef, используя 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 - имена и значения файлов 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 является то, что скрипты хранятся в файлах, поэтому есть буквально тысячи свободно доступных скриптов, уже написанных и готовых для загрузки и использования на веб-сайте. Это означает, что не нужно изучать язык сценариев, чтобы получить преимущества от скриптов, кто-то уже сделал эту работу за пользователя.

Комментарии