Czym jest plik CGI?
Plik CGI jest znany jako skrypt Common Gateway Interface, który jest używany przez serwer WWW do uruchamiania zewnÄtrznego programu do przetwarzania Å¼Ä daÅ użytkowników. Skrypt zapisany w pliku z rozszerzeniem .cgi jest zazwyczaj napisany w jÄzykach programowania C lub Perl. ZostaÅ wprowadzony od poczÄ tków sieci Web, kiedy twórcy stron internetowych chcieli ÅÄ czyÄ bazy danych ze swoimi serwerami sieciowymi. Serwer, który obsÅugiwaÅ wspólnÄ bramÄ miÄdzy serwerem WWW a bazami danych, dobrze nadawaÅ siÄ do wykonania kodu CGI.
Format pliku CGI
Skrypty CGI sÄ używane przez serwer WWW, aby uÅatwiÄ wÅaÅcicielowi skonfigurowanie sposobu obsÅugi adresu URL. Procedura zwykle polega na oznaczeniu nowego katalogu (gdzie gÅównie znajdujÄ siÄ dokumenty) jako zawierajÄ cego skrypty CGI; jego powszechnie znana nazwa to cgi-bin. Na przykÅad /usr/local/apache/htdocs/cgi-bin może zostaÄ wybrany jako katalog CGI na serwerze WWW. Kiedy przeglÄ darka internetowa Å¼Ä da adresu URL wskazujÄ cego plik w katalogu CGI, zamiast po prostu wysÅaÄ ten plik (/pl/usr/local/apache/htdocs/cgi-bin/printenv.pl) do przeglÄ darki internetowej, HTTP serwer wykona okreÅlony skrypt i zwróci dane wyjÅciowe skryptu do przeglÄ darki internetowej. Krótko mówiÄ c, wszystko, co skrypt CGI jest wysyÅane na standardowe wyjÅcie, jest przesyÅane do klienta WWW zamiast pokazywane w terminalu okna.
PrzykÅad CGI
Poniższy skrypt CGI napisany w Perlu, który pokazuje wszystkie zmienne Årodowiskowe przekazywane przez serwer WWW:
#!/usr/bin/env perl
=head1 DESCRIPTION
printenv â a CGI program that just prints its environment
=cut
print "Content-Type: text/plain\n\n";
for my $var ( sort keys %ENV ) {
printf "%s=\"%s\"\n", $var, $ENV{$var};
}
Dane wyjÅciowe bÄdÄ wyglÄ daÄ nastÄpujÄ co:
COMSPEC="C:\Windows\system32\cmd.exe"
DOCUMENT_ROOT="C:/Program Files (x86)/Apache Software Foundation/Apache2.4/htdocs"
GATEWAY_INTERFACE="CGI/1.1"
HOME="/home/SYSTEM"
HTTP_ACCEPT="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
HTTP_ACCEPT_CHARSET="ISO-8859-1,utf-8;q=0.7,*;q=0.7"
HTTP_ACCEPT_ENCODING="gzip, deflate, br"
HTTP_ACCEPT_LANGUAGE="en-us,en;q=0.5"
HTTP_CONNECTION="keep-alive"
HTTP_HOST="example.com"
HTTP_USER_AGENT="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:67.0) Gecko/20100101 Firefox/67.0"
PATH="/home/SYSTEM/bin:/bin:/cygdrive/c/progra~2/php:/cygdrive/c/windows/system32:..."
PATHEXT=".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC"
PATH_INFO="/foo/bar"
PATH_TRANSLATED="C:\Program Files (x86)\Apache Software Foundation\Apache2.4\htdocs\foo\bar"
QUERY_STRING="var1=value1&var2=with%20percent%20encoding"
REMOTE_ADDR="127.0.0.1"
REMOTE_PORT="63555"
REQUEST_METHOD="GET"
REQUEST_URI="/cgi-bin/printenv.pl/foo/bar?var1=value1&var2=with%20percent%20encoding"
SCRIPT_FILENAME="C:/Program Files (x86)/Apache Software Foundation/Apache2.4/cgi-bin/printenv.pl"
SCRIPT_NAME="/cgi-bin/printenv.pl"
SERVER_ADDR="127.0.0.1"
SERVER_ADMIN="(server admin's email address)"
SERVER_NAME="127.0.0.1"
SERVER_PORT="80"
SERVER_PROTOCOL="HTTP/1.1"
SERVER_SIGNATURE=""
SERVER_SOFTWARE="Apache/2.4.39 (Win32) PHP/7.3.7"
SYSTEMROOT="C:\Windows"
TERM="cygwin"
WINDIR="C:\Windows"
Zastosowania skryptów CGI
Pliki CGI zawierajÄ ce skrypty CGI sÄ zwykle używane do przetwarzania danych wejÅciowych od użytkownika i generowania odpowiednich danych wyjÅciowych. Implementacja wiki jest jednym z przykÅadów programu CGI. JeÅli agent użytkownika wyÅle Å¼Ä danie nazwy wpisu, serwer WWW uruchamia program CGI. Program CGI pobiera źródÅo strony tego wpisu, konwertuje je do formatu HTML i drukuje wynik. Serwer WWW odbiera dane wyjÅciowe z programu CGI i zwraca je do klienta użytkownika. NastÄpnie, jeÅli agent użytkownika wywoÅa funkcjÄ edycji, klikajÄ c przycisk âEdytuj stronÄâ, program CGI wyÅwietli pole tekstowe HTML lub innÄ kontrolkÄ edycji z zawartoÅciÄ strony. Wreszcie, jeÅli agent użytkownika kliknie przycisk âOpublikuj stronÄâ, program CGI konwertuje zaktualizowany kod HTML na źródÅo strony tego wpisu i zapisuje go.