Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
infrastruktura webová řešení marketing
NetteUtils a příbuzní:
skryté klenoty
Jan Smitka, @jansmitka
Poslední sobota #68, 3...
NetteIteratorsCachingIterator
2
{foreach $rows as $row}
{if $iterator->first}<table>{/if}
<tr n:class="$iterator->isEven()...
NetteIteratorsCachingIterator
3
foreach ($iterator = new NetteIteratorsCachingIterator($rows) as $row) {
if ($iterator->is...
NetteUtilsStrings
• Regulární výrazy se správným ošetřením chyb:

http://phpfashion.com/zradne-regularni-vyrazy-v-php
• Me...
UTF-8 řetězce
5
strlen("Slečna"); // 7
mb_strlen("Slečna", "UTF-8"); // 6
substr("Slečna", 0, 6); // "Slečn"
mb_substr("Sl...
Příklad špatného použití
6
public static function stripHeaders(CurlWrapper $curl)
{
$curl->responseHeaders = Strings::subs...
NetteUtilsRandom
• generate($length = 10, $charlist = '0-9a-z')
• Ke generování se snaží použít první z následujících meto...
NetteSecurityPasswords
• Metody (obdoba password_* z PHP 5.5 – http://php.net/manual/en/ref.password.php)

hash($password,...
Vliv parametru cost
• Měřeno na Retina MacBook Pro, 13", Late 2013, CPU Core i5 @ 2.4GHz, PHP 5.5.17
• Měření cost = 14: c...
NetteUtilsJson
• Metody

encode($value, $options = 0)

decode($json, $options = 0)
• Ošetření chyb: vyhazuje výjimky Nette...
NetteUtilsFileSystem
• Metody pro práci se souborovým systémem.
• Ošetření chyb – výjimky NetteIOException a některé další...
NetteUtilsValidators
• Validace datových typů i formátů – např. délka řetězce apod.
• Umí validovat jednotlivé proměnné, p...
NetteHttpHelpers
• ipMatch($ip, $mask)
• Maska zadána ve tvaru CIDR:

<prefix ip adresy>/<počet bitů shody>
• Příklad: IP ...
Dotazy?
14
Děkuji za pozornost.
15
Upcoming SlideShare
Loading in …5
×

Nette\Utils a příbuzní: skryté klenoty (Poslední sobota #68)

1,415 views

Published on

Slidy k přednášce o vybraných nástrojích z Nette\Utils a podobných nástrojích.

Published in: Software
  • Be the first to comment

Nette\Utils a příbuzní: skryté klenoty (Poslední sobota #68)

  1. 1. infrastruktura webová řešení marketing NetteUtils a příbuzní: skryté klenoty Jan Smitka, @jansmitka Poslední sobota #68, 31. 1. 2015
  2. 2. NetteIteratorsCachingIterator 2 {foreach $rows as $row} {if $iterator->first}<table>{/if} <tr n:class="$iterator->isEven() ? even : odd"> <td>{$row->name}</td> <td>{$row->email}</td> </tr> {if $iterator->last}</table>{/if} {/foreach}
  3. 3. NetteIteratorsCachingIterator 3 foreach ($iterator = new NetteIteratorsCachingIterator($rows) as $row) { if ($iterator->isFirst()) { // ... } // ... }
  4. 4. NetteUtilsStrings • Regulární výrazy se správným ošetřením chyb:
 http://phpfashion.com/zradne-regularni-vyrazy-v-php • Metody pro práci s řetězci v UTF-8 – používá extension mbstring. • Pozor na správné použití a míchání s non-multibyte funkcemi a hodnotami! 4
  5. 5. UTF-8 řetězce 5 strlen("Slečna"); // 7 mb_strlen("Slečna", "UTF-8"); // 6 substr("Slečna", 0, 6); // "Slečn" mb_substr("Slečna", 0, 6, "UTF-8"); // "Slečna"
  6. 6. Příklad špatného použití 6 public static function stripHeaders(CurlWrapper $curl) { $curl->responseHeaders = Strings::substring($curl->response, 0, $headerSize = $curl->info['header_size']); if (!$headers = CurlWrapper::parseHeaders($curl->responseHeaders)) { throw new CurlException("Failed parsing of response headers"); } $curl->response = Strings::substring($curl->response, $headerSize); return $headers; } $curl->info['header_size'] je počet bajtů, nikoliv počet UTF-8 znaků!
  7. 7. NetteUtilsRandom • generate($length = 10, $charlist = '0-9a-z') • Ke generování se snaží použít první z následujících metod (závislé na platformě): • openssl_random_pseudo_bytes (nepoužívá se v PHP 5.3 na Windows) • mcrypt_create_iv (nepoužívá se v PHP <= 5.3.6 na Windows kvůli bugu v PHP) • file_get_contents('/dev/urandom') (není dostupné na Windows) • md5(serialize($_SERVER), TRUE) • Kromě posledního jsou všechny kryptograficky bezpečné. • Dále kombinuje s microtime() a lcg_value(). 7
  8. 8. NetteSecurityPasswords • Metody (obdoba password_* z PHP 5.5 – http://php.net/manual/en/ref.password.php)
 hash($password, array $options = NULL)
 verify($password, $hash)
 needsRehash($hash, array $options = NULL) • Používá algoritmus bcrypt (PHP >= 5.3.7), $options: • cost – počet iterací (2cost – opatrně!), možné hodnoty 4-31, default 10. Určení vhodné hodnoty: http://php.net/manual/en/function.password-hash.php#example-924 • salt – 22 znaková sůl, pokud není zadána, Nette ji náhodně vygeneruje. 8
  9. 9. Vliv parametru cost • Měřeno na Retina MacBook Pro, 13", Late 2013, CPU Core i5 @ 2.4GHz, PHP 5.5.17 • Měření cost = 14: cca 1.77s. • Teoreticky cost = 31:
 1.77 * 2^31/2^14 = 1.77 * 2^17 = 1.77 * 131 072 = 231997 s = 64.44 h 9
  10. 10. NetteUtilsJson • Metody
 encode($value, $options = 0)
 decode($json, $options = 0) • Ošetření chyb: vyhazuje výjimky NetteUtilsJsonException. • Opravy chyb v různých verzích PHP:
 http://phpfashion.com/how-to-encode-and-decode-json-in-php 10
  11. 11. NetteUtilsFileSystem • Metody pro práci se souborovým systémem. • Ošetření chyb – výjimky NetteIOException a některé další. 11
  12. 12. NetteUtilsValidators • Validace datových typů i formátů – např. délka řetězce apod. • Umí validovat jednotlivé proměnné, prvky polí, … • Pěkná dokumentace: http://doc.nette.org/cs/2.2/validators 12
  13. 13. NetteHttpHelpers • ipMatch($ip, $mask) • Maska zadána ve tvaru CIDR:
 <prefix ip adresy>/<počet bitů shody> • Příklad: IP adresa 10.10.75.16 vyhovuje všem následujícím maskám:
 10.0.0.0/8
 10.10.0.0/16
 10.10.75.0/24
 10.10.75.16/32 13
  14. 14. Dotazy? 14
  15. 15. Děkuji za pozornost. 15

×