přejít na obsah přejít na navigaci

Linux E X P R E S, Kterak skripty zvítězily nad Windows

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.


reklama

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á.

Nahoru

(Jako ve škole)
Průměr: 1,20 | Hodnotilo: 5
 

Top články z OpenOffice.cz

Příspěvky

Kterak skripty zvítězily nad Windows
m4 26. 05. 2008, 10:30:18
Odpovědět  Odkaz 
tak to bola dobra halucinacia :)
Kterak skripty zvítězily nad Windows
Kamil Páral 26. 05. 2008, 10:40:42
Odpovědět  Odkaz 
Ty písmenka v kódech jsou strašně maličký, tak poloviční oproti okolnímu textu. Je problém u mě? Špatně se to čte.
Vojtěch Trefný Re:Kterak skripty zvítězily nad Windows
Vojtěch Trefný 26. 05. 2008, 16:56:26
Odpovědět  Odkaz 
Já bych řekl, že je to úmysl (tedy aspoň já mám to písmo taky děsně mrňavý...).
Re:Re:Kterak skripty zvítězily nad Windows - malý písmenka
Pep Kadleček 27. 06. 2008, 08:22:30
Odpovědět  Odkaz 
Malinký písmenka? Po stisku Ctrl a + se všechno zvětší, i text v kódech. Nebo je řeč o nějakém jiném kódu někde úplně jinde a já jsem totálně mimo? I tak hezký den
Josef Lacina Kterak skripty zvítězily nad Windows
JoLa 26. 05. 2008, 10:43:22
Odpovědět  Odkaz 
Jako ukázka skriptování v Linuxu úžasný. Jako odstrašující případ "portálu" také. Po přečtení úvodu jsem očekával návod jak přenést Portál (opravdu píšu velké P záměrně) z nějakého MS systému (třeba SharePoint ;-) ) do např. OpenCMS, Plone a pod. Jak tak na to koukám, asi si ty skriptíky někde uložím. Takových "portálů" běhá po světě mnoho. Mohlo by se to někdy hodit :-)
Kterak skripty zvítězily nad Windows
gapon 26. 05. 2008, 10:57:23
Odpovědět  Odkaz 
a co databaze? ta tam asi nebyla co?
Milan Kozák Re:Kterak skripty zvítězily nad Windows
Milan Kozák 27. 05. 2008, 08:03:47
Odpovědět  Odkaz 
Databáze tam naštěstí nebyla. Obecně lze ale říci, že MySQL(5) nemá problém s převodem kódování. Do PHP pak obvykle stačí přidat:

SET character_set_results=utf8
SET character_set_connection=utf8
SET character_set_client=utf8

Nebavíme se však o specifických případech, kdy je v tabulce mix kódování atd...
Kterak skripty zvítězily nad Windows
kozec 26. 05. 2008, 11:00:13
Odpovědět  Odkaz 
Relativne kratko, Windows by totiz problem s velkostou pismen a kodovanim nemal ;) UTF-8 zvlada a velkost pismen neriesi.
Re:Kterak skripty zvítězily nad Windows
m4 26. 05. 2008, 11:20:03
Odpovědět  Odkaz 
az do chvile kedy by narazil na "bordel-portal" a plno suborov s nazvami index.php a INDEX.php
Re:Re:Kterak skripty zvítězily nad Windows
kozec 26. 05. 2008, 13:49:45
Odpovědět  Odkaz 
Tak, to do Windowsu ani nenahram, takze zasa ziaden problem :p
Kterak skripty zvítězily nad Windows
Tomáš Jančík 26. 05. 2008, 11:23:59
Odpovědět  Odkaz 
no mě by sice trvalo dýl sestavit ty skripty, ale pěkná práce...
Kterak skripty zvítězily nad Windows
majkro 26. 05. 2008, 11:24:04
Odpovědět  Odkaz 
Pokud to bylo sem tam Script.php a sem tam script.php, tak jak se po prejmenovani vseho na mala pismena resilo na linuxovem stroji include a podobne operace, pokud v kodu byla ruzna velikost pismen? Ja si myslim, ze toto byl tak specifickej zasah, kterej pokud vysel, tak to byla nahoda a ne vyhra.
Jirka Vrba Kterak skripty zvítězily nad Windows
baf 26. 05. 2008, 13:14:21
Odpovědět  Odkaz 
hezky, ale cely problem to neresi. Zustavaji ti odkazy v aplikaci, ktere mohou byt s Velkymi PISMENY, cast takovych odkazu muze byt hluboko v aplikaci a resit ruzne presmerovani. Pokud zvitezis nad timto, pak narazis na externi odkazy.

Myslim, ze je lepsi jit cestou nastaveni apache a ignorovat velikost pismen. Alespon na cas a pak projit logy webu.
Re:Kterak skripty zvítězily nad Windows
majkro 26. 05. 2008, 15:08:53
Odpovědět  Odkaz 
Presne, ten clanecek je o tezce neprofesionalnim reseni a zakaznik ktery ma napr. zaplacene vyhledavace by byl asi pekne nasranej, kdyby mu neco neslo.
Jirka Vrba Re:Re:Kterak skripty zvítězily nad Windows
baf 26. 05. 2008, 17:49:54
Odpovědět  Odkaz 
Nerekl bych ze to je neprofesionalni. Problem byl ve starem webu a myslim, ze problem s velikosti pismen patri k zakladnim znalostem pro tvorbu webu. Tedy ten, kdo to neudelal dobre je puvodni autor.

Milan to vyresil rychle a elegantne, jen to reseni neni kompletni.

Ono taky zalezi na velikosti webu, pokud tech odkazu neni mnoho, tak se da spustit test platnosti odkazu a ty spatne pak upravit jeden po druhem rucne nebo dalsim vypecenym vyrazem.

Problem s reklamou se zase da vyresit pomoci presmerovani.
Re:Re:Re:Kterak skripty zvítězily nad Windows
majkro 27. 05. 2008, 11:06:24
Odpovědět  Odkaz 
Jasny, to jsme porad ale u reseni, ktere neni nijak uzitecne vseobecne pouzitelne. Je to jen mala ukazka co lze udelat v shellu. Co treba si priste napsat k tomu script na kopntrolu udkazu a sjednotit to?
Kterak skripty zvítězily nad Windows
Peterix 26. 05. 2008, 20:58:36
Odpovědět  Odkaz 
Ať žijou skripty! ·Đ
Kterak skripty zvítězily nad Windows
kozocecek 27. 05. 2008, 05:21:41
Odpovědět  Odkaz 
a nebyl problém v tom, že v HTML kódu bylo spoustu ...? tohle sjednotit by už bylo těžší.

Odpověď na otázku, jak by to trvalo dlouho...
Windowsy v shellu (místně zvaném command) např. mají příkaz `for`, mají "pajplajnování", ale přiznám se, že jsem ještě neviděl nikoho, kdo by to (v míře jako to bylo použito autorem článku) používal.
apropó) regulární výrazy ve Woknous bych asi hledal marně.
Jak bych to řešil já (woknousy mám)? Přes ad hoc skript napsaný pro můj nedávno vyvinutý vlastní skriptovací jazyk :-). Nebo pro (na woknousech běžící) PHPko.

Celkově mě článek pobavil, díky.
Kterak skripty zvítězily nad Windows
kozocecek 27. 05. 2008, 05:23:02
Odpovědět  Odkaz 
aha, sluplo to tagy: spoustu ---> spoustu <a href="Index.php"...
Kterak skripty zvítězily nad Windows
kozocecek 27. 05. 2008, 05:24:27
Odpovědět  Odkaz 
no prostě odkazy na soubory tvořené (mj. i) velkými písmeny. tj. ne jen jako jméno souboru ale i v obsahu.
Kterak skripty zvítězily nad Windows
Peta 29. 05. 2008, 02:08:08
Odpovědět  Odkaz 
Fest fajna prace.....to jsou skripty jak z ufo:)
Kterak skripty zvítězily nad Windows
MJ 30. 05. 2008, 23:17:16
Odpovědět  Odkaz 
Myslim ze by to ve win zadny problem nebyl, udelat presne to co autor clanku. Pouzit cscript (vbscript nebo jscript) coz je v podstate bezna soucast win, nebo PowerShell (vyzaduje .Net framework), nebo MS Unix services (nejsem si jist zda jsou zdarma ale myslim ze ano), nebo nejakou sadu unix-like prikazu (com a exe a to i bez Cygwin). Ano, asi by to bylo na vice radku nez ve clanku, ale za 10 minut rozhodne ano.
Kde lze najít info o skriptování
Karel Malý 19. 06. 2008, 01:58:43
Odpovědět  Odkaz 
Dobrý den,

mě se elegantní řešení skriptíky moc líbilo. Mohu se zeptat, kde najdu nějaké tutoriály o skriptování pod linuxem? Nejlépe na netu, nebo nějakou knížku. Jde mi hlavně o příklady jako v článku.
Re:Kde lze najít info o skriptování
Milan Kozák 27. 06. 2008, 13:28:41
Odpovědět  Odkaz 
Před časem v našem časopisu vyšel seriál Bohdana Milara o Bashi. Pokud vám nevadí angličtina, více příkladů naleznete například v Advanced Bash-Scripting Guide na adrese http://tldp.org/LDP/abs/html/

Přidat názor

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Milan Kozák

Milan Kozák

I přestože jsem paranoidní neznamená, že mě nedostanou...


  • Distribuce: Debian, *BSD, Slackware
  • Hodnocení autora: *

| blog