【问题标题】:Looking for PHP 5.4 and more to EXE compiler寻找 PHP 5.4 和更多的 EXE 编译器
【发布时间】:2016-11-04 18:47:50
【问题描述】:

我有自己的 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 编译器?

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

【问题讨论】:

  • 你没有提到为什么你“需要”一个编译器。速度?保护您的代码?
  • 啊,是的,我想保护我的代码并将 PHP 文件拆分为一个 .EXE
  • 一个答案是没有人愿意为它们付费,而且很难构建一个真正适用于实际应用程序的应用程序。它们更难维护,因为 PHP 发展如此之快。
  • Ira,对不起,但几乎所有的编译器(例如我在我的问题中列出的)都是免费的。但我认为第二个原因是正确的;)

标签: php compiler-construction bcompiler


【解决方案1】:

这是一个永无止境的大项目,因为 php 正在不断发展和成长(不像 C 这样的语言)。开源维护者会转向其他事情,例如与家人共度时光或找工作。

我认为这些项目之所以失败,是因为它们通常不适用于现实生活中的项目。充其量你可以编译几个脚本,但大多数在某个大项目中都会失败。对于 Web 开发(我怀疑 98% 的应用程序),您嵌入了与编译不兼容的脚本和样式。因此,您必须以不同的方式编写代码才能使用编译器,这在某些方面违背了使用 PHP 的初衷。

PHP 的版本太多了,编译器也远远落后于变得毫无用处。你真的必须想出另一种方法来保护你的产品。每个商业编码器都有一个解码器,所以真的没有办法保护你的代码不被想要得到它的人。我使用 ioncube 对我的脚本进行编码,但这只是为了防止客户破坏事物然后抱怨它不起作用。

【讨论】:

  • Danial 很好地总结了开源开发和该领域的挑战。 Zend 最近放弃了他们的编码器,因为支持 PHP 7 很困难,并且像大多数解决方案一样,从不支持在较新的 PHP 上运行旧的编码文件。 ionCube 一直都有,但这是一项艰巨的任务。创新安全是必不可少的,也需要做很多工作。 ionCube 9 中的动态密钥等功能在击败当前的解码站点方面非常有效,因为解密密钥没有存储在任何地方,但开发工作量很大。披露:我与 ionCube 有关。
  • 谢谢你的回答,抱歉我给你的回答太长了,伙计们)好的,我明白你的意思。好吧,事实上,我理解,大多数编码器都会被简单编码,但我想要一个“傻瓜安全”。
  • 我可以问你,不同版本的 PHP 有不同的字节码吗?当然 PHP 7 除外。因为我只使用 [],而不是 array(),用于创建新数组的构造,而 preg_replace_callback() 或 /r 修饰符在正则表达式中,所以有可能为 5.6 或更高版本创建这样的编译器吗?如果没有区别,我想我可以尝试应用我的一些想法来检查它是否具有生命权)
  • 你所说的“傻瓜安全”是什么意思?没有像 php 编译器这样的东西。所谓的编译器生成字节码,也就是在上面花足够的时间可以用来生成原始代码的标记。没有办法完全保护您的 php 代码。你能做的就是让逆向工程变得非常耗时。
  • 抱歉,您的答案已丢失。 “傻瓜安全”是指简单地对代码进行编码,快速查看是看不到的,但当然它会在应用程序开始使用它之前被解码。但是现在我正在寻找使用 OPCache 将其编译为字节码的可能性。当然它会被反编译,但它的任务对于普通用户来说并不是微不足道的。你知道它真的是理论上的吗?
【解决方案2】:

在寻找解决方案一段时间后,我编写了自己的编译器,它支持 PHP 7.1+ (!)。所以我的问题解决了。谢谢大家!

这里是:https://sourceforge.net/projects/phpc/

【讨论】:

    【解决方案3】:

    对于编译非常简单(单文件)的工具,有 PHPFlexerhttp://www.softpedia.com/get/Programming/Debuggers-Decompilers-Dissasemblers/PHPFlexer.shtml

    (它基于phc-win但更易于使用)

    【讨论】:

      猜你喜欢
      • 2010-09-18
      • 2019-03-19
      • 2012-10-02
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 2017-04-23
      • 2013-07-28
      • 2017-03-31
      相关资源
      最近更新 更多