问题标签 [bcompiler]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
525 浏览

php - 寻找 PHP 5.4 和更多的 EXE 编译器

我有自己的 PHP CLI 实用程序,所以我需要 PHP 编译器。我发现在最后的 PHP 版本中没有任何工作,所以我现在使用的是 Phalanger,但它需要安装在客户端 mashine 上才能运行编译的脚本(!),并且它在 .NET 中编译文件(!!)。值得我见过的拐杖,但它正在工作并且有一个控制台版本(因为我正在使用 Notepad++ 进行开发)。我不知道为什么只值得拐杖工作)所以,我一直在寻找好的控制台 PHP 编译器,但此时什么也没找到。我发现的所有东西都非常古老。有一个列表和上次发布的年份:

  • phc: 2011
  • Roadsend PHP 编译器:2010
  • 班巴兰:2006
  • 二进制PHP:2003(!)

FB 发布了一个 HipHop,但是使用起来太可怕了,而且我认为它只是看起来像一个虚拟 mashine,实际上不是编译器。所以最后我决定编写自己的编译器来处理新版本的 PHP,并使用原生 bcompiler 来获取字节码,但发现 bcompiler 也死了,它的最后一个版本是在 2011 年!所以我可以问你,为什么所有的 PHP 编译器都死了?找到一个 bcompiler 源,例如为 Windows 的 PHP 构建一个新的 DLL 扩展,并将实际的 PHP DLL 版本放在其中是没有问题的,但是为什么有时,当惊人的 PHP 7 发布时,没有任何(任何! ) 轻量级和简单的实际 PHP 编译器?

还是我不明白什么?如果是这样 - 什么?非常感谢!

0 投票
0 回答
94 浏览

php - PHP Bcompiled 代码在不同的 Linux 版本中不起作用

我已经使用 PECL bcompiler 扩展很长时间了。一切都很好。但是,我发现将工作脚本移动到另一个 linux 系统(CentOS -> FreeBSD)会导致将 bcompiled 程序部分包含到基本脚本中出现问题(运行时屏幕上出现垃圾)。PHP(5.2.10)和bcompiler extension(最新)的版本是一样的。所有源代码都在两个 linux 系统中安装,没有错误。Bcompiler 使用 dl() 函数正确加载:没有错误,所有 bcompiler 的函数都在工作。

我试图将任务分为两部分:

  1. CentOS:只编译没有页眉和页脚的内容:

    function bc($ext = "b") { global $SCRIPT_DIR, $INCLUDES; echo "Bcompiler is loaded. Compiling modules ... \n"; foreach($INCLUDES as $inc_file){ echo "$inc_file.php "; $php_file = "$SCRIPT_DIR/include/$inc_file.php"; if(!file_exists($php_file)){ echo "not found!\n"; continue; } else echo "=> $inc_file.$ext\n"; $fh = fopen("$SCRIPT_DIR/modules/b/$inc_file.$ext", "w"); bcompiler_write_file($fh, $php_file); fclose($fh); } return; }

  2. FreeBSD:在编译模块中添加页眉和页脚:

    function b2bin() { global $SCRIPT_DIR, $INCLUDES; echo "Bcompiler is loaded. Processing modules ... \n"; foreach($INCLUDES as $inc_file){ echo "$inc_file.b "; $b_file = "$SCRIPT_DIR/modules/$inc_file.b"; // without header and footer if(!file_exists($b_file)){ echo "not found!\n"; continue; } else echo "=> $inc_file.bin\n"; $content = file_get_contents($b_file); $target_bin_file="$SCRIPT_DIR/modules/$inc_file.bin"; // with header and footer $fh = fopen($target_bin_file, "w"); bcompiler_write_header($fh); fwrite($fh,$content); bcompiler_write_footer($fh); fclose($fh); } return; }

  3. 在 FreeBSD [filename.php] 上启动主程序:

    if(!extension_loaded('bcompiler')) dl('bcompiler.so'); if(!function_exists("bcompiler_read")){ exit("error: PHP Bcompiler module not loaded. Install Bcompiler from https://pecl.php.net/package/bcompiler.\n"); } /*line 40*/ foreach( $INCLUDES as $inc_file) include_once ("$SCRIPT_DIR/modules/$inc_file.bin");
    shedule_run(); ...and so on...

垃圾消失了,但 PHP 提示:致命错误:无法在 [filename.php on line 40] 中继承。同时,两个系统上的页眉和页脚的完整编译给出了积极的结果。

问题出现了:Bcompiled 字节码对父系统是否唯一以及我如何解决这个问题。我的重要任务是将编译后的模块免费转移到安装了 PHP 和 Bcompiler 的各种 Linux 系统。