Stejný kód v různých adresářích

Školení, která pořádám

Časopis Clavis, jehož Internetovou podobu už devět let připravuji, má texty a obrázky jednotlivých čísel uložené v adresářích. Samozřejmě je žádoucí, aby se při pohledu na samotný adresář zobrazil nějaký relevantní obsah – třeba celé číslo. Kód pro zpracování dat je u všech čísel stejný a bylo by pochopitelně nesmyslné ho mít nakopírovaný do všech adresářů. Soubor index.php v každém adresáři tedy obsahuje jediný řádek:

<?php
include "../data.php";
?>

Soubor data.php pak udělá vše, co je třeba, s tím, že aktuálním pracovním adresářem zůstal adresář se soubory daného čísla:

<?php
glob("*.gif"); // vrátí všechny soubory s koncovkou .gif v aktuálním čísle
basename(dirname($_SERVER["PHP_SELF"])); // pokud bychom náhodou potřebovali znát adresář aktuálního čísla
?>

Obrat je to samozřejmě triviální – chtěl jsem jen ukázat, že ne na všechno je potřeba brát hned mod_rewrite.

Jakub Vrána, Řešení problému, 31.10.2005, diskuse: 10 (nové: 0)

Diskuse

Michal Hantl:

Neco podobného jsem použil u svého CMS - je ve v jedné složce, z té složky si stačí naincludovat jeden soubor a předat login informace. Takže i uploadnuté soubory k danému webu jsou ve složce daného webu a CMS složka nenese žádné soubory navíc.

Druhou výhodou je, že když dělám nějaký web, nekopíruju svůj CMS jak pako, takže když něco upravím, nemusím to nikam kopírovat a na disku se mi nevyskytují odlišné verze.

Leo:

Priznam se, ze tentokrat jsem to vubec nepochopil..., ale mozna je to tim, ze se jeste dolecuju z chripky jak remen. Leo

Jakub Podhorský:

jestli jsem to já správně pochopil tak prostě mu ty jednotlivé adresáře co zadáváme v URL existují i fyzicky na disku jen v každém adresáři je soubor index.php který má obsah jak je zde napsaný a tudíž nepotřebuje mod_rewrite jen v podstatě vytváří nové kopie index.php v nových adresářích

imho zajímavý řešení ale mod_rewrite se mi zdá lepší

snad jsem ten článek správně pochopil :)

pif:

jj asi budu taky zastance MR (pokud ho na serveru mame), ale to je pochopitelne :))

mr je na to jak delany, nemusime aspon porad vsude kopirovat index.php :), ale jasne i to je reseni.

Jakub Podhorský:

no hlavně by se pak dalo narazit kdyby tam bylo těch souborů až moc a měli jsme omezený diskový prostor...pak se to dá rychle zaplnit i když je mi jasné že to by se mluvilo řádově o milionech souborů index.php ale i to se může přihodit...navíc když k tomu ještě připočítám ukládání obrázků a dalších souborů na ten disk tak ta kapacita de potom rychle pryč což je obrovská nevýhoda :(

Quick:

Rekl bych, ze s prostorem na disku problem nebude. Soubor index.php bude urcite nekolinasobne mensi nez jeden obrazek. Kdyz uz nebude misto, asi tezko to jde rezit MR a smazanim 'prebytecnych' index.php

Jakub Podhorský:

dobře možná špatnej příklad ale můžu si vzít situaci kdy něco bude nutný prostě dát jenom do toho souboru index.php pak jich tam máš dejme tomu stovky(složitá editace) a nebo potřebuješ něco dát jenom do jednoho z nich(zdlouhavý vyhledávání)

určitě je to dobrý východisko když už člověk nemá mod_rewrite k dispozici ale osobně bych to spíš asi rešil přes chybovou stránku 404 i když ta na to není určená :-/ ale zdá se mi to jako lepší řešení

jinak teď mě tak napadá co když máš na hostingu dejme tomu jen 10MB diskovýho prostoru tvůj systém zabere dejme tomu cca 2 MB(když to přeženu) + obrázky(přeženu že nejsou optimalizovaný a zbytečně velký a máš další 2 MB) to už máš 4 MB...no pak když chceš mít ukládání obrázků pro svůj redakční systém to už máš jenom 6MB volnýho a upřímě to se obrázkama dá zaplnit do měsíce a co potom?
a databázi máš např. na 30MB...je to sice dost nereálná situace ale může nastat

navíc další věc zálohování souborů....ono třeba takhle zálohovat k sobě na počítač dejme tomu 1000  souborů ač malých ale tisíc je na docela dlouhou dobu.

ikona Jakub Vrána OpenID:

Probůh, co to tady řešíte? Jak zaplnit 33 bajtovými soubory, které tvoří asi 0.01% celkové velikosti dat, celou kvótu?

DaMage:

33 bajtov v súbore... ale pri zlom resp. staršom filesysteme alokuje aj niekoľko kb - podľa nastavenia alokačných jednotiek... aj keď na novších FS je niečo také už vyriešené.

ikona Jakub Vrána OpenID:

Ale i tak je to přeci úplně jedno. Pokud je v jednom adresáři řekněme 200 kB obrázků a 50 kB textu, je jeden soubor navíc umístěný do alokační jednotky třeba 2 KiB zcela zanedatelný.

Vložit komentář

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL:

avatar © 2005-2018 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.