Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“你能”吗;编撰;PHP代码并上传一个二进制ish文件,该文件将由字节码解释器运行?_Php_Bytecode - Fatal编程技术网

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

“你能”吗;编撰;PHP代码并上传一个二进制ish文件,该文件将由字节码解释器运行?,php,bytecode,Php,Bytecode,我知道PHP在服务器上运行之前被编译成字节码,然后字节码可以被缓存,这样整个脚本就不必在每次web访问时被重新解释 但是你能“编译”PHP代码并上传一个二进制ish文件吗?这个文件将由字节码解释器运行。PHP并不像许多程序那样编译。您可以使用Zend的编码器使其无法读取。简短的回答是“否” PHP的当前实现是一种解释语言。您可以从理论上论证任何语言在技术上都可以被解释或编译,但目前的实现是这样的:PHP代码需要一个解释器来运行,解释器管理执行环境 要回答您关于上传预编译PHP字节码的问题,这可能

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


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

PHP并不像许多程序那样编译。您可以使用Zend的编码器使其无法读取。

简短的回答是“否”

PHP的当前实现是一种解释语言。您可以从理论上论证任何语言在技术上都可以被解释或编译,但目前的实现是这样的:PHP代码需要一个解释器来运行,解释器管理执行环境


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

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

除此之外,谷歌
PHP编译器
还提供了许多第三方解决方案

  • 将PHP编译为.NET和.NET内核
  • 可以编译成自包含的二进制文件
  • 在Mac、Linux、Windows、Windows核心、ARM等平台上运行

  • (下载)
  • 编译到.NET(CIL)看起来从2017年7月开始停产,似乎不支持PHP7

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

  • ,
  • PHP的免费开源编译器实现
  • 编译为本机二进制文件(Windows、Linux)
  • –网站关闭,停留在GitHub上,最后一次更改是从2012年初开始

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

  • ,
  • 变革孵化器
  • 由IBM支持
  • 编译为Java字节码
  • 现在看起来停产了(2014年2月)——网站关闭,看起来像是2008年和2009年的大肆宣传

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

  • 编译成C++
  • 外观现已停产(2014年2月)——最后一次更改是在2003年

允许您将PHP程序编译到共享库中,这些库可以上载到服务器。PHP程序被编译成二进制文件。它的实现方式支持
eval
s、
include
s和整个PHP标准库。

自从第一次提出这个问题以来,这个答案已经从一个简单的“否”变为“某种程度的”

php是一个用PHP代码编译成高度优化C++的编译器。 显然,某些函数不受支持(例如“explode”)

我在寻找关于如何实现HipHop的更多信息时发现了这个问题,我想我应该说出来:)

然而,自2013年以来,Facebook不再使用它,并且为了支持HHVM而停止使用它,HHVM不是编译器:

还有

  • ,
目的是什么

  • 在专有PHP应用程序中对整个脚本进行编码
  • 在专有PHP应用程序中对某些类和/或函数进行编码
  • 使php gtk应用程序能够在客户端桌面上使用,而无需php.exe
  • 对PHP到C转换器进行可行性研究
PECL可提供该分机。

嗯,任何人都听说过,这正是此人所要求的。它将PHP代码编码/混淆为“机器代码”。

有几个PHP代码的“编译器”。它们中的大多数并不支持所有PHP特性,因为这些特性必须在运行时进行解释


我们正在使用Phalanger--它甚至支持那些肮脏的PHP动态特性,并且仍然能够将它们编译为.NET汇编,可以作为独立的DLL分发。

如果您只是想从PHP脚本生成二进制可执行文件,那么,请避免试图使你的问题非常精确,因为这会使你看起来确切地知道你需要什么。此外,大多数PHP开发人员对字节码是什么一无所知

话虽如此,答案是肯定的。我刚刚把一个PHP脚本编译成二进制文件。而不仅仅是任何二进制文件。我已经使用(链接到Wayback机器,现在已断开)将其转换为一个可移植的二进制文件,可以与所有依赖项一起分发并执行,而不会出现任何问题……而且它工作得很好


您所需要的只是使用。

请参阅5.5.x和集成的OPcache模块,共享内存中的易失性、更高的性能以及php的动态性原理保持不变


在PHP7中,有一个PHPINI选项,用于将字节码保存在特定文件夹中。In对于“编译”并保存在特定文件夹中以优化重用的php cli脚本非常有用

Opcache它不是编译,而是类似的东西。

如果