当前位置: 首页 > 面试题库 >

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

魏旭
2023-03-14
问题内容

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

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


问题答案:

提出这个问题后,Facebook推出了 适用于PHP的HipHop,
这可能是迄今为止html" target="_blank">测试最完善的PHP编译器(它运行着世界十大网站之一)。但是,Facebook停止使用HHVM,因为HHVM是虚拟机,而不是编译器。

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

[PeachPie(https://www.peachpie.io/)

  • PeachPie GitHub
  • 将PHP编译为.NET和.NET Core
  • 可以编译成独立的二进制文件
  • 在Mac,Linux,Windows,Windows Core,ARM等平台上运行

Phalanger

  • GitHub(下载),Wikipedia
  • 编译为.NET(CIL)

[phc(https://github.com/pbiggar/phc)

  • 编译为本地二进制文件
  • 现在不太活跃(2014年2月)– 2011年最新版本,2013年夏季最新变化

Roadsend PHP编译器

  • GitHub,重写的GitHub
  • 使用编译器免费,开源地实现PHP
  • 编译为本机二进制文件(Windows,Linux)
  • 自2010年起停止提供服务,直到找到参与者为止 –网​​站关闭,停留在GitHub上,那里的最后一次更改是从2012年初开始

编译器

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

零计划

  • 维基百科,IBM
  • WebSphere sMash变更的孵化器
  • 受IBM支持
  • 编译为Java字节码
  • 现已停产(2014年2月)–网站关闭,在2008年和2009年大肆宣传

bamcompile/

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

binaryphp/

  • 编译为C ++
  • 现已停产(2014年2月)– 2003年的最新更改


 类似资料:
  • 问题内容: 如何解析编译静态二进制文件,其中的代码包含函数gethostbyname,并且如果编译时未发出如下警告: 警告:在静态链接的应用程序中使用’gethostbyname’要求在运行时需要glibc版本中用于链接的共享库 我用命令在ubuntu 12.04上编译: 这是lookup.c的代码: 我想检查是否将获得如下输出: 查找:ELF 32位LSB可执行文件,Intel 80386版本1

  • 我正在使用java 11处理一些依赖项并编译到旧版本。我将一个依赖项迁移到Java11并正常工作,但我们仍然必须在Java8上运行Tomcat 7或8。是否可以使用标志来编译使用,或并在8上运行的代码? 发布标志表明应该可以: --发布版本 针对特定 VM 版本的公共、受支持和记录的 API 进行编译。支持的版本目标为 6、7、8 和 9。 这个项目是一个依赖项,独立运行在SprinBoot2.1

  • 问题内容: 我遇到了一些有关JVM / JIT活动的参考,其中似乎在编译字节码和解释字节码之间有区别。该特定注释声明的字节码在前10000次运行时进行解释,然后进行编译。 “编译”和“解释”字节码之间有什么区别? 问题答案: 解释字节码基本上是逐行读取字节码,不进行任何优化或任何操作,然后对其进行解析并实时执行。由于许多原因,这种方法效率低下,其中包括Java字节码设计得不能快速解释的问题。 编译

  • 问题内容: 好吧,这实际上是两部分的… 首先我需要 读取文件内容 加密成一个 byte[] 将写入byte[]文件或其他任何内容… 然后,来自#2或#3的结果将进入另一个项目。我正在尝试保护我们的PEM / DER密钥。 对于解密,我需要 读取加密文件的内容为 byte[] 解密成一个 byte[] 将解密的数据写入文件或使用它代替文件 现在,我有一些基本的加密代码 并解密一个 问题是: 给定一个

  • 下面是一个上传二进制文件的例子,WebService类的代码如下: package service; import java.io.InputStream; import java.io.OutputStream; import java.io.FileOutputStream; import javax.activation.DataHandler; public class 

  • 我有一个表格,可以很好地上传很多图像文件,大小也不一样。 但是有些图像没有上传到服务器。 问题图像具有空的$\u文件[name][tmp\u name]和$\u文件[name][error]==8 同时其他图像(文件大小较大或较小)正确上传。 你有什么想法吗? 谢谢