plein phar !
DESCRIPTION
Support de ma conférence "Plein PHAR !" donnée le 23 septembre 2011 lors de l'Open World Forum.TRANSCRIPT
[email protected] | http://blog.mageekbox.net | @mageekguy
Plein PHAR !
http://medias.mageekbox.net/conferences/openWorldForum2011
Packagez vos applications avec PHAR
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Préambule
⇢ suhosin.executor.include.whitelist="phar"
⇢ php openWorldForum.src.phar -e
http://medias.mageekbox.net/conferences/openWorldForum2011
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
À propos
⇢ Développeur PHP depuis 12 ans⇢ Agiliste⇢ Architecte logiciel⇢ Contributeur à divers projet open-source⇢ atoum⇢ PHP, VIM, FreeBSD
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Plan
⇢ Feux de position⇢ Feux de croisement⇢ Feux de route
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Feux de position
⇢ Présentation⇢ Historique⇢ Installation
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Présentation
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Définition
⇢ PHAR = PHP Archive⇢ PHAR ≃ JAR
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Objectifs
⇢ Un fichier unique⇢ pour la distribution⇢ pour l'exécution
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Fonctionnalités
⇢ Signature⇢ Métadonnées⇢ Compression⇢ Exécutable ou non
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Historique
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Origine
⇢ 2007 : Extension PECL⇢ Steph Fox (php|architect)⇢ Greg Beaver (PEAR/PECL)⇢ Marcus Börger (PHP 5)
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Aujourd'hui⇢ 2009
⇢ Extension intégrée à PHP 5.3⇢ 2011
⇢ Silex⇢ Photon⇢ atoum⇢ Behat⇢ …
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Installation
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Configuration minimum
⇢ PHP ≥ 5.2⇢ Standard PHP Library⇢ Compression⇢ extensions zlib|bzip2
⇢ Signature sécurisée⇢ extension openssl
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 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
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Feux de croisement⇢ Mode d'emploi⇢ Structure⇢ Compatibilité⇢ Création⇢ Utilisation⇢ L'utilitaire phar
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Mode d'emploi
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Archive exécutable
⇢ lisible par PHP directement⇢ en CLI⇢ via HTTP⇢ au sein d'un script
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Archive non exécutable
⇢ Lisible uniquement au sein d'un script
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Structure
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Composition⇢ Fichier de démarrage⇢ Manifeste⇢ Chemin d'accès⇢ Permissions
⇢ Fichiers⇢ Signature et métadonnées⇢ Format interne PHAR | TAR | ZIP
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 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⇢ …
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Format PHAR
⇢ Format « naturel »⇢ Uniquement exécutable⇢ .phar
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Format TAR
⇢ Exécutable ou non⇢ Chemin des fichiers ≤ 255 caractères⇢ (.phar)?.tar
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Format ZIP
⇢ Exécutable ou non⇢ Moins efficace que PHAR ou TAR⇢ (.phar)?.zip
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Compatibilité
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
PHP
⇢ PHAR, TAR, ZIP⇢ Dépend du fichier de démarrage⇢ Des extensions disponibles
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Reste du monde⇢ Archives au format⇢ PHAR⇢ illisible
⇢ ZIP⇢ lisibles et modifiables
⇢ TAR⇢ lisibles et modifiables
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Création
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 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
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 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
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 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()
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Exemple
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 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
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Modifier le comportement par défaut
⇢ Utiliser un fichier différent⇢ de index.php ?⇢ pour la CLI ?⇢ via HTTP ?⇢ \phar::setDefaultStub()
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Exemple
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Fichier de démarrage « home made »
⇢ Doit⇢ contenir du code valide⇢ se terminer par __HALT_COMPILER
()
⇢ ?> non obligatoire⇢ ;\S*?>
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 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
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Exemple
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Ajouter des fichiers
⇢ interface \arrayAccess⇢ \Phar::addFile()⇢ \Phar::addFromString()⇢ \Phar::addEmptyDir()⇢ \Phar::buildFromDirectory()⇢ \Phar::buildFromIterator()⇢ \SplFileInfo
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Exemple
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Manipuler des fichiers
⇢ Modification⇢ Mêmes outils que pour la création
⇢ Suppression⇢ interface \arrayAccess⇢ \phar::delete()
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Exemple
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Signature
⇢ Intégrité⇢ MD5⇢ SHA-1 (défault), SHA-256, SHA-512
⇢ Intégrité + sécurité⇢ OpenSSL
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Exemple
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Utilisation
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Utilisation dans un script
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Extraire des fichiers⇢ \Phar::extractTo()
⇢ tous les fichiers⇢ un fichier spécifique⇢ mais pas les répertoires
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
L'utilitaire phar
⇢ Livré en standard depuis PHP 5.3⇢ script PHP⇢ permet de manipuler une archive⇢ phar help
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Exemple d'utilisation
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Feux de route⇢ Métadonnées⇢ Compression⇢ Point de montage⇢ Performances⇢ Cas pratique
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Métadonnées
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 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
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Exemple sur une archive
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Exemple sur un fichier
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Compression
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Possibilités⇢ PHAR | TAR⇢ globale
⇢ PHAR | ZIP⇢ par fichier
⇢ Algorithmes⇢ gzip⇢ bzip2
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 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
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Compression globale
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Compression locale
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Décompression
⇢ Transparente lors de l'utilisation⇢ Peut être demandée explicitement⇢ \phar::decompress()⇢ \phar::decompressFiles()⇢ \pharFileInfo::decompress()
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Points de montage
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Utilité
⇢ Pouvoir accéder à des fichiers externes⇢ journaux d'événements⇢ fichier de configuration⇢ …
⇢ Externe ou interne
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Montage externe
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Montage interne
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Performances
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Impact⇢ Sans compression⇢ Perte légère de performance
⇢ Avec compression⇢ 10 à 15% de perte⇢ phar.cache_list
⇢ APC⇢ gain significatif !
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Cas réel
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
atoum
⇢ Framework de tests unitaires⇢ simple, moderne et intuitif
⇢ http://github.com/mageekguy/atoum⇢ http://downloads.atoum.org/nightly
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Exemple en CLI
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Exemple en PHP
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Références
⇢ http://php.net/phar
⇢ http://blog.pascal-martin.fr/post/php-5.3-phar-php-archive
⇢ http://blog.mageekbox.net
vendredi 23 septembre 2011
Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011
Questions ?
vendredi 23 septembre 2011
[email protected] | http://blog.mageekbox.net | @mageekguy
Cette conférence est maintenant terminée, vous pouvez reprendre une activité normale !
vendredi 23 septembre 2011