Plein PHAR !

4,200 views

Published on

Support de ma conférence "Plein PHAR !" donnée le 23 septembre 2011 lors de l'Open World Forum.

Published in: Technology
1 Comment
3 Likes
Statistics
Notes
  • Merci ! Thanking you !
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
4,200
On SlideShare
0
From Embeds
0
Number of Embeds
2,897
Actions
Shares
0
Downloads
12
Comments
1
Likes
3
Embeds 0
No embeds

No notes for slide

Plein PHAR !

  1. 1. Plein PHAR ! Packagez vos applications avec PHAR http://medias.mageekbox.net/conferences/openWorldForum2011 frederic.hardy@mageekbox.net | http://blog.mageekbox.net | @mageekguyvendredi 23 septembre 2011
  2. 2. Préambule http://medias.mageekbox.net/conferences/openWorldForum2011 ⇢ suhosin.executor.include.whitelist="phar" ⇢ php openWorldForum.src.phar -e Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  3. 3. À propos ⇢ Développeur PHP depuis 12 ans ⇢ Agiliste ⇢ Architecte logiciel ⇢ Contributeur à divers projet open-source ⇢ atoum ⇢ PHP, VIM, FreeBSD Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  4. 4. Plan ⇢ Feux de position ⇢ Feux de croisement ⇢ Feux de route Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  5. 5. Feux de position ⇢ Présentation ⇢ Historique ⇢ Installation Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  6. 6. Présentation Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  7. 7. Définition ⇢ PHAR = PHP Archive ⇢ PHAR ≃ JAR Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  8. 8. Objectifs ⇢ Un fichier unique ⇢ pour la distribution ⇢ pour lexécution Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  9. 9. Fonctionnalités ⇢ Signature ⇢ Métadonnées ⇢ Compression ⇢ Exécutable ou non Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  10. 10. Historique Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  11. 11. Origine ⇢ 2007 : Extension PECL ⇢ Steph Fox (php|architect) ⇢ Greg Beaver (PEAR/PECL) ⇢ Marcus Börger (PHP 5) Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  12. 12. Aujourdhui ⇢ 2009 ⇢ Extension intégrée à PHP 5.3 ⇢ 2011 ⇢ Silex ⇢ Photon ⇢ atoum ⇢ Behat ⇢ … Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  13. 13. Installation Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  14. 14. Configuration minimum ⇢ PHP ≥ 5.2 ⇢ Standard PHP Library ⇢ Compression ⇢ extensions zlib|bzip2 ⇢ Signature sécurisée ⇢ extension openssl Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  15. 15. Compilation et configuration ⇢ Lors du ./configure ⇢ Ne pas utiliser --disable-phar ⇢ Ne pas utiliser --zend-enable-multibyte ⇢ Directives de configuration ⇢ phar.readonly ⇢ phar.require_hash ⇢ phar.cache_list Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  16. 16. Feux de croisement ⇢ Mode demploi ⇢ Structure ⇢ Compatibilité ⇢ Création ⇢ Utilisation ⇢ Lutilitaire phar Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  17. 17. Mode demploi Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  18. 18. Archive exécutable ⇢ lisible par PHP directement ⇢ en CLI ⇢ via HTTP ⇢ au sein dun script Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  19. 19. Archive non exécutable ⇢ Lisible uniquement au sein dun script Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  20. 20. Structure Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  21. 21. Composition ⇢ Fichier de démarrage ⇢ Manifeste ⇢ Chemin daccès ⇢ Permissions ⇢ Fichiers ⇢ Signature et métadonnées ⇢ Format interne PHAR | TAR | ZIP Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  22. 22. Fichier de démarrage ⇢ Interprété lorsque larchive est ⇢ exécutée par PHP ⇢ incluse dans un script ⇢ Nest pas interprété via phar:// ⇢ Permet dinitialiser larchive ⇢ auto-chargement de classes ⇢ configuration ⇢ … Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  23. 23. Format PHAR ⇢ Format « naturel » ⇢ Uniquement exécutable ⇢ .phar Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  24. 24. Format TAR ⇢ Exécutable ou non ⇢ Chemin des fichiers ≤ 255 caractères ⇢ (.phar)?.tar Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  25. 25. Format ZIP ⇢ Exécutable ou non ⇢ Moins efficace que PHAR ou TAR ⇢ (.phar)?.zip Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  26. 26. Compatibilité Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  27. 27. PHP ⇢ PHAR, TAR, ZIP ⇢ Dépend du fichier de démarrage ⇢ Des extensions disponibles Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  28. 28. Reste du monde ⇢ Archives au format ⇢ PHAR ⇢ illisible ⇢ ZIP ⇢ lisibles et modifiables ⇢ TAR ⇢ lisibles et modifiables Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  29. 29. Création Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  30. 30. Classes ⇢ phar : archives exécutables ⇢ pharData : archives non exécutable ⇢ hérite de phar ⇢ pharFileInfo : fichier dune archive ⇢ Exceptions ⇢ pharException ⇢ runtimeException ⇢ invalidArgumentException ⇢ unexpectedValueException Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  31. 31. __DIR__ et __FILE__ ⇢ Dans le fichier de démarrage ⇢ __DIR__ = répertoire de larchive ⇢ __FILE__ = archive ⇢ En dehors ⇢ __DIR__ = répertoire du fichier ⇢ __FILE__ = fichier Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  32. 32. Sécurité ⇢ Archive exécutable ⇢ .phar(.tar|.zip)? ⇢ Création impossible par défaut ⇢ phar.readonly=1 ⇢ Solution ? ⇢ -d phar.readonly=0 en CLI ⇢ phar.readonly=0 + ini_set() Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  33. 33. Exemple Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  34. 34. Fichier de démarrage par défaut ⇢ TAR|ZIP ⇢ Ne fait rien ⇢ PHAR ⇢ CLI|HTTP ⇢ Support de PHAR non obligatoire ⇢ index.php obligatoire par défaut Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  35. 35. Modifier le comportement par défaut ⇢ Utiliser un fichier différent ⇢ de index.php ? ⇢ pour la CLI ? ⇢ via HTTP ? ⇢ phar::setDefaultStub() Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  36. 36. Exemple Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  37. 37. Fichier de démarrage « home made »    ⇢ Doit ⇢ contenir du code valide ⇢ se terminer par __HALT_COMPILER () ⇢ ?> non obligatoire ⇢ ;S*?> Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  38. 38. Méthodes dédiées ⇢ phar::mapPhar()|phar::webPhar() ⇢ performance|aliasing ⇢ phar::mungServer() ⇢ rend invisible larchive ⇢ phar::interceptFileFunc() ⇢ chemins de fichiers relatifs re-routés Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  39. 39. Exemple Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  40. 40. Ajouter des fichiers ⇢ interface arrayAccess ⇢ Phar::addFile() ⇢ Phar::addFromString() ⇢ Phar::addEmptyDir() ⇢ Phar::buildFromDirectory() ⇢ Phar::buildFromIterator() ⇢ SplFileInfo Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  41. 41. Exemple Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  42. 42. Manipuler des fichiers ⇢ Modification ⇢ Mêmes outils que pour la création ⇢ Suppression ⇢ interface arrayAccess ⇢ phar::delete() Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  43. 43. Exemple Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  44. 44. Signature ⇢ Intégrité ⇢ MD5 ⇢ SHA-1 (défault), SHA-256, SHA-512 ⇢ Intégrité + sécurité ⇢ OpenSSL Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  45. 45. Exemple Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  46. 46. Utilisation Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  47. 47. Utilisation dans un script Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  48. 48. Extraire des fichiers ⇢ Phar::extractTo() ⇢ tous les fichiers ⇢ un fichier spécifique ⇢ mais pas les répertoires Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  49. 49. Lutilitaire phar ⇢ Livré en standard depuis PHP 5.3 ⇢ script PHP ⇢ permet de manipuler une archive ⇢ phar help Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  50. 50. Exemple dutilisation Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  51. 51. Feux de route ⇢ Métadonnées ⇢ Compression ⇢ Point de montage ⇢ Performances ⇢ Cas pratique Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  52. 52. Métadonnées Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  53. 53. Définition ⇢ Informations complémentaires ⇢ version, date, éditeur, documentation… ⇢ globales à larchive ⇢ par fichier ⇢ Stockées indépendamment des donnés ⇢ chaîne, entier, flottant, tableau, objet Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  54. 54. Exemple sur une archive Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  55. 55. Exemple sur un fichier Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  56. 56. Compression Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  57. 57. Possibilités ⇢ PHAR | TAR ⇢ globale ⇢ PHAR | ZIP ⇢ par fichier ⇢ Algorithmes ⇢ gzip ⇢ bzip2 Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  58. 58. Règles de nommage PHAR TAR ZIP phar::NONE .phar (.phar)?.tar (.phar)?.zip phar::GZ .phar.gz (.phar)?.tar.gz (.phar)?.zip phar::BZ2 .phar.bz2 (.phar)?.tar.bz2 (.phar)?.zip Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  59. 59. Compression globale Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  60. 60. Compression locale Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  61. 61. Décompression ⇢ Transparente lors de lutilisation ⇢ Peut être demandée explicitement ⇢ phar::decompress() ⇢ phar::decompressFiles() ⇢ pharFileInfo::decompress() Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  62. 62. Points de montage Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  63. 63. Utilité ⇢ Pouvoir accéder à des fichiers externes ⇢ journaux dévénements ⇢ fichier de configuration ⇢ … ⇢ Externe ou interne Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  64. 64. Montage externe Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  65. 65. Montage interne Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  66. 66. Performances Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  67. 67. Impact ⇢ Sans compression ⇢ Perte légère de performance ⇢ Avec compression ⇢ 10 à 15% de perte ⇢ phar.cache_list ⇢ APC ⇢ gain significatif ! Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  68. 68. Cas réel Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  69. 69. atoum ⇢ Framework de tests unitaires ⇢ simple, moderne et intuitif ⇢ http://github.com/mageekguy/atoum ⇢ http://downloads.atoum.org/nightly Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  70. 70. Exemple en CLI Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  71. 71. Exemple en PHP Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  72. 72. Références ⇢ http://php.net/phar ⇢ http://blog.pascal-martin.fr/post/php-5.3-phar-php-archive ⇢ http://blog.mageekbox.net Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  73. 73. Questions ? Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011vendredi 23 septembre 2011
  74. 74. Cette conférence est maintenant terminée, vous pouvez reprendre une activité normale ! frederic.hardy@mageekbox.net | http://blog.mageekbox.net | @mageekguyvendredi 23 septembre 2011

×