Odpovědět na komentář

Statická kopie webu

Co se starým webem? Nechce se vám ho dál provozovat, ale připadá vám škoda ho jen tak zavřít? Zkuste ho zamrazit a vystavit...

Když jsem před lety skončil s Neškodným, nechtěl jsem, aby stránky, kterým jsme s White Dogem věnovali spoustu práce a které, chca nechca, poměrně výrazně zasáhly do historie českých blogů, jen tak prostě zmizely. Na druhou stranu se mi ani nechtělo udržovat dál databázi a hosting a všechny ty věci okolo kvůli neaktivním stránkám. Takže padlo rozhodnutí: Zmrazit aktuální stav a vystavit jako "statický" archiv.
(Slovo "statický" je v uvozovkách schválně. Někteří hnidopiši mohou totiž namítat, že statické stránky jsou přeci čisté HTML, a tohle je "uvnitř" poháněné PHPčkem. Proto když píšu "statický", mám na mysli "s obsahem, který se už nebude měnit".)
Neškodného jsem si stáhnul z webu nástrojem na "offline prohlížení". Používám WinHTTrack. Zadám mu adresu webu, on si stáhne úvodní stránku, najde všechny odkazy, stáhne další stránky, v nich najde další odkazy... atakdále, dokud nestáhne vše, co na webu najde. Celé to uloží do určeného adresáře tak, aby to bylo použitelné i pro "offline prohlížení". Tedy změní cesty k obrázkům, uloží soubory ne jako PHP, ale jako ".html", změní odkazy na ně... Zkrátka vezme aktuální stav webu tak, jak je vystaven, a udělá z něj statickou kopii.
Teď by teoreticky stačilo tuhle statickou kopii nakopírovat zpět na web. S Neškodným jsem to chtěl udělat zrovna tak, ale kdo jste kdy zkoušel nahrát na web několik tisíc malých souborů pomocí FTP, tak víte, jak je to prudná práce. Nakonec jsem to tedy nějak překousl, ale řekl jsem si: Už nikdy víc!
Včera jsem zavřel a zamrazil dev::info. Když jsem ho celé stáhnul, zjistil jsem, že lokální kopie čítá 48 MB, rozházených do několika tisíc souborů s průměrnou velikostí dvacet kilo. Nejsem blázen, abych tohle kopíroval celý den... I když bych to mohl zaZIPovat, uploadnout a na serveru rozbalit... ovšem to se mi zas nechtělo.
A tak jsem si udělal jednoduché skripty, které dělají následující:

  • První vezme všechny soubory v adresáři ./data, jeden po druhém zapakuje GZIPem a uloží je do jednoho velkého souboru (v podstatě takový primitivní tar)
  • Druhý se postará o to, aby v tom velkém archivu našel požadovaný soubor a poslal ho zpět.

Zní to jednoduše, že? A ono to taky jednoduché je. Výsledek je ten, že místo osmačtyřiceti mega v bambiliónu malých souborů mám pouhé tři soubory, které nahraju na web - .htaccess, handler.php a šestimegový (!) data.web - takže upload nezabral hodinu, ale jen pár minut.
Když použiju tenhle fígl, tak můžu handler.php a data.web spojit do jednoho souboru.
Pro zájemce tu mám vše potřebné v ZIP archivu. Vytvořte si adresář a do něj rozbalte obsah ZIPu. Vytvořte v něm podadresář "data" a do něho zkopírujte obsah stažený HTTrackem. Pak spusťte skript "packer.php" (předpokládám, že máte lokálně nainstalovaný PHP5 a víte jak spustit PHP z příkazové řádky). Ve skriptu najdete konstantu, která určí, jestli výsledkem mají být dva soubory (handler a data) nebo jeden spojený, a rovněž tam najdete připravený HTML filtr. V souboru stub.txt (pojmenovaný na počest paní Štubové) je pak vzor "rozbalovacího" skriptu.
Výsledkem běhu packer.php jsou dva soubory (handler.php a data.web), resp. jeden spojený handler.php. Nakopírujte na web spolu s .htaccess - pokud váš hostér nepovoluje mod_rewrite, můžete použít handler jako obsluhu chyby 404 (chce to pak handler trošku upravit, aby vracel HTTP stav 200 OK).
Skripty můžete použít či upravit, pro jejich šíření platí BSD licence ("dělejte si s tím co chcete"), pro jejich používání licence DPL.
PS: Upravil jsem soubory v ZIPu podle pánů Ptáčka a Vrány, děkuji za jejich leteckou podporu.

Odpovědět

Obsah tohoto pole je soukromý a nebude veřejně zobrazen.