Τι είναι Îνα αÏÏείο CGI;
Îνα αÏÏείο CGI είναι γνÏÏÏÏ ÏÏ Î´ÎÏμη ενεÏγειÏν Common Gateway Interface ÏÎ¿Ï ÏÏηÏιμοÏοιείÏαι αÏÏ Îναν διακομιÏÏή web για Ïην εκÏÎλεÏη ενÏÏ ÎµÎ¾ÏÏεÏÎ¹ÎºÎ¿Ï ÏÏογÏάμμαÏÎ¿Ï Î³Î¹Î± Ïην εÏεξεÏγαÏία ÏÏν αιÏημάÏÏν ÏÏν ÏÏηÏÏÏν. Το ÏενάÏιο ÏÎ¿Ï Î±ÏοθηκεÏÏηκε Ïε Îνα αÏÏείο με εÏÎκÏαÏη .cgi είναι ÏÏ Î½Î®Î¸ÏÏ Î³ÏαμμÎνο Ïε γλÏÏÏÎµÏ ÏÏογÏαμμαÏιÏÎ¼Î¿Ï C ή Perl. ÎίÏε ειÏαÏθεί αÏÏ ÏÎ¹Ï ÏÏÏÏÎµÏ Î¼ÎÏÎµÏ ÏÎ¿Ï ÎÏÏοÏ, ÏÏαν οι ÏÏογÏαμμαÏιÏÏÎÏ ÎÏÏÎ¿Ï Î®Î¸ÎµÎ»Î±Î½ να ÏÏ Î½Î´ÎÏÎ¿Ï Î½ βάÏÎµÎ¹Ï Î´ÎµÎ´Î¿Î¼ÎνÏν με ÏÎ¿Ï Ï Î´Î¹Î±ÎºÎ¿Î¼Î¹ÏÏÎÏ ÎÏÏÎ¿Ï ÏÎ¿Ï Ï. ÎÎ½Î±Ï Î´Î¹Î±ÎºÎ¿Î¼Î¹ÏÏÎ®Ï ÏÎ¿Ï Ï ÏοÏÏήÏιζε μια κοινή ÏÏλη μεÏÎ±Î¾Ï Î´Î¹Î±ÎºÎ¿Î¼Î¹ÏÏή ÎÏÏÎ¿Ï ÎºÎ±Î¹ βάÏεÏν δεδομÎνÏν ήÏαν καÏÎ¬Î»Î»Î·Î»Î¿Ï Î³Î¹Î± Ïην εκÏÎλεÏη ÏÎ¿Ï ÎºÏδικα CGI.
ÎοÏÏή αÏÏÎµÎ¯Î¿Ï CGI
Τα ÏενάÏια CGI ÏÏηÏιμοÏοιοÏνÏαι αÏÏ Ïον διακομιÏÏή ÎÏÏÎ¿Ï Î³Î¹Î± να Î´Î¹ÎµÏ ÎºÎ¿Î»ÏÎ½Î¿Ï Î½ Ïον ιδιοκÏήÏη να διαμοÏÏÏÏει Ïον ÏÏÏÏο ÏειÏιÏÎ¼Î¿Ï Î¼Î¹Î±Ï Î´Î¹ÎµÏÎ¸Ï Î½ÏÎ·Ï URL. ΠδιαδικαÏία ÏÏ Î½Î®Î¸ÏÏ Î³Î¯Î½ÎµÏαι με Ïην εÏιÏήμανÏη ενÏÏ Î½ÎÎ¿Ï ÎºÎ±ÏαλÏÎ³Î¿Ï (ÏÏÎ¿Ï Î²ÏίÏκονÏαι ÎºÏ ÏίÏÏ Ïα ÎγγÏαÏα) ÏÏ ÏÎ¿Ï ÏεÏιÎÏει ÏενάÏια CGI. Το κοινÏÏ Î³Î½ÏÏÏÏ Ïνομά ÏÎ¿Ï ÎµÎ¯Î½Î±Î¹ cgi-bin. Îια ÏαÏάδειγμα, Ïο /usr/local/apache/htdocs/cgi-bin θα μÏοÏοÏÏε να εÏιλεγεί ÏÏ ÎºÎ±ÏÎ¬Î»Î¿Î³Î¿Ï CGI ÏÏον διακομιÏÏή Web. ÎÏαν Îνα ÏÏÏγÏαμμα ÏεÏιήγηÏÎ·Ï ÎÏÏÎ¿Ï Î¶Î·Ïά μια διεÏÎ¸Ï Î½Ïη URL ÏÎ¿Ï Î¿Î´Î·Î³ÎµÎ¯ Ïε Îνα αÏÏείο ενÏÏÏ ÏÎ¿Ï ÎºÎ±ÏαλÏÎ³Î¿Ï CGI, ÏÏÏε, ανÏί αÏλÏÏ Î½Î± ÏÏαλεί Î±Ï ÏÏ Ïο αÏÏείο (/el/usr/local/apache/htdocs/cgi-bin/printenv.pl) ÏÏο ÏÏÏγÏαμμα ÏεÏιήγηÏÎ·Ï ÎÏÏοÏ, Ïο HTTP ο διακομιÏÏÎ®Ï ÎµÎºÏελεί Ïο καθοÏιÏμÎνο ÏενάÏιο και εÏιÏÏÏÎÏει Ïην Îξοδο ÏÎ¿Ï ÏεναÏÎ¯Î¿Ï ÏÏο ÏÏÏγÏαμμα ÏεÏιήγηÏÎ·Ï Web. Îν ολίγοιÏ, οÏιδήÏοÏε αÏοÏÏÎλλεÏαι η δÎÏμη ενεÏγειÏν CGI Ïε ÏÏ Ïική Îξοδο μεÏαÏÎÏεÏαι ÏÏον ÏελάÏη Web ανÏί να εμÏανίζεÏαι Ïε Îνα ÏεÏμαÏÎ¹ÎºÏ ÏαÏαθÏÏÎ¿Ï .
ΠαÏάδειγμα CGI
ÎÎºÎ¿Î»Î¿Ï Î¸ÎµÎ¯ Ïο ÏενάÏιο CGI γÏαμμÎνο Ïε Perl, Ïο οÏοίο εμÏανίζει ÏÎ»ÎµÏ ÏÎ¹Ï Î¼ÎµÏαβληÏÎÏ ÏεÏιβάλλονÏÎ¿Ï ÏÎ¿Ï ÎÏÎ¿Ï Î½ ÏεÏάÏει αÏÏ Ïον διακομιÏÏή Web:
#!/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};
}
Î ÎÎ¾Î¿Î´Î¿Ï Î¸Î± είναι ÏÏÏÏ Î· ÏαÏακάÏÏ:
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"
ΧÏήÏÎµÎ¹Ï ÏεναÏίÏν CGI
Τα αÏÏεία CGI ÏÎ¿Ï ÏεÏιÎÏÎ¿Ï Î½ Ïα ÏενάÏια CGI ÏÏηÏιμοÏοιοÏνÏαι ÏÏ Î½Î®Î¸ÏÏ Î³Î¹Î± Ïην εÏεξεÏγαÏία δεδομÎνÏν ειÏÏÎ´Î¿Ï Î±ÏÏ Ïον ÏÏήÏÏη και Ïην ÏαÏαγÏγή ÏÏν ÏÏεÏικÏν δεδομÎνÏν εξÏÎ´Î¿Ï . Î Ï Î»Î¿ÏοίηÏη ενÏÏ wiki είναι Îνα αÏÏ Ïα ÏαÏαδείγμαÏα ÏÎ¿Ï ÏÏογÏάμμαÏÎ¿Ï CGI. Îάν ο ÏαÏάγονÏÎ±Ï ÏÏήÏÏη ÏÏείλει Îνα αίÏημα για Ïο Ïνομα Î¼Î¹Î±Ï ÎºÎ±ÏαÏÏÏηÏηÏ, ο διακομιÏÏÎ®Ï Web εκÏελεί Ïο ÏÏÏγÏαμμα CGI. Το ÏÏÏγÏαμμα CGI ÏαίÏνει Ïην Ïηγή ÏÎ·Ï ÏÎµÎ»Î¯Î´Î±Ï Î±Ï ÏÎ®Ï ÏÎ·Ï ÎºÎ±ÏαÏÏÏηÏηÏ, Ïη μεÏαÏÏÎÏει Ïε HTML και εκÏÏ ÏÏνει Ïο αÏοÏÎλεÏμα. ΠδιακομιÏÏÎ®Ï Web λαμβάνει Ïην Îξοδο αÏÏ Ïο ÏÏÏγÏαμμα CGI και Ïην εÏιÏÏÏÎÏει ÏÏον ÏαÏάγονÏα ÏÏήÏÏη. ΣÏη ÏÏ Î½ÎÏεια, εάν ο ÏαÏάγονÏÎ±Ï ÏÏήÏÏη καλÎÏει Ïη λειÏÎ¿Ï Ïγία εÏεξεÏγαÏÎ¯Î±Ï ÎºÎ¬Î½Î¿Î½ÏÎ±Ï ÎºÎ»Î¹Îº ÏÏο ÎºÎ¿Ï Î¼Ïί “ÎÏεξεÏγαÏία Ïελίδαϔ, Ïο ÏÏÏγÏαμμα CGI εμÏανίζει μια ÏεÏιοÏή κειμÎÎ½Î¿Ï HTML ή άλλο ÏÏοιÏείο ελÎγÏÎ¿Ï ÎµÏεξεÏγαÏÎ¯Î±Ï Î¼Îµ Ïα ÏεÏιεÏÏμενα ÏÎ·Ï ÏελίδαÏ. ΤÎλοÏ, εάν ο ÏαÏάγονÏÎ±Ï ÏÏήÏÏη κάνει κλικ ÏÏο ÎºÎ¿Ï Î¼Ïί “ÎημοÏÎ¯ÎµÏ Ïη Ïελίδαϔ, Ïο ÏÏÏγÏαμμα CGI μεÏαÏÏÎÏει Ïο ενημεÏÏμÎνο HTML ÏÏην Ïηγή ÏÎ·Ï ÏÎµÎ»Î¯Î´Î±Ï Î±Ï ÏÎ®Ï ÏÎ·Ï ÎºÎ±ÏαÏÏÏιÏÎ·Ï ÎºÎ±Î¹ Ïο αÏοθηκεÏει.