Možná jsem exot, ale prostě mi připadá, že je úplně normální, pokud
po webové platformě chci, aby mi určité věci zpřístupnila kdekoliv
v rámci aplikace – tedy ve všech skriptech. Malý příklad za
všechno: chtěl bych si vytvořit funkci echonl, která se bude chovat stejně jako echo
s tou výjimkou, že na konec přidá znak nového řádku (\n). Jak to
mám ale zařídit? Pokud bude tato funkce uložena např. v souboru
commons.php někde v rootu aplikace, jednou se na tento soubor budu
odkazovat pomocí include(„commons.php“), z vnořeného
adresáře pomocí include(„../commons.php“) apod. Problém je
ten, že vždy „natvrdo“ musím vědět, kde soubor commons leží.
Dobře. Mohl by to tedy vyřešit absolutní odkaz. No jo, jenže cesta
k rootu (zjistitelná např. ze superglobálního pole $_SERVER) aplikaci
učiní nepřenositelnou – při změně hostingu nebo i třeba při
uploadu z lokálu na hosting bude potřeba upravit všechny skripty tak,
aby byla absolutní cesta k rootu v pořádku.
Nabízí se tedy udělat si vlastní funkci, která absolutní cestu
zkonstruuje. Modří už vědí, že jsme zpátky na začátku začarovaného
kruhu – funkce bude umístěna v nějakém souboru, ke kterému
univerzálně nejsem schopen zjistit cestu.
Tento problém je podle mého názoru dost vážný, navíc nějakou
funkci echonl lze ještě oželet. Zcela analogický je však problém
u globální konfigurace aplikace – na tu se totiž také nelze
nějak univerzálně odkázat, a to už je docela průšvih.
Existuje několik workaroundů (krásné, bohužel nepřeložitelné
slovo). Ten první je autoprepend, který umožňuje do všech skriptů dané
aplikace (no vlastně do všech skriptů, které zpracovává daný PHP
procesor, ale to je jedno) vložit uričtý soubor. Toto řešení se mi
nelíbí, protože třeba nebudu chtít onen společný soubor vkládat vždy,
navíc je autoprepend záležitostí souboru php.ini, který není možné vždy
editovat. Každopádně to je zcela nesystémové řešení (opět snižuje
přenositelnost aplikace).
Druhá možnost je navrhnout web tak, aby odkaz byl vždy stejný (např.
include(„../inc/commons.php“)). To samozřejmě předpokládá
všechny skripty v jednom adresáři, což je mi zcela proti srsti,
protože mě nějaká „vlastnost“ technologie nebude omezovat
v hierarchickém strukturování adresářů aplikace.
Já jsem tento problém nakonec vyřešil tak, že každý adresář má
v sobě konfigurační xml soubor, který (mimo jiné) obsahuje odkaz na
složku se společnými soubory. Díky novému skvělému rozšíření
SimpleXML, které přichází bundlované s PHP 5, je načtení této cesty
otázka dvou řádků, a aplikace zůstává poměrně dobře přenositelnou
(i když si o přenositelnosti PHP aplikací myslím své poté, co
jsem strávil asi týden přesunem stránek káčka z Webu zdarma na
PIPNI). Zatím mi to připadá jako nejlepší řešení, nehledě na to, že
lze velmi jednoduše napsat „instalační skript“, který může
celou aplikaci prolézt, a pokud v nějaké složce informace o
„commons adresáři“ chybí, není problém to tam doplnit.
Každopádně mě ale v tomhle PHP zklamalo. Konzultoval jsem to
s lidmi na forum.builder.cz, ti samozřejmě PHP obhajovali, ale rozumnou
radu jsem nedostal. Zlaté ASP.NET se svým Global.asax a Application state. No
co se dá dělat, třeba časem hostingy této mnou oblíbenější technologie
budou dostupnější a já budu moct dát PHP sbohem.
před 6 let 12 týdnů
před 6 let 12 týdnů
před 6 let 34 týdny
před 6 let 49 týdnů
před 7 let 9 týdnů
před 7 let 18 týdnů
před 7 let 19 týdnů
před 7 let 22 týdny
před 7 let 28 týdnů
před 7 let 37 týdnů