2009-10-16 4 views
2

J'ai créé ma première archive phar avec le code suivant:sorties d'archives Phar charabia

$phar = new Phar('myphar.phar'); 
$phar->addFile("index.php"); 
$phar->setStub($phar->createDefaultStub('index.php', 'index.php')); 

Le index.php mentionné ne une seule sortie:

echo "I am in a PHP archive!"; 

Quand je lance ci-dessus code, myphar.phar est créé et quand je cours dans le cli, la sortie est "Je suis dans une archive PHP!". Cependant, quand j'appelle le myphar.phar d'un webbrowser, il imprime des caractères étranges, comme ????�???�?, au lieu de mon contenu index.php et aucune erreur.

j'ai ajouté la ligne suivante à mon httpd.conf pour soutenir les archives phar:

AddType application/x-httpd-php .phar 

Quelqu'un sait pourquoi il fonctionne sur le cli, mais pas dans le navigateur?

+0

Bizarre. Je ne peux pas le reproduire, même si j'ai utilisé votre code et que j'ai probablement la même configuration (j'utilise PHP 5.3 et Phar 2.0.0-dev). Quelle version PHP et Phar utilisez-vous? Sont-ils à jour? –

+0

Ma version PHP est en effet 5.3.0 et j'ai la même version Phar. phpinfo() signale que phar est aussi un flux PHP enregistré. Je dois mentionner que j'utilise XAMPP sur Mac OS X 10.6 – Pascal

+0

Je voulais juste ajouter que cette erreur est définitivement dans la configuration d'Apache. – Evert

Répondre

0

Avez-vous essayé d'afficher la source de la page Web? Peut-être avez-vous oublié de redémarrer Apache après avoir modifié httpd.conf.

+0

Les caractères que j'ai décrits sont la seule chose retournée dans la source. J'ai redémarré Apache plusieurs fois. – Pascal

+0

Pouvez-vous offrir un lien de téléchargement pour le fichier '.phar'? Je veux l'essayer sur ma machine. –

+0

Le voici: http://bit.ly/12Xr9C Il est zippé, mais pas avec la compression phar. – Pascal

-1

Ma compréhension du fichier phar, vous êtes supposé ouvrir (fopen) le fichier dans votre script php qui va vous appellerez .... si vous obtenez ces personnages en arrière, cela signifie apache vous envoie la fichier au format binaire ....

Si vous ajoutez cette "application AddType/x-gzip .gz .tgz .phar" à la configuration apache, cela rendra le fichier téléchargeable comme n'importe quel autre fichier d'archive. pas l'exécuter comme un script php

+0

Je ne veux pas télécharger le fichier en tant que binaire, mais je veux afficher son contenu – Pascal

6

la réponse à ce problème réside dans la

detect_unicode 

paramètre dans votre php.ini.

Il existe actuellement un bogue dans PHP (http://bugs.php.net/bug.php?id=42396) qui fait que __halt_compiler() ne fonctionne pas correctement si detect_unicode est activé.

donc comme solution de contournement temporaire, définissez

detect_unicode = Off 

dans votre php.ini. Le prix que vous devez payer est l'impossibilité d'utiliser les caractères Unicode comme nom de variables, fonctions et classes (ils sont toujours bons dans les commentaires et les chaînes)

+0

Cela se produit également si vous exigez ('myphar.phar') 'dans un script exécuté à partir du serveur web XAMPP ou de l'exécutable PHP.Si vous ne voulez pas inverser le drapeau detect_unicode, l'autre solution consiste à utiliser 'require ('phar: //myphar.phar')'. –

Questions connexes