Bienvenue!

AFUP : Conférence Supélec PHP




          Julien Pauli




          3 Mars 2009
L’AFUP

         Association Française des Utilisateurs de PHP

     Association 1901 but non lucratif
 ●


         Promo...
Les intervenants

                    Julien PAULI
    Architecte expert certifié PHP & ZF
  ●

  ● Membre AFUP

  ● Auteu...
Les entreprises

                               ANASKA

     Société de formation en logiciels libres
 ●


         Depuis...
Les entreprises

                                  ALTER-WAY

     Catalyseur de solutions open source
 ●



     Intégrat...
Logiciel libre


     Le logiciel libre est moins impacté par la crise
 ●



     Il est en constante évolution
 ●


     ...
PHP en dates

                                    1995

     Rasmus Lerdorf crée Personnal Homepage Tools
 ●


     pour m...
PHP en dates

                                   1998

     Un groupe déjà important travaille autour de ce
 ●


     lang...
PHP en dates

                             1998-2000
     Zeev Suraski et Andi Gutmans réécrivent tout le
 ●


     coeur ...
PHP en chiffre

                                   2004

     PHP 5
 ●


             Zend Engine 2 : réécriture complète
...
PHP et le futur

               PHP 5.3 (quelque part en 2009 ?)
      Namespaces
  ●



      Accès au garbage collector
...
PHP et le futur

                 PHP 6 (quelque part en 2078 ?)


      Tout le code est réécrit pour gérer Unicode
  ●

...
PHP en chiffre




                            13
AFUP Supélec Mars 2009
PHP en chiffre




                            14
AFUP Supélec Mars 2009
PHP en chiffre




                            15
AFUP Supélec Mars 2009
Ils l'utilisent

      Yahoo
  ●



      Le Monde
  ●



      SkyRock                Ce n'est pas parce que ce n'est
  ●...
Un langage modulaire

      PHP est adopté car il est modulaire
  ●


             Le Zend Engine possède les fonctionnali...
Un langage modulaire

      PHP est adopté car il existe une communauté
  ●


       extrêmement importante autour
      O...
Manières d'utiliser PHP

      CLI
  ●




                Pas mal d'administrateurs l'utilisent
            –

          ...
Manières d'utiliser PHP

      PHP peut s'utiliser avec un serveur Web en CGI ou
  ●


       Fast-CGI
             Interf...
Manières d'utiliser PHP

      Module de serveur
  ●


             Module de serveur écrit en C
         –

             ...
Le Web client serveur




                                   22
AFUP Supélec Mars 2009
Le Web client serveur




           Clients                 Serveur




                                             23
A...
Fonctionnement global

      PHP tourne en tant que module Apache
  ●


             Historiquement Apache est très utilis...
Le serveur

      PHP tourne donc (très majoritairement) sur un
  ●


       serveur Web
      La renommée de PHP vient du...
La plateforme

      PHP tourne sous beaucoup de plateformes
  ●


             GNU/Linux (le plus utilisé, le plus perfor...
Un langage proche du C

      PHP est le C du Web
  ●


              Sans la gestion de la mémoire
          –

         ...
Un langage très riche

      Le potentiel de PHP est vraiment inimaginable
  ●


              C'est ce qui en fait un lan...
Un langage très riche

      PHP peut interagir avec la plupart des SGBD
  ●


             MySQL
         –

            ...
Les autres langages

      PHP est massivement adopté car
  ●


             Sa syntaxe est proche du C
         –

      ...
Les autres langages

      PHP cohabite bien avec ses quot;concurrentsquot;
  ●


              Java
          –

        ...
PHP et les autres
             langages
      PHP est le seul langage qui a été conçu avec
  ●


       comme point de dép...
exemples

      PHP-GTK
  ●



  <?php
  class Php_Gtk_Twitter_Client extends GtkWindow {
       public function __constru...
exemples

      Indexation avec Java-Lucène (Zend Framework)
  ●



          <?php
          // Open existing index
     ...
exemples

          Tests unitaires (PHPUnit)
  ●



 class AscenseurTest extends PHPUnit_Framework_TestCase
 {
    public...
exemples

      Gestion de document Microsoft Office 2007
  ●



 <?php
 require_once('openxml.class.php');
 $documents = ...
exemples

      Interaction avec Google Maps
  ●




           <?php

          $api_url = ‘http://maps.google.com/maps/g...
exemples

      Filtrage de variables
  ●


        $args = array(
          'product_id' => FILTER_SANITIZE_ENCODED,
    ...
exemples

      Lecture d'un flux RSS
  ●



<?php
  try{
     if(!@$fluxrss=simplexml_load_file('http://www.lemonde.fr/rs...
exemples

      Enregistrement d'un service Windows
  ●




            <?php
            $ret = win32_create_service(arra...
exemples

      Lecture d'un fichier ogg Vorbis
  ●


 $fp = fopen('ogg://monaudio.ogg', 'r');

 /* Collecte quelques info...
exemples

      Dialogue avec un serveur Steam
  ●


      define('PACKET_SIZE', '1400');
      define('SERVERQUERY_INFO',...
exemples
      Filtrage en imagerie numérique
  ●


  $mx = array(array(-1,0,1),
           array(-2,0,2),
           arra...
Questions ?




     Questions
 ●




                         44
AFUP Supélec Mars 2009
Upcoming SlideShare
Loading in...5
×

AFUP & PHP @ Supelec

1,012

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,012
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

AFUP & PHP @ Supelec

  1. 1. Bienvenue! AFUP : Conférence Supélec PHP Julien Pauli 3 Mars 2009
  2. 2. L’AFUP Association Française des Utilisateurs de PHP Association 1901 but non lucratif ● Promouvoir PHP en France – ~250 membres ● Les activités : ● Rendez-vous – ApéroPHP – Forum PHP – 2 AFUP Supélec Mars 2009
  3. 3. Les intervenants Julien PAULI Architecte expert certifié PHP & ZF ● ● Membre AFUP ● Auteur (Eyrolles) ● Responsable pôle formation PHP chez Anaska Conférencier & Consultant ● ● Contributeur PHP ● Contributeur ZendFramework 3 AFUP Supélec Mars 2009
  4. 4. Les entreprises ANASKA Société de formation en logiciels libres ● Depuis 2002 – PHP très présent et très demandé ● 5 niveaux de formations – Certification – Les logiciels libres en pleine expansion ● 4 AFUP Supélec Mars 2009
  5. 5. Les entreprises ALTER-WAY Catalyseur de solutions open source ● Intégrateur logiciels libres ● Création 2006 – Hébergement ● Développement ● Formation ● Gestion de données ● Audit & conseil ● 5 AFUP Supélec Mars 2009
  6. 6. Logiciel libre Le logiciel libre est moins impacté par la crise ● Il est en constante évolution ● Contribuez – Le logiciel libre coûte moins cher que le ● propriétaire Il est plus souple à déployer – 6 AFUP Supélec Mars 2009
  7. 7. PHP en dates 1995 Rasmus Lerdorf crée Personnal Homepage Tools ● pour mettre à jour son CV en ligne La librairie ancêtre de PHP est toujours en ligne – http://museum.php.net/ ● 7 AFUP Supélec Mars 2009
  8. 8. PHP en dates 1998 Un groupe déjà important travaille autour de ce ● langage PHP 2 puis PHP 3 voient le jour – Déjà là : beaucoup de serveurs sont supportés – L'installation est très simple et légère – 8 AFUP Supélec Mars 2009
  9. 9. PHP en dates 1998-2000 Zeev Suraski et Andi Gutmans réécrivent tout le ● coeur du langage Gestion de la mémoire anticipée – Nombreuses macros C – Le quot;Zend Enginequot; est né – Zend = Zeev + Andi – Un angouement international ● La magie de l'open source fonctionne – Un langage modulaire ● 2000 : PHP4 ● 9 AFUP Supélec Mars 2009
  10. 10. PHP en chiffre 2004 PHP 5 ● Zend Engine 2 : réécriture complète – Modèle Objet abouti – Traitements XML simplifiés – SOAP et Web Services – Amélioration support MySQL – Des centaines de contributeurs au langage – 10 AFUP Supélec Mars 2009
  11. 11. PHP et le futur PHP 5.3 (quelque part en 2009 ?) Namespaces ● Accès au garbage collector ● Profiling Xslt ● Closures et fonctions anonymes ● Modèle objet amélioré et plus riche ● Opérateur quot;gotoquot; ● Meilleure gestion de l'I18n ● Phar (PHPArchive) ● 11 AFUP Supélec Mars 2009
  12. 12. PHP et le futur PHP 6 (quelque part en 2078 ?) Tout le code est réécrit pour gérer Unicode ● 12 AFUP Supélec Mars 2009
  13. 13. PHP en chiffre 13 AFUP Supélec Mars 2009
  14. 14. PHP en chiffre 14 AFUP Supélec Mars 2009
  15. 15. PHP en chiffre 15 AFUP Supélec Mars 2009
  16. 16. Ils l'utilisent Yahoo ● Le Monde ● SkyRock Ce n'est pas parce que ce n'est ● ● pas marqué .php à la fin du BNP Paribas ● fichier, que ce n'est pas PHP qui Facebook ● traite :-) Meetic ● Nokia ● TF1 ● Alapage ● 16 AFUP Supélec Mars 2009
  17. 17. Un langage modulaire PHP est adopté car il est modulaire ● Le Zend Engine possède les fonctionnalités de base – Que l'on active ou pas à la compilation ● Le Zend Engine possède des connecteurs pour lui ajouter – des fonctionnalités Et il existe un gros dépôt de modules (PECL) – Ecrits en C ● Open Source ● Branchés sur l'API du Zend Engine ● Rajoutent des fonctionnalités au langage ● Se chargent via des .so ou des .dll, très simplement ● 17 AFUP Supélec Mars 2009
  18. 18. Un langage modulaire PHP est adopté car il existe une communauté ● extrêmement importante autour On utilise PHP en entreprise certes mais … ● Beaucoup de projets écrits en PHP sont ouverts et libres – Des moteurs de recherches ● Des ORM (Mapping Objet Relationnels) ● Des frameworks ● Des outils de testabilité logiciel ● Des outils métiers (mathématiques) ● ... ● http://pear.php.net – http://www.phpclasses.org – 18 AFUP Supélec Mars 2009
  19. 19. Manières d'utiliser PHP CLI ● Pas mal d'administrateurs l'utilisent – Encore loin derrière Perl ou Python mais... ● Présent dans certaines box, certains décodeurs TV ● Syntaxe proche du C agréable pour les admins – 19 AFUP Supélec Mars 2009
  20. 20. Manières d'utiliser PHP PHP peut s'utiliser avec un serveur Web en CGI ou ● Fast-CGI Interface normalisé (Common Gateway Interface) – Ancêtre du Web Dynamique – Ancêtre de PHP, qui a la base était une toute petite ● bibliothèque chargée en CGI Problématique de performance – 20 AFUP Supélec Mars 2009
  21. 21. Manières d'utiliser PHP Module de serveur ● Module de serveur écrit en C – Très performant – L'utilisation majeure de PHP, 90% – 21 AFUP Supélec Mars 2009
  22. 22. Le Web client serveur 22 AFUP Supélec Mars 2009
  23. 23. Le Web client serveur Clients Serveur 23 AFUP Supélec Mars 2009
  24. 24. Fonctionnement global PHP tourne en tant que module Apache ● Historiquement Apache est très utilisé pour PHP – Apache reçoit une requête demandant du PHP – Il la passe à PHP qui est alors exécuté sur le serveur – Le résultat de cette exécution produit une sortie – En général en HTML ● Cette sortie est envoyée par Apache au client – Une page s'affiche – 24 AFUP Supélec Mars 2009
  25. 25. Le serveur PHP tourne donc (très majoritairement) sur un ● serveur Web La renommée de PHP vient du fait qu'il supporte ● énormément de serveurs Web PHP est présent partout ● Apache (historiquement le plus utilisé) – Caudium – Lighttpd – Iplanet / Netscape (Sun) – IIS – 25 AFUP Supélec Mars 2009
  26. 26. La plateforme PHP tourne sous beaucoup de plateformes ● GNU/Linux (le plus utilisé, le plus performant) – Unix (BSD Familly) – Mac OS – Windows – Solaris – HP-Ux – Même si ce n'est pas parfait, PHP abstrait ● beaucoup la couche OS sous laquelle il tourne PHP se comporte sensiblement de la même manière – quelque soit le système sur lequel il tourne De gros efforts sont sans arrêt fournis dans ce but ● 26 AFUP Supélec Mars 2009
  27. 27. Un langage proche du C PHP est le C du Web ● Sans la gestion de la mémoire – Sans typage fort – Sans tous les aspects quot;chiantsquot; du C – Un simple éditeur de texte suffit pour taper du PHP ● Un quot;simplequot; serveur Web suffit pour rendre une ● page totalement quot;dynamiquequot; 27 AFUP Supélec Mars 2009
  28. 28. Un langage très riche Le potentiel de PHP est vraiment inimaginable ● C'est ce qui en fait un langage pas si facile que ça après – tout PHP sait jouer avec XML ● PHP sait créer des processus (fork et signaux ● POSIX) PHP peut s'interfacer avec tout programme ● possédant des entrée/sortie PHP peut communiquer via des sockets quelque ● soit le protocole PHP peut ouvrir des fichiers et lancer des tâches ● externes 28 AFUP Supélec Mars 2009
  29. 29. Un langage très riche PHP peut interagir avec la plupart des SGBD ● MySQL – PostgreSQL – Ingres – SQLServer – IBM / DB2 – Oracle – 29 AFUP Supélec Mars 2009
  30. 30. Les autres langages PHP est massivement adopté car ● Sa syntaxe est proche du C – Sa syntaxe est très permissive – Langage de script ● On ne s'embête pas 20h avant d'avoir du concrêt ● On ne s'occupe pas de la mémoire ● On ne s'occupe pas du typage ● Il est très performant – Pour un langage de script ● Il est massivement supporté par les serveurs – PHP est présent partout car Apache est présent partout ● 30 AFUP Supélec Mars 2009
  31. 31. Les autres langages PHP cohabite bien avec ses quot;concurrentsquot; ● Java – Python – Ruby (On Rail?) – Perl – Tous ces langages sont plus difficiles à utiliser pour ● le néophyte Ce qui ne signifie pas que PHP n'est pas capable de se – comporter en quot;PROquot; Il suffit de le vouloir : il est capable ● PHP peut communiquer avec ces autres langages ● 31 AFUP Supélec Mars 2009
  32. 32. PHP et les autres langages PHP est le seul langage qui a été conçu avec ● comme point de départ le Web (1995) Il est issu de la fusion de bibliothèques Web anarchiques – à l'époque Il est un peu le pionnier du développement Web – PHP est tourné vers le Web ● Même s'il sait faire autre chose – PHP évolue avec le Web ● PHP évolue pour le Web ● Et cela ne changera jamais – 32 AFUP Supélec Mars 2009
  33. 33. exemples PHP-GTK ● <?php class Php_Gtk_Twitter_Client extends GtkWindow { public function __construct() { parent::__construct(); $this->set_icon($this->render_icon( Gtk::STOCK_ABOUT, Gtk::ICON_SIZE_DIALOG)); $this->set_size_request(300, 500); $this->set_title('PHP-GTK Twitter Client'); $this->connect_simple('destroy', array('Gtk', 'main_quit')); } } $window = new Php_Gtk_Twitter_Client; $window->show_all(); Gtk::main(); 33 AFUP Supélec Mars 2009
  34. 34. exemples Indexation avec Java-Lucène (Zend Framework) ● <?php // Open existing index $index = Zend_Search_Lucene::open('/data/my-index'); $doc = new Zend_Search_Lucene_Document(); // Store document URL to identify it in search result. $doc->addField(Zend_Search_Lucene_Field::Text('url', $docUrl)); // Index document content $doc->addField(Zend_Search_Lucene_Field::UnStored('contents', $docContent)); // Add document to the index. $index->addDocument($doc); HTML document: <?php $doc = Zend_Search_Lucene_Document_Html::loadHTMLFile($filename); $index->addDocument($doc); ?> 34 AFUP Supélec Mars 2009
  35. 35. exemples Tests unitaires (PHPUnit) ● class AscenseurTest extends PHPUnit_Framework_TestCase { public function testAscenseurMonteAvecDesPersonnes () { $p = $this->getMock('Personne',array('getEtage','setEtage'),array('julien2')); $p->expects($this->once())->method('getEtage')->will($this->returnValue(3)); $p->expects($this->once())->method('setEtage')->with($this->equalTo(8)); $this->ascenseur->charger($this->personne); $this->ascenseur->charger($p); $this->ascenseur->go(8); $this->assertEquals(8, $this->ascenseur->getPersonne($this->personne)->getEtage()); } } 35 AFUP Supélec Mars 2009
  36. 36. exemples Gestion de document Microsoft Office 2007 ● <?php require_once('openxml.class.php'); $documents = array('sample1.docx', 'sample1.xlsx'); foreach ($documents as $document) { echo quot;<b><u>$document</u></b><br/>quot;; try { $mydoc = OpenXMLDocumentFactory::openDocument($document); echo '<br/><i>Metadonnées :</i><br/><br/>'; echo 'Créateur: ' . $mydoc->getCreator() . '<br/>'; echo 'Sujet: ' . $mydoc->getSubject() . '<br/>'; echo 'Mots-clés: ' . $mydoc->getKeywords() . '<br/>'; echo 'Description: ' . $mydoc->getDescription() . '<br/>'; echo 'Date de création : ' . $mydoc->getCreationDate() . '</br>'; echo 'Date de dernière modification : ' . $mydoc->getLastModificationDate() . '<br/>'; echo 'Modifié en dernier par: ' . $mydoc->getLastWriter() . '<br/>'; echo 'Révision: ' . $mydoc->getRevision() . '<br/>'; }catch (OpenXMLFatalException $e) { echo $e->getMessage(); } 36 AFUP Supélec Mars 2009
  37. 37. exemples Interaction avec Google Maps ●   <?php $api_url = ‘http://maps.google.com/maps/geo’; $query = http_build_query(array( ‘q’ => ‘1313 W Mockingbird Lane, Dallas, TX 75247’ , ‘key’ => ‘abcdefg’ , ‘output’ => ‘xml’ , )); $request_url = $api_url. ’?’ .$query; $xml = simplexml_load_string(fle_get_contents($request_url)); $coords = explode(‘,’ , $xml->Response->Placemark->Point->coordinates); echo ‘Lat: ‘ .$coords[1]. ’ Long: ‘ .$coords[0]; 37 AFUP Supélec Mars 2009
  38. 38. exemples Filtrage de variables ● $args = array( 'product_id' => FILTER_SANITIZE_ENCODED, 'component' => array('filter' => FILTER_VALIDATE_INT, 'flags' => FILTER_REQUIRE_ARRAY, 'options' => array('min_range' => 1, 'max_range' => 10) ), 'versions' => FILTER_SANITIZE_ENCODED, 'doesnotexist' => FILTER_VALIDATE_INT, 'testscalar' => array( 'filter' => FILTER_VALIDATE_INT, 'flags' => FILTER_REQUIRE_SCALAR, ), 'testarray' => array( 'filter' => FILTER_VALIDATE_INT, 'flags' => FILTER_REQUIRE_ARRAY, ) ); $myinputs = filter_input_array(INPUT_POST, $args); var_dump($myinputs); echo quot;nquot;; 38 AFUP Supélec Mars 2009
  39. 39. exemples Lecture d'un flux RSS ● <?php try{ if(!@$fluxrss=simplexml_load_file('http://www.lemonde.fr/rss/sequence/0,2-651865,1-0,0.xml')){ throw new Exception('Flux introuvable'); } echo '<h3>'.(string)$fluxrss->channel->title.'</h3> <p>'.(string)$fluxrss->channel->description.'</p>'; echo '<ul>'; foreach($fluxrss->channel->item as $item){ echo '<li><a href=quot;'.(string)$item->link.'quot;>'.(string)$item->title.'</a> <i>publié le'. (string)date('d/m/Y à Ghi',strtotime($item->pubDate)).'</i></li>'; if(++$i>=$nb_affichage) break; } echo '</ul>'; } catch(Exception $e){ echo $e->getMessage(); } 39 AFUP Supélec Mars 2009
  40. 40. exemples Enregistrement d'un service Windows ● <?php $ret = win32_create_service(array( ‘service’ => ‘PHPSvc’, ‘display’ => ‘PHP Test Service’, ‘path’ => ‘C:PHPphp.exe’, ‘params’ => ‘C:WindowsSystem32PHPSvc.php run’)); if ($ret === true) { echo «PHPSvc a été enregistré comme service.n»; } else { echo «Echec de l’enregistrement de PHPSvc. Erreur : {$ret}n»; } ?> 40 AFUP Supélec Mars 2009
  41. 41. exemples Lecture d'un fichier ogg Vorbis ● $fp = fopen('ogg://monaudio.ogg', 'r'); /* Collecte quelques informations sur le fichier. */ $metadata = stream_get_meta_data($fp); /* Inspection de la première chanson (habituellement la seule chanson mais les fichiers OGG/Vorbis peuvent être chaînés) */ $songdata = $metadata['wrapper_data'][0]; echo quot;Fichier OGG/Vorbis encodé par : {$songdata['vendor']}n.quot;; echo quot; {$songdata['channels']} canaux de {$songdata['rate']}Hz encodé à {$songdata['bitrate_nominal']}bps.nquot;; foreach($songdata['comments'] as $comment) { echo quot; $commentnquot;; } while ($audio_data = fread($fp, 8192)) { /* Faire quelque chose avec l'audio PCM extrait depuis le OGG. Copier vers /dev/dsp est une bonne chose sur les systèmes linux, souvenez-vous juste de définir le périphérique pour votre mode d'échantillonage d'abord. */ } fclose($fp); 41 AFUP Supélec Mars 2009
  42. 42. exemples Dialogue avec un serveur Steam ● define('PACKET_SIZE', '1400'); define('SERVERQUERY_INFO', quot;xFFxFFxFFxFFTSource Engine Queryquot;); define ('REPLY_INFO', quot;x49quot;); // Ip address and port $_ip = '82.149.249.243'; $_port = '27017'; // Open connection with server $socket = stream_socket_client('udp://'.$_ip.':'.$_port, $errno, $errstr, 30); // Send command to server $cmd = SERVERQUERY_INFO; $length = strlen($cmd); fwrite($socket, $cmd, $length); // Get response from server $response = fread($socket, PACKET_SIZE); // Clean response $pattern = quot;#xFFxFFxFFxFFquot;.REPLY_INFO.quot;#quot;; $response = preg_replace($pattern, '', $response); 42 AFUP Supélec Mars 2009
  43. 43. exemples Filtrage en imagerie numérique ● $mx = array(array(-1,0,1), array(-2,0,2), array(-1,0,1) ); $my = array(array(1,2,1), array(0,0,0), array(-1,-2,-1) ); $m_elements = count($mx); $m_offset = floor($m_elements/2); $original = imagecreatefromjpeg(quot;woman.jpgquot;); $source = imagecreatetruecolor(imagesx($original)+($m_offset*2),imagesy($original)+ ($m_offset*2)); $red = imagecolorallocate($source,255,0,0); imagecopy($source, $original, $m_offset, $m_offset, 0, 0, imagesx($original),imagesy($original)); imagecopyresampled($source, $original, 0, 0, 0, 0, imagesx($original)+($m_offset*2), $m_offset, imagesx($original), $m_offset); imagecopyresampled($source, $original, 0, imagesy($original)+$m_offset, 0, imagesy($original)- $m_offset, imagesx($original)+($m_offset*2), $m_offset, imagesx($original), $m_offset); imagecopy($source, $original, 0, $m_offset, 0, 0, $m_offset, imagesy($original)); imagecopy($source, $original, imagesx($original)+$m_offset, $m_offset, imagesx($original)- $m_offset, 0, $m_offset, imagesy($original)); 43 AFUP Supélec Mars 2009
  44. 44. Questions ? Questions ● 44 AFUP Supélec Mars 2009

×