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

Upload: frederic-hardy

Post on 21-Jun-2015

3.945 views

Category:

Technology


2 download

DESCRIPTION

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

TRANSCRIPT

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