Webszervert futtató szkriptek apache

feladat
Azt szeretnénk, hogy a program futtatását Perl, PHP vagy Python webes környezetben.

döntés
Futtatni őket az Apache szerver.

megbeszélés
Ez a rész leírja, hogyan kell beállítani az Apache fut Perl script, PHP, Python, és példákat mutat webes szkriptek az egyes nyelvekre.







A gyökér könyvtárába Apache (feltételezzük, hogy a / usr / local / apache) a következő könyvtárakat:

láda
Tartalmaz httpd, azaz maga az Apache és egyéb végrehajtható programmy.conf
A konfigurációs fájlok, beleértve a httpd.conf főfájl által használt Apache.

htdocs
A gyökér a dokumentum fát.

rönk
Log fájlokat.
Az Apache végrehajtani a parancsfájlokat, módosítsa a httpd.conf fájlt a conf könyvtárban. Általában futtatható scriptek jellemzi mindkét helyen vagy a fájlnév kiterjesztése. A fájl helye lehet, hogy nem függ a nyelvet.

Apache konfigurációs gyakran tartalmazza a gyökérkönyvtárban cgi-bin könyvtár a szerveren, ahol a telepített scriptek kell futni, mint egy külső program.


Letette a ScriptAlias ​​értelmében:

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

Ebben a konfigurációban a cgi-bin könyvtár tartalmazhatja szkriptek bármilyen nyelven. Ezért a katalógusban semleges tekintetében a nyelv és az Apache szerver kell valahogy kitalálni, hogyan kell használni a tolmács, hogy végre minden a szkriptek a könyvtárban vannak. Annak érdekében, hogy ez az információ az első sorban a script kell kezdődnie #! és az utat, hogy a program, amely végrehajtja a forgatókönyvet, valamint esetleg néhány lehetőséget. Például, script, amely kezdődik a vonal alatti, indul a Perl, Perl és -w szükségességét jelzi figyelmeztetéseket megkérdőjelezhető
Telnyh nyelvi konstrukciók:

UNIX script működik helyesen van szüksége ahhoz, hogy a script futtatható (chmod + x a csapat).


A fenti sort #! alkalmas egy olyan rendszer, amelyben Perl van telepítve, mint a / usr / bin / perl. Ha a Perl interpreter van telepítve egy másik könyvtárban, megváltoztatja a húr. Ha vannak beállítva D Windows és Perl:

\ Perl \ bin \ perl.exe, a vonal #! Meg kell kinéznie:

#! D: \ Perl \ bin \ perl -wU Windows felhasználóknak van egy másik lehetőség -, hogy megfeleljen a nevének kiterjesztése .pl Perl interpreter fájlt. Ezután a szkript lehet kezdeni, mint ez:

#! perl -w
A ScriptAlias ​​direktíva meghatározza azt a könyvtárat, amelyet fel lehet használni a szkriptek bármilyen nyelven. Van is egy lehetőség, hogy hasonlítsa össze a katalógusban különösebb nyelvi processzor, akkor minden könyvtár script kell tekinteni, mint írva ezen a nyelven. Például rendelni a / usr / local / apache / cgi-perl könyvtár mod_perl, Apache beállítható, az alábbiak szerint:


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

SetHandler perl script-
PerlHandler Apache :: Registry
PerlSendHeader on
Options + ExecCGI

Akkor hívja könyvtárban található egy Perl script az alábbiak szerint:

Segítségével mod_perl túlmutat a vitánk, úgyhogy nem beszélhetünk többé.


Egyes források hasznos információt mod_perl függelék sorolja C.

Katalógusok, kizárólag tárolására használt scriptek, általában kívül található Apache dokumentum-fa. Egy másik, hogy a különleges könyvtárakat szkriptek szolgálhat azonosítása forgatókönyvek bővíteni a fájl neve: a nevek illeszkedik egy bizonyos meghatározott bővítményt nyelvi processzor. Majd ezeket a fájlokat lehet elhelyezni a dokumentum fát sehol. Általában azért, mert dolgozni a PHP. Például, ha az Apache szerver úgy van beállítva, beépített PHP támogatást mod_php modul, akkor mutasd meg neki, hogy a szkript nevek végződése .php, úgy kell értelmezni, PHP szkripteket. Ehhez hozzáadjuk a httpd.conf ezt a sort:

AddType application / x-httpd-php .php

Ha most telepíteni a PHP script myscript.php htdocs (Apache document root directory), az URL-t, hogy hívja a script:

Ha a PHP fut, mint egy külső önálló program, szükséges, hogy tájékoztassa az Apache, ahol meg kell keresni. Például ha fut a Windows és a PHP telepítve, mint a D: \ php \ php.exe, tedd a httpd.conf-fúj következik egy string (Figyeljük meg a pályák perjel karakter, és nem fordítva):

ScriptAlias ​​/ php / "D: / php /"
AddType application / x-httpd-php .php
Action application / x-httpd-php /php/php.exe

A kapott URL-t a példák azt feltételezi, hogy a Perl és Python script található a cgi-bin könyvtárba, és a PHP szkriptek - mcb könyvtárszerkezetet a dokumentum, és kiterjesztése .php. Azaz URL szkriptek ezeken a nyelveken fog kinézni:

Ha azt tervezi, hogy használja ezeket a beállításokat, ellenőrizze, hogy az Apache gyökér könyvtárban van egy cgi-bin könyvtárba, az Apache főkönyvtárából - a könyvtár MCB. Aztán dolgozni Perl webes szkriptek vagy Python kell másolni őket a cgi-bin, és a PHP szkriptek - a mcb.Esli kíván belépni az interneten forgatókönyv, és cserébe kap egy oldalt egy hiba, lásd az Apache error log, ahonnan fontos információkat, hogy miért a script nem működik. Jellemzően a hiba napló fájlban tárolt error_log naplókönyvtár. Ha nem talál ilyen fájlt, nézd meg a konfigurációs fájlban httpd.conf meghatározott ErrorLog irányelvet.

Apache végrehajtani a parancsfájlokat, akkor írjuk be őket generálni weboldalakat. A szakasz további elmondja, hogyan kell csinálni a Perl, PHP és Python. A példákban az egyes nyelvek, amelyhez kapcsolódik a MySQL szerverhez, futtasson egy lekérdezést táblák megjelenítése, és az eredmény jelenik meg a weboldalon.

A forgatókönyvek itt bemutatott tartalmaz további modulok és könyvtárak kell az abban foglalt. (A továbbiakban feltesszük, hogy a megfelelő modulok már csatlakoztatva vannak, és azt mutatják, csak töredékei szkripteket.)







Perl
Az alábbiakban az első web script Perl, show_tables.pl. Ez létrehoz egy fejlécet összhangban meghatározott Content-Type. üres elválasztó vonalat a fejléc a szervezetben az oldal, és a kezdeti része az oldal. A szkript ezután letölti és megjeleníti a adatbázistáblát szakácskönyvet. Miután befejezte a lista táblákat mutatja HTML-címkék eltakarja az oldal:

#! / Usr / bin / perl -w
# Show_tables.pl - Lekérdezés futtatása táblák megjelenítése, és megmutatni az eredményt,
# Létrehoz egy HTML
use strict;
használja lib qw (/ usr / local / apache / lib / Perl);
használja Cookbook;
# Megjeleníteni a fejlécet, egy üres sor, és az oldal tetején
nyomtatás

Táblázatok szakácskönyv Database

Táblázatok szakácskönyv adatbázisban:


EOF
# Csatlakozni az adatbázishoz, megjelenítéséhez asztalok, disconnect
my $ DBH = Cookbook :: connect ();
my $ sth = $ dbh-> készíteni ( "táblák megjelenítése");
$ Sth-> execute ();
while (én @sor = $ sth-> fetchrow_array ())
print „$ row [0]
\ N „;>
$ Dbh-> disconnect ();
# Megjeleníteni az utolsó tag
nyomtatás

EOF
exit (0);

A teszt a script, tegyük a cgi-bin könyvtárba, és hívja a böngészőből az alábbiak szerint:

A forgatókönyv show_tables.pl HTML által generált felvétele a nyilatkozat kijelzők literálok képviselő tag. Egy másik megközelítés, hogy létrehoz weboldalakat végre CGI.pm modul, amely leegyszerűsíti az internetes scripting anélkül, hogy a szó szoros írási címkéket. CGI.pm modul objektum-orientált és funkcionális felület, amely lehetővé teszi, hogy hozzon létre weblapokat az ilyen eljárásokban. show_tables_oo.pl script használ objektumorientált felületet létrehozni ugyanazt a jelentést, mint a show_tables.pl:

#! / Usr / bin / perl -w
# Show_tables_oo.pl - Lekérdezés futtatása táblák megjelenítése, és megmutatni az eredményt,
# Használata egy objektum-orientált felület CGI.pm
use strict;
használja lib qw (/ usr / local / apache / lib / Perl);
CGI;
használja Cookbook;
# Létrehozása CGI objektum hozzáférési módszerek CGI.pm
my $ cgi = new CGI;
# Megjeleníteni a fejlécet, egy üres sor, és az oldal tetején
print $ cgi-> header ();
print $ cgi-> START_HTML (-title => "táblázatok szakácskönyv adatbázis", -bgcolor => "fehér");
print $ cgi-> p ( "táblázatok szakácskönyv adatbázisban:");
# Csatlakozni az adatbázishoz, megjelenítéséhez asztalok, disconnect
my $ DBH = Cookbook :: connect ();
my $ sth = $ dbh-> készíteni ( "táblák megjelenítése");
$ Sth-> execute ();
while (én @sor = $ sth-> fetchrow_array ())
print $ row [0]. $ Cgi-> br ();
>
$ Dbh-> disconnect (); # Output utolsó tagot
print $ cgi-> .END_HTML ();
exit (0);

A forgatókönyv tartalmazza a CGI.pm modul használatát CGI irányelv létrehoz egy CGI- $ tárgy a cgi, amelynek segítségével utal, hogy a különböző módszer a HTML. header () metódus létrehoz fejlécében Content-Type. és START_HTML () képezi a kezdeti része az oldal, amíg a nyitó címke (test) módszerrel. Miután létrehozta az első oldalon a forgatókönyvet kap információt az adatbázis szerver és megjeleníti azt. A neve minden egyes tábla kíséri tag
, képződött hívó br () módszer. .END_HTML () metódus visszaadja a címkét és befejezését. Beállítása a forgatókönyvet cgi-bin könyvtárba, és hívja meg a böngésző, akkor látni fogja, hogy generálja az ugyanazon az oldalon, mint show_tables.pl.

CGI.pm funkciókat vehet a különböző paramétereket, amelyek közül néhány nem kötelező. Lehetővé teszi, hogy adja csak a szükséges paramétereket, CGI.pm lehetővé teszi a használatát a paraméter lista jelölést -name => érték. Például, a hívás START_HTML () paraméter rendel címlap címét és bgcolor - háttérszín. Jelölések -name => érték lehetővé teszi, hogy adja meg a paramétereket bármilyen sorrendben, úgy, hogy a következő két mondat ekvivalens:

print $ cgi-> START_HTML (-title => "Saját oldal címe" -bgcolor => "fehér");
print $ cgi-> START_HTML (-bgcolor => "fehér", -title => "Saját oldal címe");

Ahhoz, hogy a funkció nem egy objektum-orientált felület a CGI.pm kell kissé változik a forgatókönyv. használjon egy karakterlánc, amely utal a CGI.pm, importálja a módszer neve a névtérben forgatókönyv, és ezt annak lehet nevezni függvényében, anélkül, hogy egy tárgy CGI. Például, hogy importálja a leggyakoribb módszer, a forgatókönyvet kell tartalmaznia a következő mondatot:

use CGI qw (: szabvány);

show_tables_fc.pl forgatókönyv - ez megegyezik az éppen tekinthető show_tables_oo.pl, de írt a funkció hívásokat. Alkalmazza ugyanazokat a módszereket a CGI.pm, de ezek hivatkozni a stand-alone funkció, és nem a tárgy $ cgi:

#! / Usr / bin / perl -w
# Show_tables_fc.pl - Lekérdezés futtatása táblák megjelenítése, és megmutatni az eredményt,
# Egy funkcionális felület CGI.pm
use strict;
használja lib qw (/ usr / local / apache / lib / Perl);
use CGI qw (: szabvány); # Import a nevét a szokásos módszerekkel
# Névtér forgatókönyv
használja Cookbook;
# Megjeleníteni a fejlécet, egy üres sor, és az oldal tetején
print header (); print START_HTML (-title => "táblázatok szakácskönyv adatbázis", -bgcolor => "fehér");
print p ( "táblázatok szakácskönyv adatbázisban:");
# Csatlakozni az adatbázishoz, megjelenítéséhez asztalok, disconnect
my $ DBH = Cookbook :: connect ();
my $ sth = $ dbh-> készíteni ( "táblák megjelenítése");
$ Sth-> execute ();
while (én @sor = $ sth-> fetchrow_array ())
print $ row [0]. br ();
>
$ Dbh-> disconnect ();
# Megjeleníteni az utolsó tag
print .END_HTML ();
exit (0);

Helyezzük a script show_tables_fc.pl a cgi-bin könyvtárba, és győződjön meg arról, hogy ugyanezt az kimenetet show_tables_oo.pl.

Később a könyv Perl webes szkriptek használt funkcionális felület CGI.pm. Ha érdekel a további információt a CGI.pm futtathatja a parancssorból a következő parancsot, amely hozzáférést biztosít a rendelkezésre álló dokumentáció:

% Perldoc CGI
% Perldoc CGI :: Ponty

Egyéb információforrások modul, mind a nyomtatott és az interneten elérhető, függelék sorolja C.

PHP
Meglepő webes programozási nyelv, a PHP nem biztosítja azt a lehetőséget, hogy csökkentsék a feladat tag. De mivel a PHP egy beágyazott nyelv, akkor egyszerűen csak írj HTML egy forgatókönyv nélkül nyomtatási ajánlatot. Tekintsünk egy forgatókönyvet show_tables.php, amely bekapcsolja a HTML és PHP:




Táblázatok szakácskönyv Database

(Body bgcolor = "fehér")

Táblázatok szakácskönyv adatbázisban:

A teszt a script, betette a könyvtárszerkezetet mcb webszerver dokumentum, és hívja meg, mint ez:

Ellentétben Perl-változat a MySQL táblázatok a kimeneti script, PHP script nem tartalmazza a kódot a header kiadási Content-Type. mivel a PHP generálja automatikusan. (Ha nem tetszik ez a helyzet, és a megjeleníteni kívánt címeiket lásd a leírást a header () függvény a PHP kézikönyvben.)

Kivéve a sortörések minden HTML tartalmat show_tables.php szkriptek kívül helyezkedik el a címkét. úgy, hogy a PHP értelmező egyszerűen eltávolítja tolmácsolás nélkül. Itt látható a script verzió képező teljes HTML-ajánlatok print:

\ N „);
print ( "\ n");
print ( "táblázatok szakácskönyv Database \ n");
print ( "\ n");
print ( "\ n");
print ( "

Táblázatok szakácskönyv adatbázisban:

\ N „);
# Csatlakozni az adatbázishoz, megjelenítéséhez asztalok, disconnect
$ Conn_id = cookbook_connect ();
$ Result_id = mysql_query ( "A táblák megjelenítése", $ conn_id);
while (list ($ tbl_name) = mysql_fetch_row ($ result_id))
print ( „$ tbl_name
\ N „);
mysql_free_result ($ result_id);
mysql_close ($ conn_id);
print ( "\ n");
print ( "\ n");
?>

Néha célszerű alkalmazni az egyik megközelítés, néha - a másik, és néha mindkettő egyszerre ugyanazt a forgatókönyvet. Ha a szakasz HTML nem utal semmilyen változók értékei és kifejezések, akkor valószínűleg előnyös írni, hogy a HTML-módban. Ellenkező esetben érdemesebb használni nyomtatott vagy echo a javaslatot, hogy ne legyen túl gyakori váltás a HTML és PHP.

piton
Python szabványos telepítési tartalmaz hasznos web programozás és cgi modul urllib. A valóságban azonban ezek, még nem volt szükség, mert az egyetlen dolog, hogy majd az első web script Python, - létrehoz egy egyszerű HTML-kódot. Írja a változata Python szkript, amely megjeleníti a MySQL tábla:

#! / Usr / bin / python
# Show_tables.py - Lekérdezés futtatása a Táblázatok és kiállítási eredményei
import sys
sys.path.insert (0, "/ usr / local / apache / lib / python")
import MySQLdb
import Cookbook
# Megjeleníteni a fejlécet, egy üres sor, és az oldal tetején
print "" „Content-Type: text / html


Táblázatok szakácskönyv Database

(Body bgcolor = "fehér")

Táblázatok szakácskönyv adatbázisban:


„” "
# Csatlakozni az adatbázishoz, megjelenítéséhez asztalok, disconnect
conn = Cookbook.connect ()
kurzor = conn.cursor ()
cursor.execute ( "A táblák megjelenítése")
a (tbl_name,) a cursor.fetchall ():
print tbl_name + "
"
cursor.close ()
conn.close ()
# Megjeleníteni az utolsó tag
print "" "
(/ Body)

„” "

Helyezzük a script az Apache cgi-bin könyvtárba, és hívja meg az alábbiak szerint: