SlideShare una empresa de Scribd logo
1 de 74
Descargar para leer sin conexión
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
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
À 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
Plan

                                  ⇢ Feux de position
                                  ⇢ Feux de croisement
                                  ⇢ Feux de route




                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
Feux de position

                                          ⇢ Présentation
                                          ⇢ Historique
                                          ⇢ Installation




                              Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
Présentation



                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
Définition


                                ⇢ PHAR = PHP Archive
                                ⇢ PHAR ≃ JAR




                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
Objectifs

                               ⇢ Un fichier unique
                                     ⇢ pour la distribution
                                     ⇢ pour l'exécution




                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
Fonctionnalités

                                  ⇢ Signature
                                  ⇢ Métadonnées
                                  ⇢ Compression
                                  ⇢ Exécutable ou non




                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
Historique



                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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
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
Installation



                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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
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
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
Mode d'emploi



                              Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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
Archive non exécutable



                   ⇢ Lisible uniquement au sein d'un script




                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
Structure



                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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
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
Format PHAR

                             ⇢ Format « naturel »
                             ⇢ Uniquement exécutable
                             ⇢ .phar




                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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
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
Compatibilité



                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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
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
Création



                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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
__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
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
Exemple




                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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
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
Exemple




                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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
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
Exemple




                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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
Exemple




                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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
Exemple




                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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
Exemple




                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
Utilisation



                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
Utilisation dans un script




                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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
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
Exemple d'utilisation




                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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
Métadonnées



                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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
Exemple sur une archive




                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
Exemple sur un fichier




                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
Compression



                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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
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
Compression globale




                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
Compression locale




                               Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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
Points de montage


                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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
Montage externe




                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
Montage interne




                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
Performances



                              Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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
Cas réel



                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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
Exemple en CLI




                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
Exemple en PHP




                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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
Questions ?



                             Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
vendredi 23 septembre 2011
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

Más contenido relacionado

Más de Frederic Hardy

Anatomie du test
Anatomie du testAnatomie du test
Anatomie du test
Frederic Hardy
 
Traits : de la théorie à la pratique
Traits : de la théorie à la pratiqueTraits : de la théorie à la pratique
Traits : de la théorie à la pratique
Frederic Hardy
 

Más de Frederic Hardy (9)

TDD avec atoum
TDD avec atoumTDD avec atoum
TDD avec atoum
 
Anatomie du test
Anatomie du testAnatomie du test
Anatomie du test
 
Atoum
AtoumAtoum
Atoum
 
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
 
Plein phar !
Plein phar !Plein phar !
Plein phar !
 
Traits : de la théorie à la pratique
Traits : de la théorie à la pratiqueTraits : de la théorie à la pratique
Traits : de la théorie à la pratique
 
Plein phar
Plein pharPlein phar
Plein phar
 
PHP : retour vers le futur !
PHP : retour vers le futur !PHP : retour vers le futur !
PHP : retour vers le futur !
 
VIM puissance PHP = VI Improved !
VIM puissance PHP = VI Improved !VIM puissance PHP = VI Improved !
VIM puissance PHP = VI Improved !
 

Plein PHAR !

  • 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