CGI

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

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

Всі скрипти, як правило, розміщують в каталог cgi-bin сервера, однак це не є обов'язковою умовою: скрипт може знаходитися де завгодно. Також може знадобитися налаштування вебсервера для роботи із програмою-шлюзом. В Apache, наприклад, таке налаштування може бути виконане у загальному файлі налаштувань httpd.conf або за допомогою файлу .htaccess в тому каталозі, де розміщено скрипт. Також Apache дозволяє запускати всі скрипти із розширенням .cgi.

CGI був одним з найпоширеніших засобів створення динамічних вебсторінок.

Призначення інтерфейсу CGI[ред. | ред. код]

Інтерфейс CGI виконує функції шлюзу між різними програмами, встановленими на web-сервері, і браузерами користувачів. Коли браузер запитує певний ресурс, web-сервер запускає програму, яка вже повертає результат в браузер користувача. Використання CGI-програм потрібно, коли необхідно в браузері користувача показати сторінку, сформовану на основі будь-яких дій користувача. Наприклад, коли користувачі вводять в форму будь-які дані, а на їх основі формується посилається вам сторінка. CGI-програма може також визначити IP-адресу вашого комп'ютера в мережі, і на основі його визначити вашу країну, в результаті передавши вам html документ вашою рідною мовою!

Механізм CGI перенаправляє висновок програми на web-сервер, а той, у свою чергу, в браузер користувача. З точки зору програми немає нічого незвичайного — вона лише виводить інформацію. Абсолютно будь-яка програма не може бути CGI-програмою, тому що перед своїм висновком вона повинна вивести певні заголовки сервера — вказати хоча б тип виведеної інформації. Наприклад, якщо користувач хоче вивести картинку, він повинен відправити заголовок Content-type: image / gif. Якщо CGI-програмі потрібно передати параметри, то робиться це дуже просто — як і у випадку зі звичайною програмою. Наприклад, потрібно передати рядок запиту name=Taras&surname=Grygorovych сценарієм cgi.exe. Для цього необхідно викликати програму cgi.exe з вказаною рядком запиту: cgi.exe name=Taras&surname=Grygorovych.

Розділяють параметри за допомогою символу &. PHP розбирає параметри рядка запиту самостійно.

Такий спосіб посилки параметрів сценарієм (коли дані містяться в командний рядок URL) називається методом GET. Фактично, навіть якщо не передається ніяких параметрів (наприклад, при завантаженні статичної сторінки), все одно застосовується метод GET. Однак, існує ще один поширений спосіб — передача параметрів запиту методом POST.

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

Способи створення CGI-програм[ред. | ред. код]

Наведемо приклад CGI-програми на C:

#include <time.h> // Потрібна для ініціалізації функції rand () #include <stdio.h> // Включаємо підтримку функцій введення / виводу #include <stdlib.h> // для підтримки функції rand ()  // Головна функція. Саме вона і запускається при старті сценарію. void main(void) {     // ініціалізуємо генератор випадкових чисел     int Num; time_t t; srand(time(&t));     // до Num записується випадкове число від 0 до 9     Num = rand()%10;     // далі вводимо заголовки відповіді. Тип - html-документ     printf("Content-type: text/html\n");     // заборона кешування     printf("Pragma: no-cache\n");     // порожній заголовок     printf("\n");     // виводимо текст документа - його ми побачимо в браузері     printf("<html><body>");     printf("Випадкове число в діапазоні 0-9: %d",Num);     printf("</body></html>"); } 

Посилання[ред. | ред. код]

Див. також[ред. | ред. код]