Filter a další novinky v PHP 5.2

Jakub Vrána 7. 11. 2006

PHP 5.2 slibuje podobně jako každá větší verze téměř jakéhokoliv produktu významné zrychlení, bezpečnostní záplaty, aktualizované knihovny a spoustu dalších oprav a vylepšení. Některé novinky jsou ale významnější a vyplatí se na ně podívat podrobněji.

Filter

Asi nejvýznamnější novinkou v PHP 5.2 je rozšíření Filter. Toto rozšíření není zcela nové, v minulosti bylo k dispozici v knihovně PECL, do PHP 5.2 ale bylo umístěno s výstižnějšími názvy funkcí a mírně upraveným API. Rozšíření Filter slouží pro jednotnou kontrolu a úpravu dat, především pro kontrolu dat zadaných uživatelem a pro použití v situacích, kdy mají určité znaky speciální význam (např. v HTML nebo SQL). Pro filtrování dat přišlých od uživatele se používá funkce filter_input nebo hromadná filter_input_a­rray, pro filtrování vlastních proměnných se používají funkce filter_var a filter_var_array.

Filtrů je celá řada, rozdělit je můžeme do tří skupin:

Validační filtry
Kontrolují, jestli hodnota splňuje daná kritéria. Pokud ano, tak ji vrátí ve správném typu, jinak vrátí false. Patří sem např. filtry int, validate_url, validate_email nebo validate_ip. Pomocí filtru validate_regexp lze kontrolu provádět pomocí vlastního regulárního výrazu.
Sanitizační filtry
Odstraňují z hodnoty nežádoucí znaky nebo je nahrazují. Patří sem např. filtry number_int, stripped (odstranění značek), special_chars (zakódování znaků <>&"'), encoded (zakódování pro URL), magic_quotes (aplikování funkce addslashes), email nebo url.
Vlastní filtry
Jsou realizovány uživatelsky definovanými funkcemi, které se volají pomocí filtru callback.

Chování většiny filtrů se dá navíc ovlivnit dalšími volbami, jejichž přehled je v dokumentaci.

Kromě ručního filtrování hodnot lze pomocí direktivy filter.default zapnout i implicitní filtrování všech dat přišlých od uživatele. K původním hodnotám se potom dá dostat pouze přes rozšíření Filter po aplikování požadovaného filtru (pokud data nijak upravit nechceme, dá se použít speciální filtr unsafe_raw). V tom případě se automaticky filtrují pole $_GET, $_POST, $_COOKIE, $_SERVER a $_ENV, pole $_REQUEST a $_SESSION se zatím nefiltrují a nedají se použít ani ve funkci filter_input.

<?php
$search_html = filter_input(INPUT_GET, 'search', FILTER_SANITIZE_SPECIAL_CHARS);
$search_url = filter_input(INPUT_GET, 'search', FILTER_SANITIZE_ENCODED);
echo "Hledali jste <code>$search_html</code>.\n";
echo "<a href='?search=$search_url'>Hledejte znovu.</a>";
?> 

Rozšíření JSON, DateTime a ZIP

Jednoduché rozšíření JSON umožňuje převádět data do formátu JavaScript Object Notation a opět je z něj načítat. Funkce json_encode zakóduje libovolnou hodnotu kromě typu resource, funkce json_decode ji zase rozkóduje. Vzhledem k tomu, že se neukládají metody objektů, lze funkcí json_decode určit, zda se mají místo objektů vracet asociativní pole.

<?php
$a = array("a" => 5, 6);
print_r(json_encode($a)); // {"a":5,"0":6}
?> 

V PHP 5.1 byla přepracována práce s datem, pro uložení konstant byla bohužel zvolena třída s nevhodně zvoleným názvem date. Tato třída se nyní vrací pod názvem DateTime a s novými metodami.

Rozšíření pro práci s archivy typu ZIP je v PHP k dispozici už dávno, dříve ale záviselo na knihovně třetí strany a archivy se daly pouze číst. Nová verze tohoto rozšíření knihovnu nepotřebuje a podporuje i zápis.

Další novinky

  • Z nových funkcí stojí za zmínku především array_fill_keys umožňující vytvořit pole s přednastavenými klíči a error_get_last vracející poslední chybu v asociativním poli. V souvislosti s touto funkcí je vhodné zmínit i novou úroveň chyb E_RECOVERABLE_ER­ROR, kterou je možné ošetřit funkcí určenou pomocí set_error_han­dler, nicméně pokud se tak nestane, je program ukončen. Touto chybou bylo nahrazeno vracení chyb E_ERROR v situacích, které neuvedou PHP do nestabilního stavu.
  • Funkce setcookie, setrawcookie a session_set_co­okie_params dostaly nový parametr httponly, kterým se dá v Internet Exploreru 6 a novějším (ve Firefoxu 2 spolu s rozšířením) zakázat čtení cookies JavaScriptem. Automatické nastavování tohoto parametru při práci se sessions zajišťuje direktiva session.cooki­e_httponly.
  • PHP 5.2 také konečně umožňuje vytvářet rozšíření zobrazující průběh nahrávání souboru na server. Konečnou implementaci potom zajišťuje např. rozšíření UploadProgress.
  • Volání funkce __toString bylo rozšířeno na všechna možná místa, takže už se programátoři nebudou divit, proč volání kódu echo $obj . "" vypíše na rozdíl od echo $obj pouze  Object id #1.
  • Protokol data://, který vešel ve známost především v souvislosti s testem ACID2, je nyní možné používat i v PHP.

Další, ne již však tak významné novinky jsou popsány v instrukcích pro přechod ze starších verzí.

Bezpečnost

Z konfigurační direktivy allow_url_fopen byla vyčleněna direktiva allow_url_inclu­de, která zakazuje použití protokolu http:// a podobných pouze ve funkcích pro vkládání souborů. Nicméně stejně jako direktiva allow_url_fopen ani tato nezakazuje použití protokolů php:// a nového data://, takže se pro zabránění vzdáleného spuštění použít nedá. Pro tento problém nicméně již existuje patch, takže snad začne tato bezpečnostní pojistka svou funkci doopravdy plnit již brzy.

Za zmínku určitě stojí značné množství oprav týkajících se bezpečnosti. S aktualizací na novou verzi tedy není radno otálet.

Ohodnoťte jako ve škole:

Průměrná známka 3,15

Našli jste v článku chybu?
Zasílat nově přidané názory e-mailem
120na80.cz: Co jí dělá? Sklerotizaci

Co jí dělá? Sklerotizaci

Lupa.cz: Kam si doma dáte internet věcí? Na polici?

Kam si doma dáte internet věcí? Na polici?

120na80.cz: Tady se vaří padělané léky

Tady se vaří padělané léky

120na80.cz: Co lidi tropí se sádrou

Co lidi tropí se sádrou

Lupa.cz: Nová podoba Instagramu? Katastrofa

Nová podoba Instagramu? Katastrofa

Vitalia.cz: SÚKL: vakcíny jsou bezpečné a s autismem nesouvisí

SÚKL: vakcíny jsou bezpečné a s autismem nesouvisí

Vitalia.cz: Proč máme prasklý chléb nejraději?

Proč máme prasklý chléb nejraději?

Podnikatel.cz: Konečně vývar. Skoro jako od Steva Jobse

Konečně vývar. Skoro jako od Steva Jobse

Vitalia.cz: Syndrom počítačového vidění: stačí dvě hodiny denně

Syndrom počítačového vidění: stačí dvě hodiny denně

Vitalia.cz: 7 nemocí očí, které musíte léčit včas

7 nemocí očí, které musíte léčit včas

Podnikatel.cz: Rošáda v živnostech. Týká se vás?

Rošáda v živnostech. Týká se vás?

Podnikatel.cz: Šizený guláš na pultě. Jako Lidl to nedělejte

Šizený guláš na pultě. Jako Lidl to nedělejte

Podnikatel.cz: Alza radí e-shopům, jak opustit Heureku

Alza radí e-shopům, jak opustit Heureku

Lupa.cz: Přenos hokeje padal kvůli útoku, tvrdí O2

Přenos hokeje padal kvůli útoku, tvrdí O2

Vitalia.cz: Muži kouří 24 cigaret denně, ženy o dost míň

Muži kouří 24 cigaret denně, ženy o dost míň

Root.cz: Zákon o hazardu je v rozporu s ústavou

Zákon o hazardu je v rozporu s ústavou

Lupa.cz: Jak EET vidí ajťák aneb Drahá vražda UX

Jak EET vidí ajťák aneb Drahá vražda UX

DigiZone.cz: Šlágr TV dostala pokutu 100 000 Kč

Šlágr TV dostala pokutu 100 000 Kč

Vitalia.cz: Před, nebo po snídani? Kdy je lepší čistit si zuby

Před, nebo po snídani? Kdy je lepší čistit si zuby

DigiZone.cz: Šlágr TV: pokuta 100 tisíc za on-line

Šlágr TV: pokuta 100 tisíc za on-line