Posts with tag PHP
Test rychlosti konkatenace textu v šablonách v PHP
Šablonovací systém v PHP často funguje na tom principu, že si uchovává dočasný výstup v HTML a ten posléze vytiskne. Někde jsem se dočetl, že postupné připojování krátkých sekvencí k existujícímu textu je neefektivní vůči paměti a výkonu, zejména kvůli neustálé realokaci místa. Rozhodl jsem se otestovat, jestli je toto tvrzení založeno na pravdivé skutečnosti.
Vytvořil jsem jednoduchý skript, který pomocí pseudonáhodného generátoru a hashovací funkce md5 sestavoval náhodný text z různě dlouhých kousků textu. V prním případě jsem použil klasickou konkatenaci pomocí tečky, v druhém případě jsem jednotlivé části uchovával v poli a ten nakonec spojil funkcí implode.
Při spouštění skriptu jsem měřil čas spotřebovaný procesorem a celkovou paměť, jakou program potřeboval. Výsledky skutečně hovořily lépe pro verzi s polem a následným spojením pomocí implode funkce, ale rozdíly byly v řádu jednotek procent, maximálně 10%.
Znamená to asi tolik, že optimalizátor i interpret php je obdivuhodně výkonný a k žádnému rapidnímu plýtvání pamětí při postupném tvoření řetězce konkatenací nedochází.
add comment
view posted comments (0)
Osobní stránky - jednoduše V denšní době existuje mnoho způsobů, jak si vytvořit své osobní stránky. Pominu způsob vlastní tvorby (programování HTML stránek, případně PHP) a nabídnu Vám několik způsobů, jak i zadarmo a bez znalosti programování vytvořit své stránky. Nejdříve je potřeba si rozmyslet, co chci na svých osobních stránkách prezentovat. Samoúčelné stránky (podle hesla "hlavně abych nějaké měl") jsou k ničemu, takže pokud na svých stránkách nechcete prezentovat nic smysluplného, co by ostatní mohlo alespoň trochu zajímat, raději se od tvorby ani nepouštějte. Vždy je dobré mít na paměti, pro koho stránky připravuji a co chci návštěvníkům sdělit. Toto bychom měli mít vždy na mysli. Pojďme tedy už konkrétně k samotné tvorbě. Internet je dnes plný zajímavých nástrojů a aplikací, které Vám dovolí "naklikat" si Vaše vlastní stránky doslova za pár sekund. Vesměs to probíhá velmi podobně, je nutné se zaregistrovat (vyplnit nacionále, kontakt a nějaké bližší informace), potvrdit podmínky registrace a pak již můžete směle tvořit. Vyberete si z několika nabízených témat (návrhy stránek) a potom na vybraná místa dopíšete své texty. To stačí k tomu, abyste byli součástí WWW. Záleží na charakteru a rozsáhlosti systému, co vše dovolí změnit. Zde je na ukázku několik systémů, které nabízejí zmíněné služby: Webgarden http://zone.webgarden.cz/ Rodinné weby http://www.rodinneweby.cz/ Někomu může stačit obyčejný blog (pokud nevíte, co je to blog, dozvíte se více zde), ten si můžete zřídit na http://www.bloger.cz/ http://www.bloguje.cz/
Jak přechytračit Captcha Resolver
Captcha ("completely automated public Turing test to tell computers and humans apart", tedy "plně automatický veřejný Turingův test k odlišení počítačů a lidí") většinou nutí uživatele opsat text z grafického obrázku. Začínal jsem s velmi jednoduchým barevným textem na pozadí, které zvořily vodoznaky. Po pár dnech jsem se stal objetí jednoho z Captcha Resolverů, který mým testem bez větších problémů prošel.
Začal jsem tedy upravovat výsledný text s cílem ztížit robotům jeho rozpoznání. Přidal jsem bílé linky, které přerušují písmenka a barevné obedélníky, které mají robota zmást.
Co na to roboti? Nemají problém.
Dále jsem zkoučel rozmazání. Co roboti? Opět v pohodě rozpoznají. Zkoušel jsem další a další věci, ale výsledkem toho byla jen obtížnější čitelnost pro člověka, ale zároveň stále příliš dobrá čitelnost pro roboty.
Neplatilo na ně:
- různá barva písmen
- vodoznaky na pozadí
- obdélníky pro zmatení
- rozmazání (ve skutečnosti je rozmazání jedním z kroků při rozpoznávání textu, takže jsem tím robotům akorát ulehčil práci)
- dělení zanků bílými linkami
- jiné barevné linky
Naopak lepší výsledky (rozuměj větší zmatení protivníka - OCR robota) dosáhneme použitím:
- jednobarevného textu
- písmenka blízko u sebe (až se překrývají)
- netradiční, nejlépe bitmapový font
- část obrázku zinvertovat
Zajímavější a úspěšnější ukázky a dokonce možnost integrovat tamější systém kontroly do vašich stránek nabízí projekt http://recaptcha.net. Vzhledem k přístupnosti není od věci i možnost nechat si text přehrát.
OCR roboti jsou den ode dne chytřejší a vygenerovat dobře čitelnou Captchu pro lidi, ale nerozpoznatelnou pro počítač je den ode dne těžší a těžsí. Zajímavou alternativou jsou pak logické otázky, od základních "kolik je pět a tři?" až po zajímavější "Kolik nohou má stonožka?".
Právě jsem přežil další pátek 13.
Nejsem nijak pověrčivý a triskaidekafobií (strach z pátku 13.) netrpím. Přesto pro mě byl uplynulý den výjimečný a nebylo to ani kvůli symbolickému doručení podepsané Lisabonské smlouvy do Říma. Spustil jsem totiž nový web. Abych byl přesný, svůj blog (právě ho čtete) jsem nasadil na nový engine a samozřejmě se také změnila grafika.
Pokud tento text vidíte, znamená to, že web pravděpodobně funguje. I když to nešlo podle představ, nakonec se, zdá se, dílo zdařilo. Kdo by řekl, že mezi verzemi MySQL a PHP, které se od mé lokální verze liší až na třetím řádu, mohou být tak propastné rozdíly a z funkčního webu udělají rázem nefunkční. Nebo hloupé defaultní nastavení direktivy magic_quotes_gpc v PHP - kdo to kdy viděl v dnešní době na verzi PHP 5.2.x?
Každopádně se teď budu modlit, aby už vše fungovalo, a přeji svému dílu pevné zdraví a dobrou čtenost.
CSS a HTML generátor boxů s oblými rohy (rounded corner box)
Dnes bych rád v rychlosti prezentoval jeden můj nástroj na podporu tvorby webu. Jedná se o generátor HTML a CSS pro boxy s oblými rohy.
Kdo dělá trochu do webdesignu ví, že vyrobit box s oblými rohy není jednoduché, má-li být jeho šířka přizpůsobena obsahu. Když se k tomu přidá stále používaný IE6, který má velké problémy s CSS atributem height: 100%, je vývoj takového boxu téměř nadlidský úkol. A co když má box mít navíc průhledné okolí rohů, aby byl box regulerně zobrazen na jakémkoliv pozadí? Tím se to ještě zesložití.
Já jsem si dal tento týden jasný úkol: Implementovat HTML a CSS tak, aby byly výše zmíněné body dodrženy. Zde jsou:
- box z libovolné bitmapy (používám PNG, které může být i průhledné)
- jeho velikost se přizpůsobuje obsahu na výšku i šířku
- korektně zobrazen ve všech prohlížečích (toto se mi nepovedlo v IE6, místo toho je v případě velikosti závislé na obsahu zobrazen klasický box s jednou barvou; pokud se zvolí fixní šířka nebo výška, je to v pořádku)
- co nejjednodušší HTML a CSS
Zjeména jsem se zaměřil na obecnost, což mělo za následek trochu dívočeší HTML definici, ale komu vadí deset tagů <b> za sebou? Mě ne.
Pro zjednodušení jsem zvolil na výběr čtyři varianty: fixní šířka, výška, obojí nebo nic (box bude v obou směrech přizpůsoben obsahu).
Když už jsem měl po několika hodinách kódování správně navrhnuté HTML a CSS, napadlo mě vytvořit jednoduchý generátor, který by rozřezal zadaný obrázek a vytvořil odpovídající definici HTML a CSS.
Generátor jsem původně chtěl užívat sám, ale nakonec jsem z něho měl takovou radost, že jsem ho dal k dispozici i dalším.
Co tedy generátor umí?
- rozřeže zadaný obrázek, který si nakreslíte v nějakém grafickém programu nebo vyberete z nabídky
- zadáte velikost okrajů na každé straně zvlášť
- zvolíte variantu rozměr: fixní šířka, výška, obojí nebo nic (box bude v obou směrech přizpůsoben obsahu)
- vygenerujete HTML a CSS
Jak vypadají výsledky se podívejte sami.
Správné přesměrovat pomocí 301 nebo 302? Plus příklad v PHP
V době dynamických webů je běžné přesměrování stránek na úrovni HTTP protokolu. Zejména vhodné je to například po vyplnění formuláře, zabrání se tak například opětovnému, nechtěnému odeslání. V jiném případě se přesměrování používá v případě změny url dokumentu nebo celé domény webové aplikace. V obou případech se jedná o situaci, kdy server pomocí HTTP protokolu prohlížeči pošle hlavičku s odkazem na nové umístění dokumentu. Prohlížeč na to konto pošle nový požadavek na novou adresu dokumentu.
Přesto bychom měli rozlišovat minimálně tyto dva zméněné případy. V případě přesměrování po odeslání formuláře se jedná o jednorázové přesměrování, často může být cílová adresa závislá na hodnotách formuláře. V tomto případě nelze s jistotou říci, kam má být při dalším odeslání uživatel přesměrován (použijeme přesměrování 302 Found). V druhém případě je ovšem přesměrování trvalé a zejména indexační roboti vyhledávačů mohou původní adresu ze své databáze odstranit a nahradit ji novou (použijeme přesměrování 301 Moved permanently).
Existují i další typy přesměrování pomocí kódu 3xx, o kterých se dozvíte na webu w3 a na wikipedii, ovšem podle všeho nemusí být všechny implementovány ve všech prohlížečích. Nicméně minimálně kódy 301 a 302 by podporovány být měly a všechny kromě 301 by měly být bez problému možné nahradit pomocí 302.
Jak provést přesměrování v PHP:
Přesměrování se v PHP provede zasláním jiné než standardní HTTP hlavičky, tedy funkcí header(). V tuto dobu zpravidla zpracování požadavku na straně serveru končí, proto je po zaslání hlavičky volána funkce exit().
// permanentni presmerovani
header("HTTP/1.1 301 Moved Permanently");
header("Location: www.seznam.cz/nova-adresa-stranky/");
exit();
// presmerovani po zaslani formulare
header("HTTP/1.1 302 Found");
header("Location: www.seznam.cz/formular-byl-odeslan/");
exit();




