Vylepšené server-side kešování v PHP
19. 11. 2008 | V kategorii Apache, Internetové aplikace, Javascript, Jazykový koutek, PHP, Programování | 1 komentář
V nedávném příspěvku jsem psal o velmi důležité funkci – cachování na straně PHP skripu, které je užitečné zejména v případě dlouhých databázových dotazů nebo složitě parsovaných vstupních dat třeba z webové služby.
Někdy je nutné data načíst znovu ještě před expirací cache, např. při ladění skriptu. Občas se něco nepovede i při běžném provozu a uživateli bychom měli umožnit obnovení celé stránky pomocí CTRL+F5 i za cenu, že zpracování stránky bude trvat déle.
Použijeme skript původního příkladu, ale do podmínky pro načtení
přidáme ještě testování na parametr HTTP_PRAGMA, kterým nám server naznačuje, že si uživatel nepřeje načítat data z cache.
Pokud ještě zaměníme v názvu bloku ‘narocnyblok’ za md5 hashované parametry, máme už dokonalý kešovací skript.
Tajuplný JSON kouzla zbavený
12. 9. 2008 | V kategorii Apache, Internetové aplikace, Javascript, Programování, webdesign | Přidejte komentář
Každý javascriptový programátor zřejmě už slyšel tajemnou zkratku JSON. A pokud už předtím měl nepříjemné zkušenosti s XML, má z webových formátů možná posvátný respekt až hrůzu. O tom, že JSON je technologie naopak velmi uživatelsky přívětivá, je následující článek.
JSON je formát dat, který podobně jako XML umožňuje přenášet formátovaná data – pole – z jedné platformy na druhou. Programátory AJAXových aplikací si zkrátka musí získat skvělý způsob, jakým lze poskytovat data z PHP do Javascriptu.
Začínáme
Pro začátek trochu nemilá zpráva pro příznivce konzervativních až zpátečnických hostingů: funkce pro práci s tímto formátem jsou dostupné pouze od verze PHP >= 5.2. Nám ostatním funguje funkce json_encode(). A pokud vás k přechodu na pořádný hosting nepřesvědčí ani to, že váš hoster kašle na bezpečnost, určitě zvládnete tuto funkci implementovat sami na pár řádcích PHP kódu.
Posíláme data z PHP
Funkce json_encode() nedělá než nic jiného, než že vezme jakékoliv (nejlépe asociativní) pole a vytvoří z něj string formátovaný v JSON.
<?php
$r['jmeno']='Pavel';
$r['prijmeni']='Novak';
$r['bydliste']['ulice']='Sokolská';
$r['bydliste']['cp']='666';
$r['bydliste']['mesto']='Strakonice';
echo json_encode($r);
// výstup:
// {"jmeno":"Pavel","prijmeni":"Novak","bydliste":{"ulice":"Sokolovska","cp":"666","mesto":"Strakonice"}}
?>
A teď do Javascriptu tím!
Co je na tom nejzajímavější: Protože se jedná o přímou javascriptovou syntaxi zápisu objektu, Javascript už s takto formátovaným stringem umí pracovat, není třeba řetězec složitě parsovat nebo upravovat!
Stačí jeden eval().
var a= '{"jmeno":"Pavel","prijmeni":"Novak","bydliste":"ulice":"Sokolovska","cp":"666","mesto":"Strakonice"}}';
eval('var obj='+a)
//Zobrazení hodnot
alert(obj['bydliste']['mesto']);
//anebo
alert(obj.bydliste.mesto);
Google Chrome udělal dojem hned na první pokus
3. 9. 2008 | V kategorii Internetové aplikace, MySQL, webdesign | 7 Comments
(Napsáno v prohlížeči Google Chrome)
Tak jsem tu novinku taky prozkoumal, když už to bylo i na Nově.
A … jsem mile překvapen. Všechno funguje jak má. Bookmarky.cz taky.
Ale co jsem opravdu nečekal: rychlost. Prohlížeč se otvírá i zavírá bez dlouhého škrábání na disku, všechny stránky fungují vůbec velmi (!) svižně – proti Firefoxu i bez výrazných paměťových nároků.
Pár postřehů a první dojmy
- Google se snaží oslovit zapřísáhlé uživatele Internet Exploreru minimalistickým designem a podobným rozmístěním ovládacích prvků.
- Všechno funguje. Bookmarky.cz, TinyMce, JQuery, WordPress, Ajax, content-editable, vše bez problémů, ale mnohem rychleji.
- Excelentní rychlost vykreslování stránky.
- Ještě excelentnější :-) rychlost Javascriptu
- Na nové kartě se zobrazí nejnavštěvovanější weby ve stylu SpeedDial ve Firefoxu.
- Menší paměťové požadavky než Firefox3.
- Trochu nezvyklé – není žádné vyhledávací pole. Takto sice umí fungovat i Firefox a IE, ale stejně…
- Trochu mě vyděsilo, že si prohlížeč naimportoval i uložená hesla z Firefoxu.
- Vývojářská konzole – možná bude chtít delší zkoumání, uvidíme. Taky je tam nějaký profiler. Ale na FireBug stejně nemá.
- Každá Textarea má růžek pro změnu velikosti. Moc pěkné. Škoda že není taky v dolním rohu prohlížeče.
- V adresním řádku je zvýrazněna doména tmavým písmem. Detail, ale celkem fajn.
- Dialog pro upload souboru neumožňuje pastnout název souboru, stejně jako ve Firefoxu3. Místo toho je trochu nevzhledný nápis.
- Chrome nemá stejně jako IE7 hlavní menu. Pokud jste geek, pak znáte klávesové zkratky. Pokud používáte IE7, je na vás příliš i to, co máte na liště.
- Animovaná šipka při downloadu souboru určitě ozvláštní nudné hodiny surfování po netu.
- Hodily by se na liště buttonky Historie a Záložky, snad by tolik místa nezabraly. Aspoň že tlačítko Home lze zapnout, i když zrovna to bych oželel.
- Sidebar je asi přežitek. K ničemu, pryč s ním.
- Moc pěkné je naopak vytvoření nového okna prohlížeče pouhým přetažením mimo hlavní okno a vrátit zpět do původního okna. Zajímavé, funguje i v Opeře. A ve Firefoxu ne. Můžete také měnit pořadí karet na panelu.
- Důležité může být i Anonymní okno (zlé či jinak vášnivé jazyky používají termín porn mode), kde se zřejmě dlouhodobě neukládají přihlašovací údaje a historie prohlížených stránek.
- Výpis navštívených stránek lze zobrazit Ctrl+H
Shrnutí
P.S.: Pro zastánce konspiračních teorií: Podle tohoto článku byla opravena licenční smlouva, kde si firma Google údajně osobuje právo na cokoliv projde oknem prohlížeče, která byla zjevně pouze okopírovaná z jiných služeb Google.
PHP – zase jedna past na začátečníky
29. 8. 2008 | V kategorii PHP, Programování | 4 Comments
Pokud máte projekt v PHP, kterému se věnujete už několik let, zřejmě se nevyhnete také “nánosům minulosti”.
Tohle je jedno z nejčastějších a nejčastěji porušovaných pravidel při programování v PHP a je třeba je tesat do kamene:
OPRAVDU INICIALIZUJTE VŠECHNY PROMĚNNÉ.
<?
$pole=Array('nula','jedna','dvě', 'tři');
foreach($pole as $b){
$vystup[$i]=Array($i,$b);
$i++;
}
echo $vystup[0];
?>
A co je na tom špatně?
Pokud nemám inicializovanou proměnnou $i, nebude mít $i počáteční hodnotu “0”, ale jenom “”, což platí i pro asociativní pole. Tudíž počáteční prvek pole není uložen v $vystup[0], ale $vystup[”].
Nojo, jednoduché. Pokud víte, co a kde hledat.
Úprava zarovnávání plovoucích elementů pro Firefox 3
9. 8. 2008 | V kategorii css, Internetové prohlížeče | Přidejte komentář
Kvůli nově zavedené podpoře inline-block ve Firefoxu3 (waaaaau užasnou teď jistě uživatelé IE5+) je třeba mírně upravit poměrně známý zarovnávací hack pro plovoucí (float) elementy.
/* This needs to be first because FF3 is now supporting this */
.clearfix {display: inline-block;}
.clearfix:after {
content: ” “;
display: block;
height: 0;
clear: both;
font-size: 0;
visibility: hidden;
}
/* Hides from IE-mac \*/
* html .clearfix {height: 1%;}
.clearfix {display: block;}
/* End hide from IE-mac */
Proč je nutné zarovnávat dva plovoucí elementy vedle sebe když už jsou zavřeny v DIVu a ještě je na to potřeba takto složitou konstrukci? A proč jsme asi 10let nemohli v Mozille/Firefoxu nastavovat rozměry inline elementu? Tak tohle ví asi jenom vývojáři zmiňovaných prohlížečů.