将PHP文件转换为二进制文件

将PHP文件转换为二进制文件,php,binary,Php,Binary,是否可以将PHP文件转换为二进制文件并将其部署到Web服务器上?由于PHP是一种(相对)可移植的语言,因此将PHP源代码编译为字节码而不是二进制代码更为可取。为此,有一个实验项目叫做 这取决于你所说的“二进制”是什么意思 如果您想编译(或只是混淆)您的PHP代码以防止其他人修改,那么请使用字节码编译器。其中一个例子是来自的工具。(我更喜欢Zend的工具,因为它们是PHP背后的主要公司,并针对PHP的所有版本对其所有工具进行全面的QA) 如果您想编译PHP代码,并将PHP运行时链接到它,然后部署它

是否可以将PHP文件转换为二进制文件并将其部署到Web服务器上?

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

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

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


如果您想编译PHP代码,并将PHP运行时链接到它,然后部署它(如C\C++),那么就不需要了。理论上这可能是可行的,但会很混乱。(不实用或不可行,也不认为任何人已经将任何东西放在一起尝试,输出也将与特定的体系结构相关联)。

如果web服务器基于Linux,您可以创建一个类似或的包(取决于Linux发行版)并轻松分发/部署它

比尔,
Dawid。

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

我提供了一些描述,但试图谷歌他们,原谅我

搜索时要小心,因为您可能会遇到php压缩器,而压缩器只是关于
GZIP
和其他http传输压缩机制

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

  • php运行时性能将降低(降低)多少速度(降低多少速度)

  • 我们是否需要在php服务器上安装额外的环境或工具

  • 易操作

  • 您将在以下网站上找到关于整体描述和比较的信息:

    模糊器

    你可以在网上找到很多模糊程序,但是你的代码不能保证正常工作

    甚至我发现了一种混合使用
    visualc++
    MSVS
    来混淆php的方法,而且因为我有
    asp.net
    的经验,所以我测试了它,但没有效果

    转换器和储物柜

    • 离子保护者:哦,不是免费的,但我听说过很多关于他的名字

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

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

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

    • php->C/C++编译
      (是的,这是可能的)(世界上最好的性能):它不是那么有名,所以如果没有人谈论它,这是正常的

    • facebook hiphop:facebook使用此工具在c++/c上编译php文件,以获得更好的性能,但最终我们得到了无法读取的编译代码。我不记得了,但我认为它需要非常熟悉linux或
      MicrosoftVisualC++
      上的php重新编译机制。(但是,不要相信我的内存不足和google it)(要了解PHP重新编译方式,请参阅最新版本的PHP_manual.chm)

    最后,我使用在PHP5.3和复杂脚本上工作的正则表达式制作了我自己的简单php模糊器,因此我继续使用
    OpenSSL
    和不同的加密机制,并对php安全开发进行了回顾


    祝你成功。

    这太晚了,但你应该做你想做的事

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

    下载您拥有的版本的php源代码库。[windows.php.net]将包括您需要的zend内容

    第一步。创建一个新项目并在VisualC++中选择“一般”和“空项目”选项。 给它一个名称,然后单击“确定”。我的是Project1,所以我将使用它

    第二步。在解决方案名称上单击鼠标右键,然后选择“属性”。在配置属性/常规项的项目默认值/配置类型下选择动态库(.dll)。确保在未使用版本时更改调试配置

    第三步。在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

    第四步。在C/C++预处理器下添加ZEND_DEBUG=0;ZTS=1;ZEND_WIN32;PHP_WIN32到预处理器定义

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

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

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

    在“源文件”文件夹下,右键单击并添加代码。我调用了我的Project1.cpp,这里是源代码。您需要将config.w32.h.in重命名为config.w32.h,并将其复制到需要的目录中。Intellisense应该告诉您它的位置并配置.w
    // 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);
    }
    
    The script is quite simple:
    
    <?php
    echo ReturnString("The Returning String");
    ?>