我没有做大量的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);
}
任何帮助表示感谢。
答案 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合作,但令人惊讶的是我找到了一个非常简单的解决方案,您只需点击一下即可编译整个网站。你可以按照下面的步骤: -
下载并安装Wampserver(任何版本)。
下载并安装Wampserver PHP Addons版本php 5.2.5
点击Wampserver - &gt; PHP - &gt;版本 - &gt; 5.2.5从任务栏(它将你当前的PHP版本更改为5.2.5)。
选择Wampserver - &gt; PHP - &gt;扩展名 - &gt; php_bcompiler(它将在您的计算机上启用bcompiler)。
如果您可以编写自己的脚本,则上述步骤就足够了,但为了方便您继续执行后续步骤。
在Bcompiler GUI上选择文件夹,只需点击一下即可编译整个网站。
享受PHP |享受开源