你能“编译”PHP代码并上传一个二进制文件,该文件将由字节代码解释器运行吗?

2022-08-30 06:15:21

我知道PHP在服务器上运行之前被编译为字节码,然后可以缓存该字节码,这样整个脚本就不必在每次Web访问时重新解释。

但是你能“编译”PHP代码并上传一个二进制文件,该文件将由字节代码解释器运行吗?


答案 1

在提出这个问题之后,Facebook推出了HipHop for PHP,这可能是迄今为止测试最好的PHP编译器(因为它运行着世界上10个最大的网站之一)。然而,Facebook停止了它,转而支持HHVM,它是一个虚拟机,而不是一个编译器。

除此之外,谷歌搜索还发现了许多第三方解决方案。PHP compiler

桃子派

  • PeachPie GitHub
  • 将 PHP 编译为 .NET 和 .NET Core
  • 可以编译成自包含的二进制文件
  • 运行在Mac,Linux,Windows,Windows Core,ARM,...

方阵

  • GitHub(下载),维基百科
  • 编译到 .NET (CIL) 似乎从 2017 年 7 月开始停止,并且似乎不支持 PHP 7。

断续器

  • 编译为本机二进制文件
  • 现在不是很活跃(2014 年 2 月) – 最后一个版本在 2011 年,最后一次更改是在 2013 年夏季

Roadsend PHP Compiler

b编译器

  • PHP 的 PECL 扩展
  • 实验的
  • 编译为 PHP 字节码,但可以将其包装在加载 PHP 解释器的 Windows 二进制文件中(请参阅 bcompiler_write_exe_footer() 手册)
  • 现在看起来已停产(2014 年 2 月)– 最后一次更改是在 2011 年

零项目

  • 维基百科IBM
  • WebSphere sMash 的更改孵化器
  • 由 IBM 提供支持
  • 编译为 Java 字节码
  • 现在看起来停产了(2014年2月) - 网站关闭,看起来像2008年和2009年的大炒作

班巴拉姆

  • 编译为独立的 Windows 二进制文件
  • 二进制文件包含字节码和启动器
  • 现在看起来已停产(2014 年 2 月)– 最后一次更改是在 2006 年

二进制PHP

  • 编译为C++
  • 现在看起来已停产(2014 年 2 月)– 最后一次更改是在 2003 年

答案 2

简短的回答是“不”。

PHP的当前实现是解释型语言的实现。你可以争论任何语言在技术上都可以被解释或编译的事实的理论方面,但就目前而言,当前的实现是这样的,PHP代码需要解释器来运行,解释器管理执行环境。

要回答您关于上传预编译的PHP字节码的问题,这可能是可能的,但是您必须实现一种方法,让PHP解释器读取这样的文件并使用它。由于现有的操作码缓存已经存在,这似乎不是一项可以获得很多回报的任务。


推荐