2010-07-27 17 views
0

J'essaie de compiler quelques bits d'une application PHP en bytecode. Le code utilise la constante magique __FILE__.Comment utiliser bcompiler et la constante magique __FILE__

infile.php:

<?php 
echo dirname(__FILE__); 

squish.php:

<?php 
$h = fopen('/tmp/pants/outfile.php', 'w'); 
bcompiler_write_header($h); 
bcompiler_write_file($h, '/tmp/trousers/infile.php'); 
bcompiler_write_footer($h); 
fclose($h); 

test.php:

<?php 
require('/tmp/pants/outfile.php'); 

La sortie du test.php est en cours d'exécution /tmp/trousers plutôt que /tmp/pants. Je suppose que c'est parce que la phase de compilation du bytecode traduit les constantes magiques à leurs valeurs respectives avant d'écrire le bytecode dans le fichier de sortie, cependant cela limite sérieusement ma capacité à utiliser les constantes magiques pour tout ce qui est utile. du fichier d'entrée.

Existe-t-il d'autres moyens de récupérer le nom du fichier source actuel? Y a-t-il d'autres techniques qui pourraient atténuer le besoin de __FILE__ mais qui me permettent quand même de faire référence à des chemins relatifs à un fichier source donné?

Répondre

1

Le problème que vous voyez est un bug qui a été corrigé déjà, voir http://pecl.php.net/bugs/bug.php?id=5693

+0

Merci pour le heads up. Depuis, j'ai bel et bien abandonné bcompiler car je n'arrivais pas à le faire fonctionner avec un ensemble raisonnablement simple de classes PHP sur Ubuntu 10.04 ou 10.10 avec la dernière beta de PECL ou la dernière SVN. Il a continué à me donner des erreurs de méthode non trouvées pour les classes qui ont étendu d'autres classes. – Shabbyrobe