Середа CGI, Web-сервер, CGI, Інтернет-технології, статті

Середа CGI. Давайте підійдемо впритул до розгляду питання про CGI-програмуванні. Перш за все, для написання ефективно працюючих CGI-скриптів необхідно правильно налаштувати Web-сервер. Потім, з повною упевненістю, можна сміливо починати написання CGI-програм. Так, саме так – налаштувати Web-сервер. Адже новачкам схильне вважати, що варто тільки помістити CGI-програму в їх директорію (разом з сайтом), скажімо на тому ж narod.ru і їх можна буде викликати 😉

Web-сервер. При слові сервер в голові мимоволі виникає образ потужного постійно включеного комп’ютера завбільшки з книжкову шафу. Web-сервер це зовсім не просто шматок потужного заліза! Перш за все, це програма, яка приймає запити від клієнтів на кшталт GET index.html і видає відповідь. Або у відповіді буде дійсно index.html, 404, ще яке-небудь повідомлення про помилку, або …, та, загалом, що завгодно! Ця програма може бути запущена як демон, тобто працювати постійно, або просто, для експериментів Web-майстра на локальній машині. Як бачите, Web-сервера зовсім не обов’язково бути підключеним до глобальної мережі :-)) Він може працювати через спеціальний IP-адреса 127.0.0.1, що є петлею, тобто відправлені пакети приходять самому собі. При цьому сервер коректно працює: видає потрібні файли, запускає CGI-скрипти і т.п. Трохи відступивши від основної теми сайту, розглянемо настройку Web-сервера Apache for Linux. Поставляється Apache в стандартному дистрибутиві будь-якого Linux. Рекомендую Slackware Linux 7x. Всі налаштування Apache змінюються в файлі / path / to / apache / conf / httpd.conf. Основне на даному етапі – опис директорій і кореня сервера. Корінь Web-сервера є якийсь підкаталог файлової системи, від якого Web-сервер починає відлік доступних клієнтам файлів. Якщо коренем сервера у файловій системі є / home / httpd / html /, отже, на запит http://servername документ за замовчуванням (index.html) буде взято з / home / httpd / html / index.html. Ось типовий приклад секції опису кореня Web-сервера у файлі httpd.conf:

DocumentRoot "/home/httpd/html"

Далі відразу йде опис директорії-кореня:

<Directory "/home/httpd/html">
Options Indexes FollowSymLinks Includes
AllowOverride None
Order allow,deny
Allow from all
</Directory>

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

cgi-bin. Звичайно це назва носить директорія, з якої можна виконувати CGI-скрипти. Описується за принципом опису звичайної директорії у файлі httpd.conf. Невелика особливість відрізняє її від простої директорії: в список опцій додається директива ExecCGI, що означає дозвіл на запуск програм з даної директорії. Якщо директорія cgi-bin знаходитися вище кореня сервера у файловій системі, то використовується
ScriptAlias:

ScriptAlias /cgi-bin "/home/httpd/cgi-bin/"
<Directory "/home/httpd/cgi-bin/">
AllowOverride None
Options Indexes FollowSymLinks ExecCGI
Order allow,deny
Allow from all
</Directory>

Після того, як ви правильно описали директорію cgi-bin можна спробувати написати найпростіший CGI-скрипт, якщо Ви цього ще не зробили, і покласти його в директорію cgi-bin в файловій системі. Перевірте права доступу на директорію cgi-bin і на сам CGI-скрипт. Необхідно, щоб і директорія і скрипт мали включеним право на виконання від імені користувача Web-сервера (звичайно це nobody): rwxr-xr-x. Запустіть Web-сервер (httpd) та викличте скрипт з броузера http://servername/cgi-bin/first.cgi.

Змінні оточення. З вище написаного можна зробити висновок, що CGI-скрипт являє собою саму звичайну програму, в якій ми маємо сукупність коду, HTML-тегів і обов’язкове взаємодія з Web-сервером. Виявляється, що CGI-скрипти мають доступ до т.зв. змінним оточення сервера (environment variables), з яких можна видобувати вельми корисну інформацію про користувача, сервер і про з’єднанні. Майже відразу виникає питання про те, як прийняти дані, відправлені по методу GET. Відповідь на це питання як раз криється в ENV. Ви звертаєтеся до змінних оточення так: $ ENV {‘KEYWORD’} – з Perl, або getenv (“KEYWORD”) – З C / C + +, де KEYWORD-яке з ключових слів:

GATEWAY_INTERFACE

Специфікація CGI

SERVER_NAME

Ім’я сервера

SERVER_ADMIN

Адреса e-mail адміністратора

SERVER_SOFTWARE

Назва та версія сервера

SERVER_PROTOCOL

Версія протоколу HTTP або HTTPS

SERVER_PORT

Номер порту

REQUEST_METHOD

Метод (GET або POST)

PATH_INFO

Додаткова інформація скрипту (шлях)

SCRIPT_NAME

Ім’я скрипта

SCRIPT_FILENAME

Повний шлях до скрипта

QUERY_STRING

Рядок даних при методі GET

REMOTE_HOST

Машина клієнта

REMOTE_ADDR

IP-адреса клієнта

AUTH_TYPE

Тип аутентифікації

REMOTE_USER

Ім’я користувача

CONTENT_TYPE

Кодування даних з форми

CONTENT_LENGTH

Розмір приєднаних даних

PATH_TRANSLATED

Конвертована версія шляху

HTTP_USER_AGENT

Програма-броузер клієнта

HTTP_REFERER

ULR попередньої сторінки

HTTP_PROXY_CONNECTION

З’єднання через проксі

HTTP_IF_MODIFIED_SINCE

Якщо документ був змінений

HTTP_HOST

DNS ім’я хоста

HTTP_FROM

Адреса електронної пошти користувача

HTTP_COOKIE

Cookie броузера

HTTP_CONNECTION

Тип встановленої зв’язку

HTTP_ACCEPT

Перелік прийнятих mime-типів

Найбільш часто використовуваними змінними середовища є QUERY_STRING і REMOTE_ADDR. Часто необхідно заборонити повторне голосування або накрутку лічильника. Крім змінних оточення є ще корисні, а деколи необхідні можливості середовища CGI, вимагають настройки. Вони будуть докладно розглянуті в наступній статті …

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*