2010-07-27 33 views
0

我试图将一些PHP应用程序编译成字节码。代码使用魔术常量__FILE__。如何使用bcompiler和__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'); 

运行test.php的的输出是/tmp/trousers而非/tmp/pants。我猜这是因为在将字节码写入输出文件之前,字节码编译阶段将魔术常量转换为它们各自的值,但是这严重限制了我将魔术常量用于任何有用的魔术常量的能力,如果它们始终与位置相关的输入文件。

是否有任何其他方式来检索当前源文件的名称?有没有其他技术可以减轻对__FILE__的需求,但仍然允许我引用相对于给定源文件的路径?

回答

1

您所看到的问题是,已经被修正了一个错误,请参阅http://pecl.php.net/bugs/bug.php?id=5693

+0

感谢抬起头。由于我无法在Ubuntu 10.04或10.10上使用最新的PECL测试版或最新的SVN在PHP中合理简单的一组PHP类,因此我已经完全放弃了bcompiler。它不断给我的方法找不到扩展其他类的类的错误。 – Shabbyrobe 2011-04-06 01:28:40