Utiliser les archives Phar : Introduction
Les archives Phar sont identiques dans le concept aux archives JAR
de Java, mais sont conçues plus spécifiquement pour les besoins et
la flexibilité des applications PHP. Une archive Phar est utilisée
pour distribuer une application PHP complète ou une bibliothèque
sous forme d'un fichier unique.
Une application sous forme d'archive Phar est utilisée exactement de
la même façon que n'importe quelle autre application PHP :
php applicationsympa.phar
L'utilisation d'une bibliothèque sous forme d'archive Phar est la
même que n'importe quelle autre bibliothèque PHP :
Le flux phar
fournit le cœur de l'extension phar, et
est décrit en détails ici.
Le flux phar permet l'accès aux fichiers contenus dans une archive phar via les
fonctions standards de fichier fopen(), opendir(), et
toute autre fonctionnant sur des fichiers normaux. Le flux phar
supporte toutes
les opérations de lecture/écriture à la fois sur les fichiers et sur les répertoires.
La classe Phar implémente des fonctionnalités
avancées pour accéder aux fichiers et créer des archives phar. La
classe Phar est décrite en détails ici.
D'autre part, la vérification du contenu du fichier phar peut être faite en utilisant un des
algorithme de signature symétrique (MD5, SHA1, SHA256 et SHA512 si ext/hash est activée) et
en utilisant la signature asymétrique par clé publique/privée de OpenSSL.
Pour tirer parti de la signature OpenSSL, vous devez générer une paire de clés publique/privée et
utiliser la clé privée pour signer avec Phar::setSignatureAlgorithm(). En plus, la
clé publique, extraite en utilisant ce code :
<?php
$public = openssl_get_publickey(file_get_contents('private.pem'));
$pkey = '';
openssl_pkey_export($public, $pkey);
?>
doit être sauvegardée à part de l'archive phar qu'elle vérifie. Si l'archive phar est sauvegardée
en tant que
/chemin/vers/mon.phar
, la clé publique doit être sauvegardée en tant
que
/chemin/vers/mon.phar.pubkey
, sans quoi phar ne sera pas capable de vérifier
la signature OpenSSL.
La classe Phar fournit aussi trois méthodes statiques, Phar::webPhar(),
Phar::mungServer() et Phar::interceptFileFuncs() qui sont cruciales
pour empaqueter des applications PHP visant à être utilisée sur un système de fichiers classique ou en tant qu'application web.
Phar::webPhar() implémente un contrôleur qui route les appels HTTP vers le bon endroit de l'archive phar.
Phar::mungServer() est utilisé pour modifier les valeurs du tableau $_SERVER pour
dire aux applications d'utiliser ces valeurs. Phar::interceptFileFuncs() dit à Phar d'intercepter les appels à
fopen(), file_get_contents(), opendir(), et
à toutes les fonctions basées sur stat (file_exists(), is_readable(), etc) et
route tous les chemins relatif vers les bons endroits de l'archive phar.
Par exemple, empaqueter une version de la célèbre application phpMyAdmin dans une archive phar nécessite
juste ce simple script et, dès lors, phpMyAdmin.phar.tar.php
peut être accédé comme un fichier
classique à partir de votre serveur web, après avoir modifié le couple utilisateur/motdepasse :