Plein PHAR !

74
[email protected] | http://blog.mageekbox.net | @mageekguy Plein PHAR ! http://medias.mageekbox.net/conferences/openWorldForum2011 Packagez vos applications avec PHAR vendredi 23 septembre 2011

description

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

Transcript of Plein PHAR !

Page 1: Plein PHAR !

[email protected] | http://blog.mageekbox.net | @mageekguy

Plein PHAR !

http://medias.mageekbox.net/conferences/openWorldForum2011

Packagez vos applications avec PHAR

vendredi 23 septembre 2011

Page 2: Plein PHAR !

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

Page 3: Plein PHAR !

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

Page 4: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Plan

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

vendredi 23 septembre 2011

Page 5: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Feux de position

⇢ Présentation⇢ Historique⇢ Installation

vendredi 23 septembre 2011

Page 6: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Présentation

vendredi 23 septembre 2011

Page 7: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Définition

⇢ PHAR = PHP Archive⇢ PHAR ≃ JAR

vendredi 23 septembre 2011

Page 8: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Objectifs

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

vendredi 23 septembre 2011

Page 9: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Fonctionnalités

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

vendredi 23 septembre 2011

Page 10: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Historique

vendredi 23 septembre 2011

Page 11: Plein PHAR !

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

Page 12: Plein PHAR !

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

Page 13: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Installation

vendredi 23 septembre 2011

Page 14: Plein PHAR !

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

Page 15: Plein PHAR !

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

Page 16: Plein PHAR !

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

Page 17: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Mode d'emploi

vendredi 23 septembre 2011

Page 18: Plein PHAR !

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

Page 19: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Archive non exécutable

⇢ Lisible uniquement au sein d'un script

vendredi 23 septembre 2011

Page 20: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Structure

vendredi 23 septembre 2011

Page 21: Plein PHAR !

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

Page 22: Plein PHAR !

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

Page 23: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Format PHAR

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

vendredi 23 septembre 2011

Page 24: Plein PHAR !

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

Page 25: Plein PHAR !

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

Page 26: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Compatibilité

vendredi 23 septembre 2011

Page 27: Plein PHAR !

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

Page 28: Plein PHAR !

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

Page 29: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Création

vendredi 23 septembre 2011

Page 30: Plein PHAR !

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

Page 31: Plein PHAR !

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

Page 32: Plein PHAR !

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

Page 33: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Exemple

vendredi 23 septembre 2011

Page 34: Plein PHAR !

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

Page 35: Plein PHAR !

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

Page 36: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Exemple

vendredi 23 septembre 2011

Page 37: Plein PHAR !

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

Page 38: Plein PHAR !

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

Page 39: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Exemple

vendredi 23 septembre 2011

Page 40: Plein PHAR !

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

Page 41: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Exemple

vendredi 23 septembre 2011

Page 42: Plein PHAR !

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

Page 43: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Exemple

vendredi 23 septembre 2011

Page 44: Plein PHAR !

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

Page 45: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Exemple

vendredi 23 septembre 2011

Page 46: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Utilisation

vendredi 23 septembre 2011

Page 47: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Utilisation dans un script

vendredi 23 septembre 2011

Page 48: Plein PHAR !

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

Page 49: Plein PHAR !

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

Page 50: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Exemple d'utilisation

vendredi 23 septembre 2011

Page 51: Plein PHAR !

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

Page 52: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Métadonnées

vendredi 23 septembre 2011

Page 53: Plein PHAR !

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

Page 54: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Exemple sur une archive

vendredi 23 septembre 2011

Page 55: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Exemple sur un fichier

vendredi 23 septembre 2011

Page 56: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Compression

vendredi 23 septembre 2011

Page 57: Plein PHAR !

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

Page 58: Plein PHAR !

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

Page 59: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Compression globale

vendredi 23 septembre 2011

Page 60: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Compression locale

vendredi 23 septembre 2011

Page 61: Plein PHAR !

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

Page 62: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Points de montage

vendredi 23 septembre 2011

Page 63: Plein PHAR !

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

Page 64: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Montage externe

vendredi 23 septembre 2011

Page 65: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Montage interne

vendredi 23 septembre 2011

Page 66: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Performances

vendredi 23 septembre 2011

Page 67: Plein PHAR !

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

Page 68: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Cas réel

vendredi 23 septembre 2011

Page 69: Plein PHAR !

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

Page 70: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Exemple en CLI

vendredi 23 septembre 2011

Page 71: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Exemple en PHP

vendredi 23 septembre 2011

Page 72: Plein PHAR !

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

Page 73: Plein PHAR !

Plein PHAR ! | Open World Forum | Paris | 23 novembre 2011

Questions ?

vendredi 23 septembre 2011

Page 74: Plein PHAR !

[email protected] | http://blog.mageekbox.net | @mageekguy

Cette conférence est maintenant terminée, vous pouvez reprendre une activité normale !

vendredi 23 septembre 2011