Výkon webu
https://developers.google.com/pagespeed/
Gzip komprese
http://nontroppo.org/tools/gziptest/
https://developers.google.com/pagespeed/
http://nontroppo.org/tools/gziptest/
Editace a prohlížení velkých textových souborů (1 GB+) není žádná legrace. Představte si, že máte před sebou textový soubor s SQL dumpem databáze a potřebujete v něm pod Windows něco upravit.
Jestli je soubor v řádu jednotek nebo maximálně desítek megabytů, můžete zkusit český PSPad (v 4.5.6) nebo lépe Notepad++ (v 5.9.6.2).
Pokud ale musíte pracovat s dumpy, které mají stovky megabytů nebo jednotky gigabytů, rovnou na výše dva zmíněné programy zapomeňte. Potřeboval jsem pracovat s dumpem o velikosti cca 700 MB a ani jeden si s ním neporadil (ne že bych čekal něco jiného).
Možná jste při práci s PHP narazili na problém s UTF-8 kódováním. Doposud jste využívali kódování cp1250 nebo iso-8859-2 a nebyl problém. Okolnosti vás přinutily požívat UTF-8 a najednou bum. Na stránkách se vám chybně vypisují znaky s českou diakritikou a nevíte co s tím.
Je třeba dodržet následující pravidla:
mysql_query("SET NAMES 'utf8'");
nebo
mysql_query('SET CHARACTER SET utf8');
Od PHP 5.2.3 a MySQL 5.0.7 raději použijte:
mysql_set_charset('utf8');
Je to správná a bezpečná varianta
pro použití mysql_real_escape_string(). Více: 1, 2, 3.
header('Content-Type: text/html; charset=utf-8');
Nedávno jsme s Lukášem Churým a Ondrou Vašíčkem řešili rychlost operace UPDATE v závislosti na tom, jestli upravovaný sloupec má či nemá nastavený index.
Představte si, že máme v MySQL 5.0 tabulku o několika sloupcích, dva z nich jsou „id“ a „xy“. Nad sloupcem „id“ je přidělený index. Sloupec „xy“ index nemá. Rychlost UPDATE sloupce „xy“ trvá nějaký čas.
Otázka zní, jestli UPDATE zabere stejný čas i v případě, kdyby sloupec „xy“ měl přidělený index.
Udělal jsem jednoduchý test, který přináší odpověď.
V názvu článku jsem vyjmenoval slova, která jsou strašákem nejednoho PHP programátora. Strašák to je ale pouze uměle vytvořený, vycházející z neznalosti problematiky.
Dost často se ve spojení s SQL injection (typ útoku hackera) zmiňuje PHP konstanta magic_quotes_gpc. Prý, že pokud je zapnutá, tak se dá SQL injection předejít. A víte, že od PHP 5.3 bude standardně magic_quotes_gpc vypnutá?
Znamená to, že poté budou SQL dotazy napadnutelné pomocí SQL injection? Ale vůbec ne.
Konstanta magic_quotes_gpc totiž s ochranou SQL injection nemá v podstatě nic společného. Pouze zde existuje průsečík v možnosti jejího využití. Proto ji neznalí programátoři začali přisuzovat větší váhu, než má. Váha magic_quotes_gpc je samozřejmě nulová, zvláštně, když od PHP 5.3 bude vypnutá a v PHP 6 zanikne úplně.
Vysvětleme si tedy, oč jde. SQL injection je vážný problém.
Typický příklad. Máme tabulku, kam ukládáme nějaké záznamy o činnosti uživatele. Tentokrát třeba návštěvu vlákna ve fóru, spolu s časem a počtem příspěvků ve vláknu.
Pokud takový záznam neexistuje (vázaný na ID uživatele a ID vlákna), tak vytvoříme nový záznam (INSERT), jinak provedeme aktualizaci záznamu (UPDATE), tedy čas a počet příspěvků.
Nabízí se několik možností, jak tento proces provést.
Všetři tři kroky uzavřeme do stransakce (viz Jakub Vrána).
Možná jste někdy narazili na potřebu v rámci jedné databáze překopírovat řádky z jedné tabulky do tabulky druhé. Nabízí se obstrukční řešení, kde získáme pomocí SELECT všechny položky, poté výsledky proženeme skrz while cyklus a mysql_fetch_array, a v každém průchodu cyklu provést INSERT. Případně si takový INSERT „poskládat“ a provést jen jednou; zde ale pozor na případný limit ve velikosti dotazu.
Takový způsob by byl samozřejmě zdlouhavý a chybný. Existuje naprosto jednoduché a elegantní řešení.
V databázi máme například jména. Chceme získat všechna jména, která jsou kratší než 7 znaků. Jak na to?
Známá funkce strlen() v MySQL neexistuje, zato můžeme použít funkci CHAR_LENGTH().
Někdy je potřeba vypsat několik předposledních záznamů z tabulky, třeba článků. Pro vypsání stačí data seřadit od nejnovějšího a použít LIMIT včetně offsetu.
Kvůli RSS někdy potřebujeme vytvořit zápis data a času v požadovaném tvaru.
Třeba v takovém: Sat, 20 Dec 2008 13:21:00 GMT+1
Uvedený formát můžeme vygenerovat v PHP nebo přímo pomocí SQL dotazu.