Linux E X P R E S

Facebook

Kterak skripty zvítězily nad Windows

Je to pár dní, co jsem byl požádán jednou nejmenovanou firmou o převod jejich webového portálu na naše firemní linuxové servery. Obvykle v tom nebývá žádný problém, bohužel tentokrát jsem se zmýlil. Zákazník měl totiž původně stránky na hostingu s OS Windows.


Za společné asistence majitele jsme nejprve stránky zkopírovali do testovacího prostředí na mém notebooku. Nastavili jsme web server Apache a zadali správnou url do prohlížeče. Kromě chybového hlášení se však nic neukázalo. Letmým pohledem do adresáře s daty mi ihned bylo jasné proč. Soubor se nejmenoval index.php ale Index.php. Nezbylo mi tedy nic jiného, než všechny soubory, (které byly jednou s malým písmenem a podruhé s velkým písmenem na začátku - asi podle toho jak se programátor vyspal) sjednotit. Nejprve jsem si chtěl ověřit, kolik souborů portál obsahuje. Z příkazu

# ls -plaR | wc -l 

na mě vyštěklo třímístné číslo a tak bylo jasné, že převod názvů budeme řešit skriptem a nikoliv ručně. Zákazník nejenom že prudce zezelenal ale po té, co jsem zadal do terminálu příkaz

# for F in * ; do mv $F `echo $F | tr 'A-Z' 'a-z'` ; done 

a prohlásil hotovo! mu ještě spadla brada.


S úsměvem na tváři jsem opět otevřel prohlížeč a znovu zadal adresu. Stránka se již sice zobrazila, ovšem přečíst se díky "pokažené" češtině nedala. Intuitivně jsem si ve Firefoxovi (pomocí CTRL + u) zobrazil zdrojový kód stránky a takříkajíc "na jisto" pátral po meta tagu http-equiv, kde jak jsem předpokládal, bylo nastaveno kódování windows-1250. Zákazníkovi jsem spolu s patřičným vysvětlením doporučil přechod na kódování UTF-8. Po několika minutách debatování souhlasil. Editovat stovky souborů se mi opět nechtělo a tak na řadu přišel další skript. Jeho úkolem bylo nahradit řetězec charset=windows-1250 za řetězec charset=UTF-8. Přesunul jsem se do adresáře se soubory a použil příkaz find, který jsem doplnil o xargs a substituci textu perlem.


find . -type f -name '*.php' | xargs -i perl -i -pe 's/charset=windows-1250/charset=UTF-8/;' {}

Zákazník byl opět v úžasu, ovšem tím má práce nebyla zdaleka hotová. Kromě změny tagu bylo potřeba ještě překódovat samotný obsah všech skriptů. K mé smůle byly jednotlivé soubory v různých kódováních počínaje iso8859-2 přes utf-8 až po windows-1250. S tím mi pomohl program enca (sudo apt-get install enca) a tak výsledný skript opět nebyl až tak složitý


find . -type f -name '*.php' -print0 | xargs --no-run-if-empty -0 enca -x UTF-8

 

Zbývalo jen změnit záznamy v DNS a "měl jsem vyděláno".


Celý převod domény trval řádově do 10 minut. Docela by mě zajímalo, jak dlouho by trval převod administrátorovi Windows, kdyby byla situace opačná.

Diskuze (24) Nahoru