Se execută scripturi Web pe serverul apache

sarcină
Doriți să rulați programe în Perl, PHP sau Python într-un mediu web.

Soluția
Porniți-le cu serverul Apache.

discuție
Această secțiune descrie modul de configurare a Apache pentru a rula scripturile Perl, PHP și Python și prezintă exemple de scripturi web în fiecare dintre aceste limbi.







Directorul rădăcină Apache (vom presupune că acest director este / usr / local / apache) include următoarele directoare:

bin
Conține httpd, adică Apache, precum și alte programe.conf executabile
Fișierele de configurare, inclusiv httpd.conf, sunt fișierele principale utilizate de Apache.

htdocs
Rădăcina copacului de documente.

busteni
Fișierele jurnal.
Pentru a configura Apache pentru a rula scripturi, editați fișierul httpd.conf din directorul conf. În mod tipic, scenariile executabile sunt caracterizate fie de locația fie de extensia numelui fișierului. Locația fișierului poate sau nu să depindă de limbă.

Apache configurațiile conțin adesea un director cgi-bin în directorul rădăcină al serverului, unde sunt instalate scripturi care trebuie să fie executate ca programe externe.


Se specifică utilizând directiva ScriptAlias:

ScriptAlias ​​/ cgi-bin / / usr / local / apache / cgi-bin /

În această configurație, directorul cgi-bin poate conține scripturi scrise în orice limbă. Prin urmare, directorul este neutru în ceea ce privește limba, iar serverul Apache trebuie să înțeleagă într-un fel ce interpret să utilizeze pentru a executa fiecare script din director. Pentru a furniza astfel de informații, prima linie a scriptului ar trebui să înceapă cu caracterele #! și calea către programul care execută scriptul, precum și eventual unele opțiuni. De exemplu, un script care începe cu rândul de mai jos va fi pornit cu Perl, iar opțiunea -w îi spune lui Perl să emită avertismente cu privire la îndoială,
structuri lingvistice:

În UNIX, pentru ca scriptul să funcționeze corect, trebuie să faceți scriptul executabil (utilizând comanda chmod + x).


Linia rezultată #! este potrivit pentru un sistem în care Perl este instalat ca / ​​usr / bin / perl. Dacă interpretul Perl este instalat într-un alt director, schimbați linia în consecință. Dacă executați Windows și Perl este instalat ca D:

\ Perl \ bin \ perl.exe, apoi linia #! ar trebui să arate astfel:

#! D: \ Perl \ bin \ perl -w În utilizatorii de Windows, există o altă posibilitate - să atribuiți extensiei numele de fișier .pl interpretului Perl. Apoi, scenariile pot începe astfel:

#! perl -w
Directiva ScriptAlias ​​definește un director care poate fi folosit pentru scripturi scrise în orice limbă. Există, de asemenea, posibilitatea de a asocia un anumit procesor de limbă cu directorul, apoi orice script de director va fi considerat scris în acea limbă. De exemplu, pentru a atribui directorul / usr / local / apache / cgi-perl în directorul mod_perl, puteți configura Apache la:


Alias ​​/ cgi-perl / / usr / local / apache / cgi-perl /

SetHandler perl-script
PerlHandler Apache :: Registrul
PerlSendHeader activat
Opțiuni + ExecCGI

Apoi puteți apela scripturile Perl din director astfel:

Utilizarea mod_perl este dincolo de scopul discuției noastre, așa că nu vom mai vorbi despre ea.


Unele surse de informații utile despre mod_perl sunt date în Anexa C.

Directoarele utilizate exclusiv pentru stocarea de scripturi sunt de obicei situate în afara arborelui de documente Apache. O alternativă la utilizarea de directoare speciale pentru script-uri pot servi ca identificarea unor scenarii pentru a extinde numele de fișier: numele se potrivesc cu un anumit procesor de limbă extensia specificată. Apoi, astfel de fișiere pot fi plasate în arborele documentului oriunde. Acesta este de obicei cazul PHP. De exemplu, dacă serverul Apache este configurat cu construit în suport PHP prin intermediul modulului mod_php, puteți să-l arate că numele script care se termină cu .php, trebuie să fie interpretat ca scripturi PHP. Pentru aceasta, adăugați linia httpd.conf:

Aplicația AddType / x-httpd-php .php

Dacă acum instalați PHP script myscript.php în htdocs (directorul rădăcină al documentelor Apache), atunci URL-ul pentru a apela script-ul va fi:

Dacă PHP rulează ca un program extern stand-alone, este necesar să se informeze Apache, în cazul în care acesta trebuie să fie căutate. De exemplu, dacă executați Windows și PHP instalat ca D: \ php \ php.exe, a pus în httpd.conf de suflare urmează un șir de caractere (observați utilizarea căilor înainte slash caracter, și nu invers):

ScriptAlias ​​/ php / "D: / Php /"
Aplicația AddType / x-httpd-php .php
Aplicație de acțiune / x-httpd-php /php/php.exe

Prin listarea adreselor URL din exemple, presupun că script-urile Perl și Python sunt în directorul cgi-bin, iar scripturile PHP sunt în directorul mcb al arborelui dvs. de documente și au extensia .php. Adică URL-ul de script în aceste limbi va arăta astfel:

Dacă intenționați să utilizați aceste setări, asigurați-vă că directorul rădăcină Apache are un director cgi-bin, în directorul rădăcină al Apache - MCB director. Apoi, pentru a lucra cu script-uri web Perl sau Python ar trebui să le copiați în cgi-bin, si scripturi PHP - în mcb.Esli accesați scenariul de web, și în schimb obține o pagină cu o eroare, consultați jurnalul de erori Apache, din care puteți obțineți informații importante despre motivul pentru care scriptul nu funcționează. De obicei, jurnalul de erori este stocat în directorul jurnalele de fișiere error_log. Dacă nu puteți găsi un astfel de fișier, căutați în fișierul de configurare httpd.conf astfel cum este Directiva ErrorLog.

După ce configurați Apache pentru a rula scripturi, puteți începe să le scrieți pentru a genera pagini web. Restul acestei secțiuni vă spune cum să faceți acest lucru în Perl, PHP și Python. În exemplele pentru fiecare limbă, este stabilită o conexiune la serverul MySQL, interogarea SHOW TABLES este executată și rezultatul este afișat pe pagina web.

Scenariile enumerate aici indică module și biblioteci suplimentare care trebuie incluse în ele. (În cele ce urmează vom presupune că modulele corespunzătoare sunt deja conectate și arată doar fragmentele scenariilor.)







Perl
Mai jos este primul nostru script web din Perl, show_tables.pl. Creează un antet în funcție de tipul de conținut specificat. Un șir gol care separă antetul de corpul paginii și partea inițială a paginii. Scriptul primește apoi și afișează o listă de tabele din baza de date a cărții de bucate. După lista de tabele, se afișează etichetele HTML finale care închid pagina:

#! / usr / bin / perl -w
# show_tables.pl - Rulați interogarea SHOW TABLES și afișați rezultatul,
# generarea HTML direct
utilizați stricte;
utilizați lib qw (/ usr / local / apache / lib / perl);
utilizați cartea de bucate;
# Imprimați titlul, linia goală și partea de sus a paginii
imprimare

Tabele în baza de date de carte de bucate

Tabele în baza de date cu cărți de bucate:


EOF
# Conectați-vă la baza de date, afișați lista de tabele, deconectați-vă
meu $ dbh = Carte de bucate :: connect ();
$ sth = $ dbh-> pregătesc ("SHOW TABLES");
$ sth-> execute ();
în timp ce (my @row = $ sth-> fetchrow_array ())
tipăriți "$ row [0]
\ n ";>
$ dbh-> deconectare ();
# Imprimați etichetele trailing
imprimare

EOF
ieșire (0);

Pentru a testa scriptul, plasați-l în directorul cgi-bin și apelați-l din browser ca acesta:

În scriptul show_tables.pl, HTML-ul este generat prin includerea de literali reprezentând etichete în instrucțiunile de ieșire. O altă abordare a generării paginilor web este implementată în modulul CGI.pm, care simplifică crearea de scripturi web, fără a fi nevoie de scrierea literală a etichetelor. Modulul CGI.pm oferă atât o interfață orientată pe obiecte, cât și o funcție funcțională, permițându-vă să creați pagini web prin oricare dintre aceste metode. Scriptul show_tables_oo.pl utilizează o interfață orientată pe obiecte pentru a crea același raport ca show_tables.pl:

#! / usr / bin / perl -w
# show_tables_oo.pl - Rulați interogarea SHOW TABLES și afișați rezultatul,
# folosind interfața orientată pe obiecte CGI.pm
utilizați stricte;
utilizați lib qw (/ usr / local / apache / lib / perl);
utilizați CGI;
utilizați cartea de bucate;
# Creați un obiect CGI pentru a accesa metodele CGI.pm
meu $ cgi = CGI nou;
# Imprimați titlul, linia goală și partea de sus a paginii
print $ cgi-> antet ();
print $ cgi-> start_html (-title => "Tabele în baza de date pentru carte de bucate", -bgcolor => "alb");
print $ cgi-> p ("Tabele în baza de date de carte de bucate:");
# Conectați-vă la baza de date, afișați lista de tabele, deconectați-vă
meu $ dbh = Carte de bucate :: connect ();
$ sth = $ dbh-> pregătesc ("SHOW TABLES");
$ sth-> execute ();
în timp ce (my @row = $ sth-> fetchrow_array ())
tip $ row [0]. $ cgi-> br ();
>
$ dbh-> disconnect (); # Imprimați etichetele trailing
print $ cgi-> end_html ();
ieșire (0);

Scriptul include modulul CGI.pm, utilizând directiva de utilizare CGI, apoi creează obiectul CGI $ cgi, care utilizează diverse metode pentru generarea de cod HTML. Metoda header () creează un antet Content-Type. iar metoda start_html () formează partea inițială a paginii până la eticheta de deschidere (corp). După crearea primei părți a paginii, scriptul primește informații de la serverul de bază de date și îl afișează. Numele fiecărui tabel este însoțit de o etichetă
, format de apel la metoda br (). Metoda end_html () emite etichetele finale și. Instalând scriptul în directorul cgi-bin și sunând-l din browser, veți vedea că generează aceeași pagină ca show_tables.pl.

Funcțiile CGI.pm pot lua mai mulți parametri, dintre care unele sunt opționale. Pentru a vă permite să specificați numai parametrii necesari, CGI.pm vă permite să utilizați notația -name => în lista de parametri. De exemplu, în apelul pentru start_html (), parametrul titlului atribuie titlul paginii, iar bgcolor specifică culoarea de fundal. Valoarea notation -name => vă permite să specificați parametrii în orice ordine, astfel încât următoarele două instrucțiuni sunt echivalente:

print $ cgi-> start_html (-title => "Titlul paginii mele", -bgcolor => "alb");
print $ cgi-> start_html (-bgcolor => "alb", -title => "Titlul paginii mele");

Pentru a utiliza interfața funcțională, mai degrabă decât orientată pe obiecte CGI.pm, trebuie să schimbați puțin scripturile. Linia de utilizare, referindu-se la CGI.pm, importează numele metodelor în spațiul de nume script și le puteți numi ca funcții fără a crea un obiect CGI. De exemplu, pentru a importa cele mai comune metode, scriptul ar trebui să conțină o astfel de teză:

utilizați CGI qw (: standard);

Scriptul show_tables_fc.pl este echivalentul show_tables_oo.pl discutat doar, dar scris folosind apeluri funcționale. Se folosesc aceleași metode CGI.pm, dar sunt numite funcții independente și nu prin obiectul $ cgi:

#! / usr / bin / perl -w
# show_tables_fc.pl - Executați interogarea SHOW TABLES și afișați rezultatul,
# utilizând interfața funcțională CGI.pm
utilizați stricte;
utilizați lib qw (/ usr / local / apache / lib / perl);
utilizați CGI qw (: standard); # nume de metode standard de import
# în spațiul de nume al scriptului
utilizați cartea de bucate;
# Imprimați titlul, linia goală și partea de sus a paginii
print header (); print start_html (-title => "Tabele în baza de date pentru carte de bucate", -bgcolor => "alb");
print p ("Tabele în baza de date pentru cărți de bucate:");
# Conectați-vă la baza de date, afișați lista de tabele, deconectați-vă
meu $ dbh = Carte de bucate :: connect ();
$ sth = $ dbh-> pregătesc ("SHOW TABLES");
$ sth-> execute ();
în timp ce (my @row = $ sth-> fetchrow_array ())
tip $ row [0]. br ();
>
$ dbh-> deconectare ();
# Imprimați etichetele trailing
print end_html ();
ieșire (0);

Plasați scriptul show_tables_fc.pl în directorul cgi-bin și asigurați-vă că generează aceeași ieșire ca show_tables_oo.pl.

Mai departe, în cartea pentru scripturi web Perl, este utilizată interfața funcțională CGI.pm. Dacă sunteți interesat de mai multe informații despre CGI.pm, puteți rula următoarele comenzi din linia de comandă care va oferi acces la documentația existentă:

% CID pentru perdoc
% perldoc CGI :: Carp

Alte surse de informații despre acest modul, imprimate și disponibile pe Internet, sunt prezentate în Anexa C.

PHP
În mod surprinzător, pentru o limbă bazată pe Web, PHP nu oferă comenzi rapide pentru etichete. Dar, deoarece PHP este un limbaj încorporat, puteți să scrieți literalmente HTML într-un script fără să utilizați imprimarea. Luați în considerare scriptul show_tables.php, care comută între modurile HTML și PHP:




Tabele în baza de date de carte de bucate

(corp bgcolor = "alb")

Tabele în baza de date cu cărți de bucate:

Pentru a testa scriptul, puneți-l în directorul mcb al arborelui documentului serverului web și apelați-l astfel:

Spre deosebire de versiunile Perl ale scripturilor de ieșire din lista tabelelor MySQL, scriptul PHP nu conține codul pentru afișarea antetului Content-Type. deoarece PHP o formează automat. (Dacă nu sunteți confortabil cu această stare de lucruri și doriți să afișați anteturile, consultați PHP (consultați manualul PHP) pentru o descriere a funcției.)

Cu excepția tagurilor de alimentare cu linie, tot conținutul HTML din scriptul show_tables.php este plasat în afara etichetelor. astfel că interpretul PHP o transmite fără interpretare. Iată versiunea scriptului care formează toate codurile HTML cu ajutorul tipăririi:

\ n ");
tipăriți ("\ n");
print ("Tabele în baza de date pentru carte de bucate \ n");
tipăriți ("\ n");
tipăriți ("\ n");
print ("

Tabele în baza de date cu cărți de bucate:

\ n ");
# Conectați-vă la baza de date, afișați lista de tabele, deconectați-vă
$ conn_id = cookbook_connect ();
$ result_id = mysql_query ("SHOW TABLES", $ conn_id);
în timp ce (lista ($ tbl_name) = mysql_fetch_row ($ result_id))
print ("$ tbl_name
\ n ");
mysql_free_result ($ rezultat_id);
mysql_close ($ conn_id);
tipăriți ("\ n");
tipăriți ("\ n");
?>

Uneori este rezonabil să se aplice o abordare, câteodată una și uneori chiar și în ambele scenarii. Dacă secțiunea HTML nu se referă la nici o valoare a variabilelor și a expresiilor, atunci este preferabil să o scrieți în modul HTML. În caz contrar, este mai bine să utilizați clauza de imprimare sau ecou pentru a evita frecvent comutarea între HTML și PHP.

piton
Instalarea standard Python include modulele cgi și urllib utile pentru programarea web. Cu toate acestea, de fapt, nu avem nevoie de ele încă, pentru că singurul lucru pe care primul script web îl va face în Python este generarea de cod HTML simplu. Să scriem în Python versiunea scriptului care listează tabelele MySQL:

#! / usr / bin / python
# show_tables.py - Rulați interogarea SHOW TABLES și afișați rezultatul
import sys
sys.path.insert (0, "/ usr / local / apache / lib / python")
importați MySQLdb
carte de import import
# Imprimați titlul, linia goală și partea de sus a paginii
print "" Tip de conținut: text / html


Tabele în baza de date de carte de bucate

(corp bgcolor = "alb")

Tabele în baza de date cu cărți de bucate:


"" ""
# Conectați-vă la baza de date, afișați lista de tabele, deconectați-vă
conn = Cookbook.connect ()
cursor = conn.cursor ()
cursor.execute ("SHOW TABLES")
pentru (tbl_name,) în cursor.fetchall ():
print tbl_name + "
"
cursor.close ()
conn.close ()
# Imprimați etichetele trailing
print "" ""
(/ organism)

"" ""

Puneți scriptul în directorul Apache cgi-bin și apelați-l astfel:







Trimiteți-le prietenilor: