PHP B编译的代码在不同的Linux版本

时间:2017-06-30 17:48:24

标签: php linux centos freebsd bcompiler

我一直在使用PECL bcompiler扩展。一切都很好。 但是,我发现将工作脚本移动到另一个Linux系统(CentOS - > FreeBSD)会导致将bcompiled程序部分包含到基本脚本(运行时屏幕上出现垃圾)的问题。 PHP(5.2.10)和bcompiler扩展(最新版本)的版本是相同的。所有源都安装在两个Linux系统中都没有错误。使用dl()函数正确加载B编译器:没有错误,所有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...

  4. 垃圾邮件消失,但PHP通知:致命错误:无法继承[第40行的[filename.php]。同时,两个系统上的页眉和页脚的完整编译给出了积极的结果。

    问题出现了:Bcompiled字节码是否对父系统是唯一的,以及我如何解决问题。我的重要任务是将已编译的模块自由传输到安装了PHP和Bcompiler的各种Linux系统。

0 个答案:

没有答案