Qu'est-ce que le format de fichier PHAR ?
Les fichiers .phar sont associés à l'environnement de développement PHP. Une archive .phar est l'équivalent PHP d'un fichier JAR - elle regroupe une application ou une bibliothèque PHP entière dans un seul paquet autonome et exécutable qui peut être distribué comme un fichier unique.
Quel type de données les fichiers PHAR peuvent-ils contenir ?
Les archives .phar stockent des scripts PHP et tous les composants de support (modèles, configurations, ressources), compressés facultativement avec gzip ou bzip2 par fichier ou pour l'ensemble de l'archive. Chaque fichier .phar contient un « stub » PHP exécutable, un manifeste binaire listant les fichiers inclus avec leurs métadonnées, et une signature cryptographique optionnelle (MD5, SHA-1, SHA-256, SHA-512 ou OpenSSL) vérifiée via phar.require_hash.
Comment puis-je exécuter des fichiers PHAR ?
Les fichiers .phar peuvent être exécutés directement avec l'interpréteur de ligne de commande PHP : php app.phar. Des exemples bien connus incluent composer.phar et phpunit.phar. La création ou la modification d'un programme Phar par programmation nécessite phar.readonly=0 dans le fichier php.ini, qui est réglé sur 1 (lecture seule) par défaut.
Problèmes de sécurité concernant les fichiers PHAR
Depuis PHP 5.3.0, le support de Phar est activé par défaut. L'exécution automatique de code PHAR dans un environnement PHP pose de graves risques pour la sécurité du système. Il existe des cas connus où du code PHP malveillant a été distribué dans des fichiers PHAR masqués en fichiers JPEG ou .txt par simple remplacement d'extension. L'ouverture d'un tel fichier peut entraîner l'infection du système par un logiciel malveillant. De plus, le déclenchement de wrappers de flux Phar (phar://) sur des chemins de fichiers contrôlés par un attaquant peut désérialiser des métadonnées intégrées et mener à une exécution de code à distance par injection d'objet.
Sécurité et sûreté
RISQUE : HIGHUn PHAR est du code PHP exécutable, traitez-le donc comme n'importe quel programme : n'exécutez que des Phars provenant de sources officielles de confiance (composer.phar depuis getcomposer.org, phpunit.phar depuis phpunit.de), et vérifiez la somme de contrôle ou la signature publiée lorsqu'elle est fournie. Au-delà de l'exécution, les Phars sont un vecteur d'attaque côté serveur notoire : le wrapper de flux phar:// peut désérialiser des métadonnées intégrées, permettant l'injection d'objets PHP / l'exécution de code à distance si une application transmet des chemins contrôlés par l'attaquant aux fonctions de fichiers. N'exécutez jamais un .phar non sollicité et, sur les serveurs, évitez d'injecter des entrées utilisateur dans des fonctions capables de résoudre des chemins phar://.
Détails du format
en brefProgrammes qui ouvrent les fichiers PHAR
php tool.phar (ou php tool.phar --help) pour l'exécuter. php tool.phar (ou php tool.phar --help) pour l'exécuter. php tool.phar (ou php tool.phar --help) pour l'exécuter. Détails techniques
spécifications approfondies| Point d'entrée (stub) | Stub PHP exécutable se terminant par le jeton `__HALT_COMPILER();`, qui marque le début du manifeste binaire |
| Signature magique de fin | Code magique de 4 octets GBMB dans le bloc de signature final (présent uniquement dans les Phars signés) |
| Compression | Aucune, Zlib (gzip), ou Bzip2 - configurable par fichier ou pour toute l'archive |
| Algorithmes de signature | MD5, SHA-1, SHA-256, SHA-512, ou OpenSSL X.509 (contrôlé par phar.require_hash dans php.ini) |
| Méthode d'exécution | Exécution directe avec `php app.phar` ; aucune extraction requise |
| Condition de création | `phar.readonly=0` doit être défini dans php.ini pour créer ou modifier des fichiers Phar au moment de l'exécution |
| Structure interne | Stub PHP + manifeste binaire (liste de fichiers, version API, drapeaux) + données de fichiers + bloc de signature optionnel |
| Ordre des octets | Little-endian |
| Taille typique | De quelques dizaines de Ko à plusieurs dizaines de Mo (ex: composer.phar ~2 Mo, phpunit.phar ~3 Mo) |
| Support version PHP | Inclus par défaut depuis PHP 5.3 (2009) ; maintenu jusqu'à PHP 8.x |
| Risque de sécurité | La désérialisation Phar via le wrapper de flux `phar://` sur des chemins contrôlés par un attaquant peut déclencher une RCE par injection d'objet |
| Structures de données supportées | Phar plat, Phar basé sur tar, ou Phar basé sur zip (PHP sélectionne le format à partir du manifeste) |
| Publié | 2008 (Phar extension bundled in PHP 5.3) |
| Dernière version | Maintained as a core PHP extension (current through PHP 8.x) |
| Standard ouvert | Oui · libre de droits |
| Spécification | www.php.net |
Conversions PHAR
Q&R de la communauté
posées par les utilisateursPas encore de questions - soyez le premier à poser une question sur les fichiers PHAR.
Foire aux questions
Comment exécuter un fichier PHAR ?
php tool.phar. Sur Linux/macOS, vous pouvez aussi faire chmod +x tool.phar && ./tool.phar s'il possède un shebang. Le double-clic ne fonctionnera généralement pas.Qu'est-ce qu'un fichier PHAR ?
Comment ouvrir un PHAR pour voir son contenu ?
Est-il sûr d'exécuter un fichier PHAR ?
Pourquoi mon PHAR ne s'exécute pas - erreur « phar.readonly » ?
Puis-je transformer un PHAR en EXE ?
php tool.phar, ou regroupez PHP avec le Phar en utilisant un empaqueteur dédié si vous avez réellement besoin d'un .exe autonome.