【问题标题】:Convert PHP file to binary将 PHP 文件转换为二进制文件
【发布时间】:2010-12-23 03:28:33
【问题描述】:

是否可以将 PHP 文件转换为二进制文件并部署在网络服务器上?

【问题讨论】:

  • 转换成二进制是什么意思? PHP 是一种解释性语言,这意味着它被逐行读取并执行(大致)。它不像 C 那样编译为二进制文件,您只需将文件放在 web 目录中并允许用户访问它;当然,Web 服务器必须运行 PHP。
  • 您想加密源代码并将其作为可执行文件分发,这样任何人都无法窃取和更改代码以供重复使用,对吧?
  • 来吧,真的..你不能更好地提出问题吗? ..不知道你想做什么
  • @Hulk:如果你的目标是 @Salman A 所说的,你应该使用 Zend Guard(zend.com/en/products/guard)

标签: php binary


【解决方案1】:

由于 PHP 是一种(相对)可移植的语言,将 PHP 源代码编译为字节码而不是二进制代码更为可取。为此,有一个名为bcompiler 的实验项目。

【讨论】:

  • 还有roadend,(我认为)在他们放弃方案后正在使用部分phpc。
  • phc 安装起来有点麻烦,而且 roadend 似乎比通过 php 解释器运行文件要慢。
  • 一旦你使用 pecl 命令行工具将 bcompiler 安装到你的 PHP 中,你可以使用 bencoder 作为脚本来编码所有 PHP 文件的一个文件或整个目录(和子目录),以及将所有未编码的文件复制到新目录中。在这种情况下,您可能会发现不需要 IonCube。但这仍然是实验性的,所以请测试所有功能是否仍然有效。
【解决方案2】:

几个月前我搜索了它(php代码保护或脚本保护),我的结果是:

我提供了一些描述,但请尝试用谷歌搜索并原谅我。

请谨慎搜索,因为您可能会遇到 php 压缩器,而压缩器只是 GZIP 和其他 http 传输压缩机制。

php 脚本保护工具最重要的问题是:

  1. php运行时性能会降低多少速度(down)(降多少速度)

  2. 我们需要额外的环境或在 php 服务器上安装工具吗?

  3. 易于处理

你可以在http://www.seocompany.ca/software/free-encryption-software.html找到完整的描述和比较

混淆器

您会在网络上找到很多混淆器,但不能保证您的代码可以正常工作。

即使我发现 Visual C++MSVS 混淆 php 的混合方式,因为我也有使用 asp.net 的经验,所以我测试了它但没有用。

转换器和储物柜

  • 离子保护器 (http://www.ioncube.com/):哦,不是免费的,但我听说过很多关于他的名气的事

  • phc(php 编译器):免费并且是一个很好的案例,但“Brendan Long”说的是实话,因为 phc 的安装方式很痛苦。然而结果是神奇的,并且有著名的名字,比如离子

  • php locker:我得到它并测试它。它的编译代码有错误,它的发布版本低于 php5。绝对不是免费的,对于那些想用 ccr-ac*ks 为 php locker 找到它的人来说是不可能的。

  • Zend Guard:一种完美的保护方式,但它比 phc 或 ion 更难,因为您的服务器上需要 Zend 运行时环境 (ZRE),而且 Zend Guard 绝对是非免费的,但是如果你是 Zend 人(zend 框架+zend IDE+zend Guard)你应该知道 Zend Guard 与 zend IDE 兼容,代码阻塞过程将如此简单。我不是 Zend 人,因为 zend 框架和 zend 守卫都明显降低了运行时速度。我喜欢 php 加速运行时。

  • php -> C/C++ compiling(是的,它是可能的)(全球最佳性能):没那么有名,所以没有人谈论这很正常。

  • facebook hiphop:facebook 使用此工具在 c++/c 上编译 php 文件以获得更好的性能,但最终我们得到了不可读的编译代码。我不记得了,但我认为它需要对 linux 或Microsoft Visual C++ 上的 php 重新编译机制非常熟悉。 (但是不要相信我的弱记忆力和谷歌它)(以及了解 PHP 重新编译方式请参考最新版本的 php_manual.chm)

最后,我使用适用于 php 5.3 和复杂脚本的正则表达式制作了自己的简单 php 混淆器,因此我继续使用 OpenSSL 和不同的加密机制,并获得了关于 php 安全开发的评论。

祝你成功。

【讨论】:

    【解决方案3】:

    这是迟到的,但应该做你想做的。

    使用 zend 引擎制作您自己的自定义扩展,因为它们编译为 c++ dll。将该 dll 添加到 php 目录中的 ext 位置。之后,您可以将自己的 php 脚本调用为 php 函数。请记住,php 只是服务器端,因此除非从服务器复制并分发,否则没有人可以获取您的脚本。

    下载您拥有的版本的 php 源库。 [windows.php.net] 你需要的zend东西都会包含在内。

    步骤 1. 创建一个新项目并选择 Visual C++ 下的“常规”和空项目选项。 给它一个名字,然后单击确定。我的是 Project1,所以我将使用它。

    步骤 2. 右键单击​​解决方案名称并选择属性。在 Configuration Properties/General 项中的 Project Defaults/Configuration Type 下选择 Dynamic Library (.dll)。确保您正在更改 Debug 配置,因为没有使用 Release。

    第 3 步。在 VC++ 目录下的包含库下添加以下内容: C:\php-7.1.8-src\Zend C:\php-7.1.8-src\win32 C:\php-7.1.8-src\TSRM C:\php-7.1.8-src\main C:\php-7.1.8-src 图书馆: C:\php-7.1.8\dev

    第 4 步。在 C/C++ Preprocessor 下,将 ZEND_DEBUG=0;ZTS=1;ZEND_WIN32;PHP_WIN32 添加到 Preprocessor Definitions

    第 5 步。在链接器输入下添加 php7ts.lib。这需要与您的 php 版本的库相匹配

    单击确定保存解决方案的属性设置。

    现在让我们为您的函数 (Project1) 添加一个代码文件

    在源文件文件夹下右键单击并添加代码。我调用了我的 Project1.cpp,这是源代码。您需要将 config.w32.h.in 重命名为 config.w32.h 并将其复制到需要的目录中。 Intellisense 应该会告诉您它在哪里查找,并且 config.w32.h.in 位于 C:\php-7.1.8-src\win32 目录中。

    // this needs to match the compiler version that php was compiled with
    #define _CRT_SECURE_NO_WARNINGS
    #define PHP_COMPILER_ID "VC14"
    
    #pragma once
    /* You must include config.w32.h first */
    #include "win32/config.w32.h"
    
    #include "php.h"
    
    ZEND_FUNCTION(ReturnString);
    
    zend_function_entry Project1_functions[] =
    {
        ZEND_FE(ReturnString, NULL)
        {
            NULL, NULL, NULL
        }
    };
    
    zend_module_entry Project1_module_entry =
    {
        STANDARD_MODULE_HEADER,
        "Project1 Module",
        Project1_functions,
        NULL, NULL, NULL, NULL, NULL,
        NO_VERSION_YET, STANDARD_MODULE_PROPERTIES
    };
    
    ZEND_GET_MODULE(Project1)
    
    ZEND_FUNCTION(ReturnString)
    {
        zval* value;
    
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &value) == FAILURE)
        {
            RETURN_FALSE;
        }
    
        convert_to_string(value);
    
        RETURN_STRING(Z_STRVAL_P(value), true);
    }
    

    按 F7 编译,它应该会创建 Project1\Debug\Project1.dll。将 Project1 复制到您的 ext 目录 C:\php-7.1.8\ext 并将 extension=Project1.dll 添加到您的 php.ini 中,您应该一切顺利。如果它不起作用,请仔细检查您的属性以确保您没有遗漏任何内容。

    The script is quite simple:
    
    <?php
    echo ReturnString("The Returning String");
    ?>
    

    【讨论】:

    • 有一个缓存 php 字节码的设置,所以请检查 php.ini 底部附近的 [opcache] 设置。
    【解决方案4】:

    如果 Web 服务器是基于 Linux 的,您可以创建像 .deb.rpm 之类的包(取决于 Linux 发行版)并轻松分发/部署它。

    BR, 大卫。

    【讨论】:

    • 这个答案不错。问题似乎是在问“如何将 php 文件转换为可分发的程序”。
    • 将 PHP 文件转换为二进制文件与将 PHP 文件转换为可分发程序不同。
    • 嗯,显然问题不是那么清楚。但似乎他需要一种类似 servlet 的方法。
    【解决方案5】:

    这取决于您所说的“二进制”是什么意思。

    如果您想编译(或只是混淆)您的 PHP 代码以防止其他人修改,请使用字节码编译器。一个例子是来自Zend 的工具等等。 (我更喜欢 Zend 的工具,因为他们是 PHP 背后的主要公司,并且针对所有 PHP 版本对所有工具进行全面 QA)。

    如果您想编译您的 PHP 代码并将 PHP 运行时链接到它,然后部署它(如 C\C++),那么不。也许在理论上这是可能的,但它会是一团糟。 (不切实际或不可行,并且认为没有人将任何东西放在一起尝试,并且输出也将与特定架构相关联)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      • 2021-03-17
      • 2011-10-08
      • 1970-01-01
      • 2011-01-07
      相关资源
      最近更新 更多