如何使用bcompiler和__FILE__魔术常量

时间:2010-07-27 07:54:51

标签: php encoder bcompiler

我正在尝试将PHP应用程序的一些位编译成字节码。代码使用了魔术常量__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 个答案:

答案 0 :(得分:1)

您遇到的问题是已修复的错误,请参阅http://pecl.php.net/bugs/bug.php?id=5693