1. Plein PHAR ! Packagez vos applications avec PHAR
http://medias.mageekbox.net/conferences/openWorldForum2011
frederic.hardy@mageekbox.net | http://blog.mageekbox.net | @mageekguy
vendredi 23 septembre 2011
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 2011
vendredi 23 septembre 2011
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 2011
vendredi 23 septembre 2011
4. Plan
⇢ Feux de position
⇢ Feux de croisement
⇢ Feux de route
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
5. Feux de position
⇢ Présentation
⇢ Historique
⇢ Installation
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
6. Présentation
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
7. Définition
⇢ PHAR = PHP Archive
⇢ PHAR ≃ JAR
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
8. Objectifs
⇢ Un fichier unique
⇢ pour la distribution
⇢ pour l'exécution
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
9. Fonctionnalités
⇢ Signature
⇢ Métadonnées
⇢ Compression
⇢ Exécutable ou non
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
10. Historique
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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 2011
vendredi 23 septembre 2011
12. Aujourd'hui
⇢ 2009
⇢ Extension intégrée à PHP 5.3
⇢ 2011
⇢ Silex
⇢ Photon
⇢ atoum
⇢ Behat
⇢ …
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
13. Installation
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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 2011
vendredi 23 septembre 2011
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 2011
vendredi 23 septembre 2011
16. Feux de croisement
⇢ Mode d'emploi
⇢ Structure
⇢ Compatibilité
⇢ Création
⇢ Utilisation
⇢ L'utilitaire phar
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
17. Mode d'emploi
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
18. Archive exécutable
⇢ lisible par PHP directement
⇢ en CLI
⇢ via HTTP
⇢ au sein d'un script
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
19. Archive non exécutable
⇢ Lisible uniquement au sein d'un script
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
20. Structure
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
21. Composition
⇢ Fichier de démarrage
⇢ Manifeste
⇢ Chemin d'accès
⇢ Permissions
⇢ Fichiers
⇢ Signature et métadonnées
⇢ Format interne PHAR | TAR | ZIP
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
22. Fichier de démarrage
⇢ Interprété lorsque l'archive est
⇢ exécutée par PHP
⇢ incluse dans un script
⇢ N'est pas interprété via phar://
⇢ Permet d'initialiser l'archive
⇢ auto-chargement de classes
⇢ configuration
⇢ …
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
23. Format PHAR
⇢ Format « naturel »
⇢ Uniquement exécutable
⇢ .phar
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
24. Format TAR
⇢ Exécutable ou non
⇢ Chemin des fichiers ≤ 255 caractères
⇢ (.phar)?.tar
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
25. Format ZIP
⇢ Exécutable ou non
⇢ Moins efficace que PHAR ou TAR
⇢ (.phar)?.zip
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
26. Compatibilité
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
27. PHP
⇢ PHAR, TAR, ZIP
⇢ Dépend du fichier de démarrage
⇢ Des extensions disponibles
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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 2011
vendredi 23 septembre 2011
29. Création
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
30. Classes
⇢ phar : archives exécutables
⇢ pharData : archives non exécutable
⇢ hérite de phar
⇢ pharFileInfo : fichier d'une archive
⇢ Exceptions
⇢ pharException
⇢ runtimeException
⇢ invalidArgumentException
⇢ unexpectedValueException
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
31. __DIR__ et __FILE__
⇢ Dans le fichier de démarrage
⇢ __DIR__ = répertoire de l'archive
⇢ __FILE__ = archive
⇢ En dehors
⇢ __DIR__ = répertoire du fichier
⇢ __FILE__ = fichier
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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 2011
vendredi 23 septembre 2011
33. Exemple
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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 2011
vendredi 23 septembre 2011
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 2011
vendredi 23 septembre 2011
36. Exemple
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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 2011
vendredi 23 septembre 2011
38. Méthodes dédiées
⇢ phar::mapPhar()|phar::webPhar()
⇢ performance|aliasing
⇢ phar::mungServer()
⇢ rend invisible l'archive
⇢ phar::interceptFileFunc()
⇢ chemins de fichiers relatifs re-routés
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
39. Exemple
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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 2011
vendredi 23 septembre 2011
41. Exemple
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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 2011
vendredi 23 septembre 2011
43. Exemple
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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 2011
vendredi 23 septembre 2011
45. Exemple
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
46. Utilisation
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
47. Utilisation dans un script
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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 2011
vendredi 23 septembre 2011
49. L'utilitaire 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 2011
vendredi 23 septembre 2011
50. Exemple d'utilisation
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
51. Feux de route
⇢ Métadonnées
⇢ Compression
⇢ Point de montage
⇢ Performances
⇢ Cas pratique
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
52. Métadonnées
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
53. Définition
⇢ Informations complémentaires
⇢ version, date, éditeur, documentation…
⇢ globales à l'archive
⇢ par fichier
⇢ Stockées indépendamment des donnés
⇢ chaîne, entier, flottant, tableau, objet
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
54. Exemple sur une archive
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
55. Exemple sur un fichier
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
56. Compression
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
57. Possibilités
⇢ PHAR | TAR
⇢ globale
⇢ PHAR | ZIP
⇢ par fichier
⇢ Algorithmes
⇢ gzip
⇢ bzip2
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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 2011
vendredi 23 septembre 2011
59. Compression globale
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
60. Compression locale
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
61. Décompression
⇢ Transparente lors de l'utilisation
⇢ Peut être demandée explicitement
⇢ phar::decompress()
⇢ phar::decompressFiles()
⇢ pharFileInfo::decompress()
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
62. Points de montage
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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 2011
vendredi 23 septembre 2011
64. Montage externe
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
65. Montage interne
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
66. Performances
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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 2011
vendredi 23 septembre 2011
68. Cas réel
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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 2011
vendredi 23 septembre 2011
70. Exemple en CLI
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
71. Exemple en PHP
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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 2011
vendredi 23 septembre 2011
73. Questions ?
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
74. Cette conférence est maintenant terminée, vous pouvez reprendre une activité normale !
frederic.hardy@mageekbox.net | http://blog.mageekbox.net | @mageekguy
vendredi 23 septembre 2011