用bcompiler编译的php代码不能正常工作

时间:2010-06-28 12:19:41

标签: php encoder bcompiler

我没有做大量的php工作,我之前从未使用过bcompiler,但我正在将一个php网站迁移到一个新的服务器而且我无法正常工作。

似乎有一个用bcompiler编译的类'class.viewimage.php' - 它包含bz压缩代码'BZh91AY& SY; iu ...'

然后有一个正在调用此类的常规php文件:

require('class.viewimage.php');
$my_image = NEW ViewImage ($MEDIALIB->Filestore);

当运行此代码时,它只是将已编译类的文本内容吐出到浏览器中('BZh91AY& SY; iu ...')。这是引起这种情况的需求线。在我看来,像php一样神奇地知道这是编译代码。

据我所知,我已经在系统上安装了Bcompiler,因为这段代码不再崩溃(当我第一次迁移时崩溃了):

if (!extension_loaded('bcompiler')) {
    $prefix = (PHP_SHLIB_SUFFIX === 'dll') ? 'php_' : '';
    dl($prefix . 'bcompiler.' . PHP_SHLIB_SUFFIX);
}

任何帮助表示感谢。

3 个答案:

答案 0 :(得分:2)

虽然我在使用PHP bcompiler时遇到了麻烦,但是在安装了bcompiler模块的计算机上使用include()require()访问已编译的代码(使用bcompiler_write_file()编译)应该工作。

http://us2.php.net/manual/en/function.bcompiler-read.php

  

注意:

     

请使用include或require   这是解析字节码的语句   比便携更方便的方式   使用此功能。

不仅存在大量错误,而且版本彼此不兼容,这就是我猜你的问题。

例如,我的两台(不兼容的)机器:

CentOS 5.5, PHP 5.2.10, Apache 2.2.3, x86_64
----
bcompiler version   0.9.3-devs
current bytecode version    0.21
can parse bytecode version  0.7, 0.9, 0.11, 0.12, 0.14, 
0.18, 0.21

Mac OS X 10.6, PHP 5.3.3, Apache 2.2.15, i386
----
bcompiler version   0.9.3-devs
current bytecode version    0.22
can parse bytecode version  0.20, 0.22

我将它作为错误提交给PECL包。

答案 1 :(得分:0)

PHP认为所有require / include文件都是纯文本,并会将其视为<?(短标签),<?php(常规标记)或{{1}流中的(ASP标记)字符序列,然后切换到PHP模式,直到它到达脚本末尾或相应的结束标记(<%?>)。因此,没有办法让PHP将编译输入视为程序代码。即使是EVAL也无济于事,因为它只会调用同一个首先没有触发二进制输入的解析器。

BZipped代码本身也不可执行,除非它被自动提取器存根包装。

因为它似乎是BZipped,为什么不尝试解压缩文件,看看你得到了什么?也许类文件是作为.bz2发行版下载的,只是重命名了。未压缩的副本可能包含允许执行的适当包装器。

答案 2 :(得分:0)

我很长时间以来一直在努力与bcompiler合作,但令人惊讶的是我找到了一个非常简单的解决方案,您只需点击一下即可编译整个网站。你可以按照下面的步骤: -

  1. 下载并安装Wampserver(任何版本)。

  2. 下载并安装Wampserver PHP Addons版本php 5.2.5

  3. 点击Wampserver - &gt; PHP - &gt;版本 - &gt; 5.2.5从任务栏(它将你当前的PHP版本更改为5.2.5)。

  4. 选择Wampserver - &gt; PHP - &gt;扩展名 - &gt; php_bcompiler(它将在您的计算机上启用bcompiler)。

    如果您可以编写自己的脚本,则上述步骤就足够了,但为了方便您继续执行后续步骤。

  5. 下载bcompiler GUI

  6. 在Bcompiler GUI上选择文件夹,只需点击一下即可编译整个网站。

  7. 享受PHP |享受开源