RootsLabs

More than a tool ! GitHub Google+ LinkedIn RSS

Phing : Fournir une archive PHAR pour votre librairie

Progi1984 - Commentaires (0)

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

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

Commentaire :