Phing : Fournir une archive PHAR pour votre librairie
Comme nous l’avons vu dans cet article sur Phing, c’est un outil qui permet d’automatise de nombreuses tâches. Dans cet article, nous allons expliquer comment fournir une archive PHAR directement via Phing.
Phing : Modification du fichier build.xml
Tout d’abord, on modifie notre fichier build.xml lié à Phing pour lui ajouter la possibilité de générer une archive PHAR.
<?xml version="1.0"?> <projet... <!-- Variables --> <property name="author" value="..." /> <property name="email" value="user@domain.tld" /> <property name="version" value="0.x" /> <!-- Targets --> <target name="pack" depends="pack_phar" description="Pack the projet for differents outputs" /> <!-- Phar --> <target name="pack_phar"> <pharpackage basedir="." destfile="fichier.phar"> <fileset dir="src/"> <include name="*.php" /> </fileset> <metadata> <element name="version" value="${version}" /> <element name="authors"> <element name="${author}"> <element name="e-mail" value="${email}" /> </element> </element> </metadata> </pharpackage> </target> </project>
Après, il vous suffit de lancer en ligne de commande pour générer le fichier PHAR :
$ phing pack
Problèmes rencontrés
Evidemment, certains soucis peuvent arriver sur votre chemin.
Problème #1 : Erreur lors du build
[user@computer YATSPHP]$ phing pack Buildfile: /path/YATSPHP/build.xml YATSPHP > pack_phar: [pharpackage] Building package: /path/YATSPHP/yatsphp.phar Execution of target "pack_phar" failed for the following reason: /path/YATSPHP/build.xml:99:38: /path/YATSPHP/build.xml:99:38: Problem creating package: creating archive "/path/YATSPHP/yatsphp.phar" disabled by the php.ini setting phar.readonly [wrapped: creating archive "/path/YATSPHP/yatsphp.phar" disabled by the php.ini setting phar.readonly] BUILD FAILED /path/YATSPHP/build.xml:99:38: /path/YATSPHP/build.xml:99:38: Problem creating package: creating archive "/path/YATSPHP/yatsphp.phar" disabled by the php.ini setting phar.readonly [wrapped: creating archive "/path/YATSPHP/yatsphp.phar" disabled by the php.ini setting phar.readonly] Total time: 0.3204 seconds
Le problème, comme indiqué dans la sortie, est que l’option phar.readonly du fichier php.ini est désactivé.
Pour cela, il faut éditer le fichier php.ini et activer l’option en enlevant le ; devant phar.readonly puis en mettant l’option à Off.
[Phar] ; http://php.net/phar.readonly phar.readonly = Off
Problème #2 : Erreur lors de l’include
[user@computer dir]$ php sample01_phar.php PHP Warning: include(phar:///path/YATSPHP/YATSPHP.phar/index.php): failed to open stream: phar error: "index.php" is not a file in phar "/path/YATSPHP/YATSPHP.phar" in /path/YATSPHP/YATSPHP.phar on line 9 PHP Warning: include(): Failed opening 'phar:///path/YATSPHP/YATSPHP.phar/index.php' for inclusion (include_path='phar:///path/YATSPHP/YATSPHP.phar:.:/usr/share/pear:/usr/share/php') in /path/YATSPHP/YATSPHP.phar on line 9 PHP Fatal error: Class 'YATSPHP' not found in /path/YATSPHP/samples/sample01_phar.php on line 7
Pour cela, le problème a été plus complexe à corriger. En fait, PHP ne trouve pas le stub qui est en gros l’include principal appelé par défaut lorsque l’on appelle le fichier PHAR.
Il faut ajouter près de votre fichier build.xml un fichier phar_stub.php :
<?php Phar::mapPhar('filename.phar'); include('phar://filename.phar/src/votre_fichier.php'); __HALT_COMPILER(); ?>
Ensuite dans votre build.xml, il faut déclarer ce fichier comme stub lors de la création de l’archive PHAR :
<pharpackage basedir="." destfile="filename.phar" stub="phar_stub.php">
Ajouter un commentaire