1

我没有做大量的 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);
}

任何帮助表示赞赏。

4

3 回答 3

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 包。

于 2011-01-26T19:55:52.957 回答
0

PHP 将所有 require/include 文件视为纯文本,并将它们视为纯文本,直到它在流中发现<?(shorttag)、<?php(regular tag) 或<%(ASP tag) 字符序列,然后切换到 PHP 模式, 直到它到达脚本的结尾或相应的结束标记 ( ?>, %>)。因此,无法让 PHP 将编译后的输入视为程序代码。即使是 EVAL 也无济于事,因为它只是调用了最初没有触发二进制输入的同一个解析器。

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

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

于 2010-06-28T21:12:49.173 回答
0

很长一段时间以来,我一直在努力使用 bcompiler,但令人惊讶的是,我找到了一个非常简单的解决方案,您可以一键编译整个网站。您可以按照以下步骤操作:-

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

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

  3. 从任务栏中单击 Wampserver -> PHP -> 版本 -> 5.2.5(它会将您当前的 php 版本更改为 5.2.5)。

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

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

  5. 下载bcompiler GUI

  6. 在 Bcompiler GUI 上选择文件夹,这将一键编译您的整个网站。

享受PHP | 享受开源

于 2012-04-26T05:13:31.543 回答