Interval.cz
PHP na sto a jeden zp∙sob

äKrßtce po p∙lnoci se rozbou°φ telefon. Na druhΘ stran∞ hlas zoufalΘho kolegy. Z∙stal v prßci dΘle, zavßdφ nov² modul do intranetovΘho systΘmu. VÜe se vÜak hroutφ, nefungujφ ani p∙vodnφ moduly. ZaΦφnß dlouhΘ pßtrßnφ po p°φΦin∞, b∞hem kterΘho ve mn∞ vzr∙stß neblahΘ podez°enφ. Modul je v po°ßdku, chyba je v odliÜnΘm interpretu PHP!ô Pokud i vßs niΦφ podobnΘ noΦnφ m∙ry, tento Φlßnek vßm snad nabφdne °eÜenφ.

ProblΘmem, kter² se v poslednφch m∞sφcφch stßle Φast∞ji diskutoval na mnoha domßcφch a p°edevÜφm zahraniΦnφch serverech, je, samoz°ejm∞, rychl² v²voj PHP. To se nynφ dostalo do zvlßÜtnφ mezifßze û u₧ p°ekonalo stßdium äprvnφ opravdu pou₧itelnΘ verzeô, tedy obvyklΘ verze 3, a jeÜt∞ se nedostalo do stßdia ustßlenΘho prost°edφ s äpostupn²m pokrokem v mezφch zßkonaô. Naopak, verze 4 je pro PHP stßdiem p°ekotn²ch zm∞n, Φasto velmi zßsadnφch.

SouΦasnß situace ovÜem zp∙sobuje °adu problΘm∙, kterΘ pramenφ p°edevÜφm z velkΘho poΦtu r∙zn²ch verzφ interpret∙, kterΘ jsou na r∙zn²ch serverech provozovßny. Pro v²vojß°e se tak lad∞nφ a zavßd∞nφ ka₧dΘho programu stßvß prav²m hororem, proto₧e si prakticky nikdy nem∙₧e b²t jist, zda budou jeho konstrukce pracovat nejen u n∞j, ale i na cφlovΘm stroji, kter² b²vß Φasto zßsadn∞ odliÜn², jak hardwarov∞, tak i softwarov∞.

Zdß se, ₧e uveden² problΘm se neustßle stup≥uje a jeÜt∞ n∞jakou dobu se stup≥ovat bude. Vznikß tak pot°eba efektivnφho °eÜenφ, kterΘ by bylo snadno implementovatelnΘ, transparentnφ a pokud mo₧no co nejspolehliv∞jÜφ. Na n∞kter²ch specializovan²ch serverech se objevila °ada ·vah na toto tΘma, n∞kterΘ zcela nereßln∞ navrhovaly pro ka₧d² v²vojov² projekt samostatn² stroj s veÜker²m vybavenφm, jinΘ zas r∙znΘ metody, jak na jeden server dostat vφce verzφ interpretu PHP, pop°φpad∞ jak na jednom stroji provozovat n∞kolik server∙ s r∙zn²mi verzemi PHP. Ani jedno vÜak nebylo pou₧itelnΘ bez specißlnφch zßsah∙ do skript∙ nebo bez spoluprßce s r∙zn²mi pomocn²mi programy.

Musφm se p°iznat, ₧e mßm rßd jednoduchß univerzßlnφ °eÜenφ, Φφm univerzßln∞jÜφ, tφm lΘpe. I jß jsem °eÜil stejnΘ problΘmy, v prßci, mezi p°ßteli i v helpkonferencφch. Nakonec jsem naÜel °eÜenφ, kterΘ mi p°ijde velmi efektivnφ a kterΘ se mi ji₧ osv∞dΦilo v b∞₧nΘm provozu. Je zalo₧eno na schopnosti serveru Apache, co₧ je nejΦast∞jÜφ internetov² server, na n∞m₧ se PHP pou₧φvß, p°edßvat po₧adavky na zpracovßnφ skript∙ externφmu interpretu nejen v zßvislosti na druhu skriptu, ale i jeho lokaci.

P°edpoklßdejme tedy, ₧e pou₧φvßme server Apache. N∞kde na disku mßme takΘ standardnφ interpret PHP, se kter²m b∞₧n∞ pracujeme. Dßle musφme n∞jak zφskat (stßhnout, p°ekompilovat) interpret PHP s po₧adovan²mi odliÜn²mi vlastnostmi, kter² pak ulo₧φme takΘ n∞kam na disk, kde na n∞j m∙₧e ApaΦ ädosßhnoutô. Pokud nap°φklad mßme v ko°eni ulo₧en adresß° php, kde mßme PHP verze 4.2.3, m∙₧eme vytvo°it adresß° phpx, kam si ulo₧φme v²vojovou verzi 4.2.4-dev. Soubor httpd.conf, kde je ulo₧ena konfigurace ApaΦe, pak doplnφme o nßsledujφcφ °ßdky (platforma Win98):

ScriptAlias /phpx/ "C:/phpx/"
<Directory "C:/phpx">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>

Alias /phpmyadmin "C:/phpmyadmin/"
<Directory "C:/phpmyadmin">
# nastavuji ovladaΦ pro soubory s koncovkou .php
    AddHandler php-script .php
# po₧aduji volßnφ externφho interpretu
    Action php-script "/phpx/php.exe"
# aktivuji ovladaΦ pro tento alias
    SetHandler php-script
    Options Indexes FollowSymlinks MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

V prvnφ Φßsti p°φkladu zavßdφm CGI interpret PHP, aby ApaΦ v∞d∞l, kde jej mß hledat. V druhΘ Φßsti nastavuji adresß°, ve kterΘm le₧φ m∙j oblφben² phpMyAdmin a zßrove≥ na°izuji, aby po₧adavky na zpracovßnφ skript∙ PHP z tohoto alias byly p°edßny interpretu v adresß°i phpx. ProΦ to celΘ d∞lßm? Proto₧e v PHP verze 4.2.3 je chyba ve zpracovßnφ urΦitΘho typu dat, s nimi₧ phpMyAdmin pracuje a kterΘ se takto elegantn∞ vyhnu!

Jak vidφte, trik je velmi jednoduch², vyu₧φvß vlastn∞ jen zßklady prßce s aliasy. ┌pln∞ stejn∞ jej lze pou₧φt ve spojenφ s virtualhostingem nebo r∙zn²mi metodami redirektu. CelΘ °eÜenφ mi zabralo jen pßr hodin, nejvφce problΘm∙ jsem m∞l s pochopenφm dokumentace ApaΦe a sprßvnΘho umφst∞nφ handler∙, co₧ mi nynφ, kdy₧ u₧ znßm sprßvnou odpov∞∩, p°ipadß k smφchu. Popravd∞ °eΦeno, je to °eÜenφ tak jednoduchΘ, a₧ se mi nechce v∞°it, ₧e jsem s nφm p°iÜel jako prvnφ, ale podle ohlasu v helpkonferencφch se zdß, ₧e Interval bude prvnφm serverem, kter² tuto metodu publikuje.

Samoz°ejm∞, v²Üe uvedenΘ °eÜenφ mß svß pro i proti. Nev²hodou je zßvislost na serveru Apache, implementaci obdobnΘ metody jsem na jin²ch serverech nezkouÜel (na IIS by snad Ülo vyu₧φt virtußlnφch server∙ nebo n∞Φeho podobnΘho). DalÜφ nev²hodou je pou₧itφ PHP jako CGI, z Φeho₧ plyne snφ₧enφ v²konu a zv²Üenφ zßt∞₧e serveru, oproti °eÜenφ s modulem PHP. Na druhou stranu se domnφvßm, ₧e prßv∞ tato nev²hoda nenφ nap°φklad p°i v²voji a lad∞nφ aplikacφ zßsadnφ. V²hody jsou z°ejmΘ, vÜechny plynou z p°φtomnosti n∞kolika interpret∙ na jednom serveru. Lze tak nap°φklad äupravitô PHP podle individußlnφch pot°eb zßkaznφk∙ nebo p°ßtel na komunitnφch serverech. DalÜφ je mo₧nost testovat novΘ verze PHP bez nebezpeΦφ änabourßnφô funkΦnφho distribuΦnφho systΘmu, nebo zajiÜt∞nφ b∞hu n∞jakΘ aplikace, jejφ₧ ·prava by si vy₧ßdala p°φliÜ velkΘ nßklady.

V∞°φm, ₧e vyu₧itφ mnou uvedenΘ metody vßm m∙₧e usnadnit ₧ivot a ₧e jist∞ najdete i jinΘ p°φle₧itosti k jejφmu nasazenφ ne₧ ty, kterΘ jsem jmenoval. Tak Φi tak doufßm, ₧e jsem vßm alespo≥ trochu pomohl, pokud ne p°φmo °eÜenφm vaÜeho problΘmu, tak snad malou nßpov∞dou, kterß vßs k vaÜemu vlastnφmu °eÜenφ dovede.



VilΘm Mßlek (3.12. 2002)
redaktor Interval.cz

Redakce Interval.cz |  Inzerce na Interval.cz |  Hledßme novΘ autory ISSN 1212-8651 
 ⌐ Zoner software, s.r.o., vÜechna prßva vyhrazena, tento server dodr₧uje prßvnφ p°edpisy o ochran∞ osobnφch ·daj∙.