PHP tips and tricks
  Skien, Norge, June 7th 2007
Agenda

  Tips and Tricks from PHP
     No need for anything else than standard distribution
     All for PHP 5
     ( but...
Who is speaking?

    Damien Séguy
       Nexen Services, eZ publish silver partner for hosting
       PHP / MySQL service...
Nod when you know about it
Random stuff


  rand() and mt_rand()
  array_rand() : extract info from an array
    extract keys!

  shuffle() : shuffle an a...
Random stuff

                                Array
 <?php                          (
 $a = range('a','d');               [...
Arrays combinaisons

       array_combine() : turn two arrays into one
         Inverse to array_keys() and array_values()...
Arrays combinaisons

         array_combine() : turn two arrays into one
         PDO::FETCH_KEY_PAIR :
         combine 2...
Arrays as SQL

        array_count_values() : makes easy stats
        Works like a GROUP BY and COUNT()

<?php
   $array ...
Arrays as SQL

                                        Array
                                        (
     array_multisor...
Fast dir scans



   scandir(‘/tmp’, true);
     Include name sorting

     Replace opendir, readdir, closedir and a loop!...
Fast dir scans

Array
(
    [0]   =>   sess_um8rgjj10f6qvuck91rf36srj7
    [1]   =>   sess_u58rgul68305uqfe48ic467276
    ...
URL operations


  parse_url()
    break down into details

    do not make any check

  parse_str()
    split a query str...
URL


<?php
$url = 'http://login:pass@www.site.com/
         path/file.php?a=2+&b%5B%5D=
         %E5%AF%B9%E4%BA%86%EF%BC...
URL

(
    [scheme] => http
    [host] => www.site.com
    [user] => login
    [pass] => pass
    [path] => /path/file.php...
URL validations


   scheme : list your own
   host : checkdnsrr() to check
   path : realpath() + doc root (beware of mod...
URL rebuilding

     http_build_query()
          rebuild your query

          takes into account encoding and arrays

  ...
URL testing

 <?php
    get_headers('http://localhost/logo.png');
 ?>

     Array
     (
         [0]   =>   HTTP/1.1 200 ...
PHP is dynamic

    Variables variables
    <?php
      $x = 'y';
      $y = 'z';
      $z = 'a';

      echo $x;  // disp...
Variable constants

      Still one definition
      Dynamic constant value
  <?php
    define (quot;CONSTANTquot;, 'eZ Con...
Juggling with variables

     Compact() and extract()
 <?php 
  $x = 'a'; $y = 'b'; 
  $z = compact('x','y');   
 // $z = ...
Variable functions

 <?php
  $func = 'foo'; $foo = 'bar';   $class = 'bb';

  $func($foo); // calling foo with bar
  call_...
Variable functions

 <?php
  $func = 'f';
  // a function
  // beware of langage construct such as empty()

  $func = arra...
Object magic


  __autoload() : load classes JIT
  __sleep() and __wakeup()
    Store object and ressources in sessions
  ...
Output buffering


   Avoid ‘already sent’ bug
   Clean it :   tidy
                              <?php
   Compress it : gz...
Caching

    auto_prepend :
      if ( filemtime($cache)+3600 < time()) {
          include($cachefile);     exit;
      }...
Connexion handling



  PHP maintains the connexion status
     0 Normal; 1 Aborted; 2 Timeout

  ignore_user_abort() to m...
Register for shutdown


     Function executed at script shutdown
     Correct closing of resources
     More convenient t...
Variables export

      var_export() : recreate PHP code for a variable

  <?php
                                         ...
Assertions


     Include tests during execution
     Assertion are an option (default is on) :
     Most clever way than ...
Assertions

<?php
assert_options(ASSERT_CALLBACK,'assert_callback');
function assert_callback($script,$line, $message){
  ...
Debugging



  get_memory_usage()
    memory_limit is now on by default

    Better memory handling

    The fake growth o...
Debugging


  get_included_files()
  get_defined_constants/functions/vars()
  get_declared_classes()
  get_debug_backtrace()...
Debugging

   array(2) {
   [0]=>
   array(4) {
       [quot;filequot;] => string(10) quot;/tmp/a.phpquot;
       [quot;li...
Slides

  http://www.nexen.net/english.php
  damien.seguy@nexen.net
  http://www.nexenservices.com/
Everyone
  loves
  PHP
Upcoming SlideShare
Loading in...5
×

PHP tips and tricks

17,549

Published on

With over 3400 available built-in function, PHP offers a tremendously rich environment. Yet, some of these functions are still unknown to most programmers. During this session, Damien Seguy will highlight a number of functions that are rarely used in PHP, but are nonetheless useful and available within standard distributions.

Published in: Technology
4 Comments
38 Likes
Statistics
Notes
  • always good........and helpful......................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • always good.........and helpful...............
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Well done, I liked the presentation!
    http://www.furniture101.net/
    http://www.furniture101.net/category/furniture-refinishing/
    http://www.furniture101.net/category/interior-design/
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • As a management instructor I appreciate viewing the work of others. This is among the best display on planning I've viewed.
    Sharika
    http://financeadded.com http://traveltreble.com
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
17,549
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
1,052
Comments
4
Likes
38
Embeds 0
No embeds

No notes for slide

PHP tips and tricks

  1. 1. PHP tips and tricks Skien, Norge, June 7th 2007
  2. 2. Agenda Tips and Tricks from PHP No need for anything else than standard distribution All for PHP 5 ( but lots of it is also valid in PHP 4 ) The month of PHP functions
  3. 3. Who is speaking? Damien Séguy Nexen Services, eZ publish silver partner for hosting PHP / MySQL services Redacteur en chef of www.nexen.net Phather of an plush Elephpant http://www.nexen.net/english.php
  4. 4. Nod when you know about it
  5. 5. Random stuff rand() and mt_rand() array_rand() : extract info from an array extract keys! shuffle() : shuffle an array before deal str_shuffle() : shuffle a string
  6. 6. Random stuff Array <?php ( $a = range('a','d'); [0] => c shuffle($a); [1] => d [2] => b print_r($a); [3] => a ) print_r(array_rand($a,3)); Array ( print str_shuffle('abcdef'); [0] => 0 // eabdcf [1] => 1 ?> [2] => 3 )
  7. 7. Arrays combinaisons array_combine() : turn two arrays into one Inverse to array_keys() and array_values() <?php $a = array('green', 'red', 'yellow'); $b = array('avocado', 'apple', 'banana'); $c = array_combine($a, $b); Array print_r($c); ( ?> [green] => avocado [red] => apple [yellow] => banana )
  8. 8. Arrays combinaisons array_combine() : turn two arrays into one PDO::FETCH_KEY_PAIR : combine 2 columns in a hash <?php $html = file_get_contents(quot;http://www.php.net/quot;); //'<a href=quot;http://php.netquot;>PHP</a>'; if (preg_match_all( '#<a href=quot;(http://[^quot;/?]+/).*?>(.*?)</a>#s', $html, $r)) {     $liste = array_combine($r[2], $r[1]); } print_r($liste); ?>
  9. 9. Arrays as SQL array_count_values() : makes easy stats Works like a GROUP BY and COUNT() <?php $array = array(1, quot;heiquot;, 1, quot;takkquot;, quot;heiquot;); print_r(array_count_values($array)); ?> Array ( sort r u [1] => 2 r u [hei] => 2 k k kr uk [takk] => 1 a a ar ua )
  10. 10. Arrays as SQL Array ( array_multisort() : sort several [0] => 2 arrays at once [1] => 3 [2] => 4 Works like a ORDER BY [3] => 5 <?php ) $ar1 = array(5,4,3,2); Array $ar2 = array('a','b','c','d'); ( array_multisort($ar1, $ar2); [0] => d array_multisort($ar1, [1] => c SORT_ASC,SORT_STRING, [2] => b $ar2); [3] => a ?> )
  11. 11. Fast dir scans scandir(‘/tmp’, true); Include name sorting Replace opendir, readdir, closedir and a loop! glob(‘*.html’); Simply move the loop out of sight
  12. 12. Fast dir scans Array ( [0] => sess_um8rgjj10f6qvuck91rf36srj7 [1] => sess_u58rgul68305uqfe48ic467276 [2] => mysql.sock <?php [3] => .. print_r(scandir('/tmp/', 1)); [4] => . print_r(glob('/tmp/sess_*')); ) ?> Array ( [0] => /tmp/sess_um8rgjj10f6qvuck91rf36srj7 [1] => /tmp/sess_u58rgul68305uqfe48ic467276 )
  13. 13. URL operations parse_url() break down into details do not make any check parse_str() split a query string separate and decode, as long as it can Fill up an array or globals
  14. 14. URL <?php $url = 'http://login:pass@www.site.com/ path/file.php?a=2+&b%5B%5D= %E5%AF%B9%E4%BA%86%EF%BC%81#ee'; $d = parse_url($url); print_r($d); parse_str($d[quot;queryquot;]); var_dump($GLOBALS[quot;bquot;]); ?>
  15. 15. URL ( [scheme] => http [host] => www.site.com [user] => login [pass] => pass [path] => /path/file.php [query] => a=2&b%5B%5D=%E5%AF%B9%E4%BA%86%EF%BC%81 [fragment] => ee ) array(1) { [0]=> string(9) quot; quot; }
  16. 16. URL validations scheme : list your own host : checkdnsrr() to check path : realpath() + doc root (beware of mod_rewrite) query : parse_str() beware of the second argument! don’t handle &amp;
  17. 17. URL rebuilding http_build_query() rebuild your query takes into account encoding and arrays <?php print http_build_query( array_merge($_GET , array(' de ' => ' '))); ?> +de+=%E5%AF%B9%E4%BA%86%EF%BC%81
  18. 18. URL testing <?php get_headers('http://localhost/logo.png'); ?> Array ( [0] => HTTP/1.1 200 OK [1] => Date: Mon, 12 Feb 2007 02:24:23 GMT [2] => Server: Apache/1.3.33 (Darwin) PHP/5.2.1 [3] => X-Powered-By: eZ publish [4] => Last-Modified: Fri, 30 Sep 2005 09:11:28 GMT [5] => ETag: quot;f6f2a-dbb-433d0140quot; [6] => Accept-Ranges: bytes [7] => Content-Length: 3515 [8] => Connection: close [9] => Content-Type: image/png )
  19. 19. PHP is dynamic Variables variables <?php $x = 'y'; $y = 'z'; $z = 'a'; echo $x;  // displays y echo $$x;  // displays z echo $$$x; // displays a ?>
  20. 20. Variable constants Still one definition Dynamic constant value <?php   define (quot;CONSTANTquot;, 'eZ Conference');   echo CONSTANT;   echo constant(quot;CONSTANTquot;);  ?> See the runkit to change constants...
  21. 21. Juggling with variables Compact() and extract() <?php   $x = 'a'; $y = 'b';   $z = compact('x','y');    // $z = array('x'=> 'a', 'y' => 'b');  $r = call_user_func_array('func', $z);  // calling func($x, $y);  extract($r);  // $x = 'c'; $y = 'd'; $t = 'e'; list($x, $y, $t) = array_values($r); ?>
  22. 22. Variable functions <?php  $func = 'foo'; $foo = 'bar'; $class = 'bb';  $func($foo); // calling foo with bar call_user_func($func, $foo);// same as above  call_user_func(array($class, $func), $foo);  // now with objects! $class->$func($foo); // same as above ?>
  23. 23. Variable functions <?php $func = 'f'; // a function // beware of langage construct such as empty() $func = array('c','m'); // a static call to class c $func = array($o,'m'); // a call to object o call_user_func($func, $foo); ?>
  24. 24. Object magic __autoload() : load classes JIT __sleep() and __wakeup() Store object and ressources in sessions __toString() : to turn an object to a string __toArray() : get_object_vars($object); __toInteger() : may be?
  25. 25. Output buffering Avoid ‘already sent’ bug Clean it : tidy <?php Compress it : gz ob_start(quot;ob_gzhandlerquot;); Cache it echo quot;Hellonquot;; setcookie(quot;cquot;, quot;vquot;); ob_end_flush(); ?>
  26. 26. Caching auto_prepend : if ( filemtime($cache)+3600 < time()) {     include($cachefile);     exit; } ob_start(); auto_append :   $content = ob_get_contents();    file_put_contents('cache', $contents);   ob_end_flush(); Auto-caching upon 404 error pages
  27. 27. Connexion handling PHP maintains the connexion status 0 Normal; 1 Aborted; 2 Timeout ignore_user_abort() to make a script without interruption connexion_status() to check status
  28. 28. Register for shutdown Function executed at script shutdown Correct closing of resources More convenient than ignore_user_abort() a library In OOP, better use __destruct() Storing calculated variables
  29. 29. Variables export var_export() : recreate PHP code for a variable <?php array ( 0 => 5, $array = array(5,4,3,2); 1 => 4, 2 => 3, file_put_contents('file.inc.php', 3 => 2, '<?php $x = '. ) var_export($array, true). '; ?>' ); ?>
  30. 30. Assertions Include tests during execution Assertion are an option (default is on) : Most clever way than removing than echo/var_dump Common practice in other languages Programmation by contract
  31. 31. Assertions <?php assert_options(ASSERT_CALLBACK,'assert_callback'); function assert_callback($script,$line, $message){    echo 'There is something strange  in your script <b>', $script,'</b> :  line <b>', $line,'</b> :<br />'; exit; } assert('is_integer( $x );' );   assert('($x >= 0) && ($x <= 10);  //* $x must be from 0 to 10' );   echo quot;0 <= $x <= 10quot;; ?>
  32. 32. Debugging get_memory_usage() memory_limit is now on by default Better memory handling The fake growth of memory needs get_peak_memory_usage()
  33. 33. Debugging get_included_files() get_defined_constants/functions/vars() get_declared_classes() get_debug_backtrace() function stack and their arguments file and line calling
  34. 34. Debugging array(2) { [0]=> array(4) { [quot;filequot;] => string(10) quot;/tmp/a.phpquot; [quot;linequot;] => int(10) [quot;functionquot;] => string(6) quot;a_testquot; [quot;argsquot;]=> array(1) { [0] => &string(6) quot;friendquot; } } [1]=> array(4) { [quot;filequot;] => string(10) quot;/tmp/b.phpquot; [quot;linequot;] => int(2) [quot;argsquot;] => array(1) { [0] => string(10) quot;/tmp/a.phpquot; } [quot;functionquot;] => string(12) quot;include_oncequot; } }
  35. 35. Slides http://www.nexen.net/english.php damien.seguy@nexen.net http://www.nexenservices.com/
  36. 36. Everyone loves PHP
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×