Kas yra CGI failas?
CGI failas yra žinomas kaip Common Gateway Interface scenarijus, kurį žiniatinklio serveris naudoja iÅ¡orinei programai paleisti, kad apdorotų vartotojo užklausas. Scenarijus, iÅ¡saugotas faile su plÄtiniu .cgi, paprastai yra paraÅ¡ytas C arba Perl programavimo kalbomis. Jis buvo pristatytas nuo pirmųjų žiniatinklio dienų, kai žiniatinklio kÅ«rÄjai norÄjo prijungti duomenų bazes prie savo žiniatinklio serverių. Serveris, palaikantis bendrus vartus tarp žiniatinklio serverio ir duomenų bazių, puikiai tiko vykdyti CGI kodÄ .
CGI failo formatas
CGI scenarijus naudoja žiniatinklio serveris, kad savininkas galÄtų konfigÅ«ruoti, kaip bus tvarkomas URL. ProcedÅ«ra paprastai atliekama pažymint naujÄ katalogÄ (kur daugiausia yra dokumentai), kuriame yra CGI scenarijų; jos plaÄiai žinomas pavadinimas yra cgi-bin. Pavyzdžiui, /usr/local/apache/htdocs/cgi-bin gali bÅ«ti pasirinktas kaip CGI katalogas žiniatinklio serveryje. Kai žiniatinklio narÅ¡yklÄ praÅ¡o URL, nukreipianÄio į failÄ CGI kataloge, užuot tiesiog siuntÄs tÄ failÄ (/usr/local/apache/htdocs/cgi-bin/printenv.pl) į žiniatinklio narÅ¡yklÄ, HTTP serveris vykdo nurodytÄ scenarijų ir grÄ Å¾ina scenarijaus iÅ¡vestį į žiniatinklio narÅ¡yklÄ. Trumpai tariant, viskas, kas CGI scenarijus siunÄiama į standartinÄ iÅ¡vestį, perkeliama į žiniatinklio klientÄ , o ne rodoma lango terminale.
CGI pavyzdys
Po CGI scenarijaus, parašyto Perl, kuris rodo visus aplinkos kintamuosius, kuriuos perduoda žiniatinklio serveris:
#!/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};
}
Išvestis bus tokia:
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 scenarijų naudojimas
CGI failai, kuriuose yra CGI scenarijų, paprastai naudojami apdoroti įvesties duomenis iÅ¡ vartotojo ir sukurti atitinkamus iÅ¡vesties duomenis. Wiki diegimas yra vienas iÅ¡ CGI programos pavyzdžių. Jei vartotojo agentas siunÄia užklausÄ dÄl įraÅ¡o pavadinimo, žiniatinklio serveris paleidžia CGI programÄ . CGI programa gauna to įraÅ¡o puslapio Å¡altinį, konvertuoja jį į HTML ir iÅ¡spausdina rezultatÄ . Žiniatinklio serveris gauna iÅ¡vestį iÅ¡ CGI programos ir grÄ Å¾ina jÄ vartotojo agentui. Tada, jei vartotojo agentas iÅ¡kvieÄia redagavimo funkcijÄ spustelÄdamas mygtukÄ Redaguoti puslapį, CGI programa parodo HTML teksto sritį arba kitÄ redagavimo valdiklį su puslapio turiniu. Galiausiai, jei vartotojo agentas spusteli mygtukÄ Paskelbti puslapį, CGI programa konvertuoja atnaujintÄ HTML į to įraÅ¡o puslapio Å¡altinį ir iÅ¡saugo jį.