【问题标题】:Convert a PHP script into a stand-alone windows executable将 PHP 脚本转换为独立的 Windows 可执行文件
【发布时间】:2012-01-28 16:07:39
【问题描述】:

我想自动化一个相当简单的任务。为此,我编写了一个小的 PHP 脚本,我使用 PHP-CLI 从命令行运行它。现在我想将此脚本交给某人,但我不想这样做:

  • 赠送源代码
  • 请他在系统上安装PHP

有没有办法创建一个 .exe 版本的 PHP 脚本。我真的不太担心反编译;我更担心要求人们安装和配置 PHP。

【问题讨论】:

  • 你听说过 bamcompile (r) 吗?
  • 多年来一直在使用 Bambalam。它现在已经停滞了大约永远 - 更重要的是,它只与 PHP4.4.4 兼容。但是,只要您不需要 UTF8 支持和类似的并且可以处理损坏的 foreach() 和其他一些,它应该适合您。请注意,使用 PHP4.4.4 处理目录中的 UTF8 文件名是不可能的。另请记住,它会在 %TEMP% 中创建永远不会删除的文件 (php[0-F]{2}.tmp),您需要清理这些文件。
  • PHP 的二进制文件可以便携运行。您可以告诉人们提取整个文件夹并创建一个批处理文件来执行类似“php.exe -c php.ini script.php”的内容。

标签: php obfuscation


【解决方案1】:

桃派

http://www.peachpie.io

https://github.com/iolevel/peachpie

Peachpie 是 Microsoft 基于 Roslyn 的 PHP 7 编译器,借鉴了流行的 Phalanger。它允许通过将 PHP 代码编译为纯 MSIL 来在 .NET/.NETCore 中执行 PHP。

长矛

http://v4.php-compiler.net/

http://wiki.php-compiler.net/Phalanger_Wiki

https://github.com/devsense/phalanger

Phalanger 是一个由布拉格查尔斯大学发起并得到微软支持的项目。它将用 PHP 脚本语言编写的源代码编译成 CIL(通用中间语言)字节码。它处理由 .NET Framework 的 JIT 编译器组件完成的编译过程的开始。它不涉及本机代码生成或优化。其目的是将 PHP 脚本编译成 .NET 程序集、包含 CIL 代码和元数据的逻辑单元。

班巴拉姆

https://github.com/xZero707/Bamcompile/

Bambalam PHP EXE 编译器/嵌入器是一个免费的命令行工具,用于将 PHP 应用程序转换为独立的 Windows .exe 应用程序。生成的 exe 文件是完全独立的,不需要 php dll 等。php 代码使用 Turck MMCache Encode 库进行编码,因此如果您想在保护源代码的同时分发应用程序,这是一个完美的解决方案。该转换器还适用于为窗口 PHP 应用程序(例如使用 WinBinder 库创建)生成 .exe 文件。它也适用于制作独立的 PHP Socket 服务器/客户端(使用 php_sockets.dll 扩展)。 它不是真正的编译器,因为它不会从 PHP 源代码生成本机机器代码,但它可以工作!

ZZEE PHPExe

http://www.zzee.com/phpexe/

ZZEE PHPExe 将 PHP、HTML、Javascript、Flash 和其他 web 文件编译成 Windows GUI exe。您可以使用熟悉的 PHP Web 范例快速开发 Windows GUI 应用程序。您可以对在线应用程序和 Windows 应用程序使用相同的代码,只需进行少量修改或无需修改。它是一种商业产品。

phc-win

http://wiki.swiftlytilting.com/Phc-win

PHP 扩展 bcompiler 用于将 PHP 脚本代码编译成 PHP 字节码。只要加载了 bcompiler 扩展,就可以像任何 php 文件一样包含此字节码。创建完所有字节码文件后,使用修改后的 Embeder 将所有项目文件打包到程序 exe 中。

需要

  • php5ts.dll
  • php_win32std.dll
  • php_bcompiler.dll
  • php-embed.ini

ExeOutput

http://www.exeoutput.com/

商业

WinBinder

http://winbinder.org/ - 不再可用

(原文:https://github.com/stefan-loewe/WinBinder

(分叉:https://github.com/wagy/WinBinder

WinBinder 是脚本编程语言 PHP 的开源扩展。它允许 PHP 程序员轻松构建本地 Windows 应用程序,以最小的努力产生快速和有益的结果。由于 PHP 的强大功能和灵活性,即使是几十行的短脚本也可以生成有用的程序。

PHPDesktop

https://github.com/cztomczak/phpdesktop

PHP Desktop 是一个开源项目,由 Czarek Tomczak 于 2012 年创立,旨在提供一种使用 PHP、HTML5、JavaScript 和 SQLite 等 Web 技术开发原生桌面应用程序的方法。这个项目不仅仅是一个 PHP 到 EXE 编译器,它嵌入了一个网络浏览器(Internet Explorer 或 Chrome 嵌入式)、一个 Mongoose 网络服务器和一个 PHP 解释器。您习惯的开发流程保持不变,将现有网站变成桌面应用程序的步骤基本上是将其复制到“www/”目录的问题。使用 SQLite 数据库是可选的,您可以在应用程序的安装程序中嵌入 mysql/postgresql 数据库。

PHP 夜雨

https://github.com/kjellberg/nightrain

使用 PHP Nightrain,您将能够在 Windows、Mac 和 Linux 操作系统上作为原生桌面应用程序部署和运行 HTML、CSS、JavaScript 和 PHP Web 应用程序。流行的 PHP 框架(例如 CakePHP、Laravel、Drupal 等)得到很好的支持!

phc-win "fork"

https://github.com/RDashINC/phc-win

phc-win 或多或少的分叉版本,它使用与 phc-win 相同的技术,但支持几乎所有现代 PHP 版本。 (5.3, 5.4, 5.5, 5.6, etc) 它也可以使用 Enigma VB 将 php5ts.dll 与您的 exe 结合起来,以及 UPX 压缩它。最后将win32std和winbinder静态编译成PHP。

编辑

另一种选择是使用

http://www.appcelerator.com/products/titanium-cross-platform-application-development/

一种在线编译器,可以为多种不同平台构建可执行文件,包括 PHP 在内的多种不同语言

TideSDK

http://www.tidesdk.org/

TideSDK 实际上是重命名的 Titanium Desktop 项目。 Titanium 仍然专注于移动端,放弃了桌面版本,被一些开源它的人接管并命名为 TideSDK。

TideSDK 通常使用 HTML、CSS 和 JS 来渲染应用程序,但它支持 PHP 等脚本语言作为插件模块,以及 Python 和 Ruby 等其他脚本语言。

【讨论】:

  • 我可以确认 phc-win 适用于使用 PHP 5.3 代码创建控制台 exe 文件。只需将 PHP 脚本与 php-win exe 放在同一文件夹中即可。
  • 我使用了 bambalam 编译器。很酷很简单,也支持win-builder,但不支持php5 :(
  • PHP-Nightrain 是 PHPDesktop 的一个非常好的替代品 - 并且是跨平台的(Windows、OSX、Linux)。虽然它因为依赖 Java 而名声不好,但现在它已经切换到 Python 作为包装器,并且是开发基于 PHP 的跨平台软件的一个非常好的选择。 -- github.com/naetech/nightrain
  • 刚刚因为 Bambalam 问题/行为而失去了整个星期天。在此安装中,它每天执行 50 次。它会创建具有固定名称大小的临时文件,他从不删除(4 个字符)......导致不再有空闲文件名。 Sysinternals procmon 帮助弄清楚发生了什么。并不容易,并且在 Bambalam 留下了不好的氛围。
  • 干得好!我会尝试其中的一些。 mysql 数据库和php 站点使用哪个最好?
【解决方案2】:

我对其他答案中的大多数工具都有问题,因为它们都非常过时。

如果您需要一个“正常工作”的解决方案,请在 WinRar SFX 存档中将一个基本版本的 php 与您的项目一起打包,将其设置为将所有内容提取到一个临时目录并执行 php your_script.php

要运行基本脚本,唯一需要的文件是 php.exephp5.dll(或 php5ts.dll,具体取决于版本)。

要添加扩展,请将它们与 php.ini 文件一起打包:

[PHP]
extension_dir = "."
extension=php_curl.dll
extension=php_xxxx.dll
...

【讨论】:

  • 您好,您的解决方案非常有趣。类似于 quickphp 网络服务器。你有简单的例子吗?我希望你能提供一个来源。顺便说一句,好主意。
  • 这真的很有趣!但问题是,OP 不想“放弃源代码”,即使是菜鸟也可以从 SFX 中提取脚本。
【解决方案3】:

我尝试了第一个答案中给出的大部分解决方案,唯一一个对我有用并且非商业php-desktop.

我只是将我的 php 文件放在 www/ 文件夹中,更改了 .exe 的名称并能够将我的 php 作为 exe 运行!

还有一个完整的文档、最新的支持、windows 和 linux(以及很快的 mac)兼容性以及可以轻松更改的选项。

【讨论】:

【解决方案4】:

RapidEXE 正是适合这项工作:

它将一个 php 项目转换为一个独立的 exe。我受够了所有其他编译器,一个一个地尝试了它们,但它们都以一种或另一种方式让我失望。做我的客人,随时欢迎反馈!

旁注:其背后的机制与 WinRAR SFX 方法非常相似;提取引擎,提取源代码,然后运行。它只是更快,更容易使用。一键编译、压缩、智能解包、自动清理、轻松配置、完全掌控php引擎和版本;也可以轻松扩展。

开发愉快!

【讨论】:

  • 我尝试使用您的工具,但收到以下错误Cannot find myself (D:\Desktop\phpflexer\phpflexer.exe)
  • 这很有希望,但您能在其中添加一些库吗?例如,我需要 GD2,以便我的脚本可以处理图像。
  • @Tom:当然,有一个新版本,如果你想测试它,我可以给你一个下载链接。 (我保证没有恶意软件。)它现在实际上好多了,它是 php 7.2,而且我认为它能够处理其他语言。我的 gmail 是 kellnerdenes。
  • 刚刚试了一下,非常简洁的编译命令行脚本解决方案!我在大部分 GUI 项目中使用 ExeOutput4PHP 已经有一段时间了,但对于控制台应用程序,RapidEXE 看起来也很棒,如果不是更好的话。
  • @JayDadhania 音乐在我耳边!第 3 版即将推出,敬请期待!
【解决方案5】:

ExeOutput 也可以将 PHP 网站变成 Windows 应用程序和软件

将 PHP 网站转变为 Windows 应用程序和软件

使用 ExeOutput for PHP 制作的应用程序可以本地运行 PHP 脚本、PHP 应用程序和 PHP 网站,并且不需要 Web 服务器、Web 浏览器或 PHP 分发。它们是独立的,可以在任何装有最新 Windows 版本的计算机上运行。

ExeOutput for PHP 是一个功能强大的网站编译器,可以处理现代网站上的所有元素:PHP 脚本、JavaScript、HTML、CSS、XML、PDF 文件、Flash、Flash 视频、Silverlight 视频、数据库和图像。将这些元素与 PHP 运行时和 PHP 扩展相结合,PHP 的 ExeOutput 构建了一个包含完整应用程序的 EXE 文件。

http://www.exeoutput.com/

【讨论】:

    【解决方案6】:

    我在这件事上的经验告诉我,这些软件中的大多数都适用于小型项目。
    但是大项目呢?例如:Zend Framework 2 和一些类似的东西。
    其中一些需要浏览器才能运行,这很难告诉客户“请在浏览器地址栏中输入http://localhost/”!

    我创建了一个简单的项目来做到这一点:PHPPy

    这不是创建用于运行 php 项目的独立可执行文件的完整方法,但可以帮助您做到这一点。
    我无法使用 PyInstaller 或 Py2exe 将 python 文件编译为 .exe 文件,希望你可以。
    您不需要 uniformserver 可执行文件。

    【讨论】:

    • 创建 localhost 的快捷方式是一项艰苦的工作,不是吗? :) 无论如何,你有理由“在小项目上运作良好”。独特的完整“随你所愿”是 phpdesktop。
    【解决方案7】:

    当前的 PHP Nightrain (4.0.0) 是用 Python 编写的,它使用 wxPython 库。到目前为止,wxPython 一直在很好地获取 PHP Nightrain 今天的位置,但为了将 PHP Nightrain 推向它的 下一个级别,我们将介绍 PHP Nightrain 的兄弟姐妹, PHPWebkit!

    这是 PHP Nightrain 的更新。

    https://github.com/entrypass/nightrain-ep

    【讨论】:

    • naetech.com 已被盗。无法下载任何内容。
    猜你喜欢
    • 2016-05-15
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多