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 d'OpenSSL.
Pour tirer parti de la signature OpenSSL, il faut 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 relatifs 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 du serveur web, aprÚs avoir modifié le couple utilisateur/motdepasse :