我知道PHP在服务器上运行之前已被编译为字节码,然后可以缓存该字节码,这样就不必在每次访问Web时都重新解释整个脚本。
但是,您可以“编译” PHP代码并上传一个二进制文件,该文件将由字节码解释器运行吗?
我知道PHP在服务器上运行之前已被编译为字节码,然后可以缓存该字节码,这样就不必在每次访问Web时都重新解释整个脚本。
但是,您可以“编译” PHP代码并上传一个二进制文件,该文件将由字节码解释器运行吗?
Answers:
提出这个问题后,Facebook推出了适用于PHP的HipHop,它可能是迄今为止测试最完善的PHP编译器(它运行着世界十大网站之一)。但是,Facebook不再支持HHVM,后者是虚拟机,而不是编译器。
除此之外,谷歌搜索PHP compiler
提供了许多第三方解决方案。
bcompiler_write_exe_footer()
手册)最简洁的答案是不”。
PHP的当前实现是一种解释语言。您可以争辩任何语言都可以在技术上进行解释或编译的事实的理论方面,但是就目前而言,当前的实现方式是PHP代码需要运行解释器,并且该解释器管理执行环境。
为了回答有关上载预编译的PHP字节码的问题,这可能是可行的,但是您必须实现一种方法,使PHP解释程序可以读取此类文件并使用它。现有的操作码缓存已经存在,这似乎并不会带来很多回报。
include
和和一起正常使用require
?例如,如果通常包含PHP脚本,include( 'controller/' . $controller_name . '.php' )
它将自动与HipHop一起使用吗?欢呼声
The short answer is "no". The current implementation of PHP is that of an interpreted language. You can argue the theoretical aspects…
没有任何理论上的解释,很多解释语言都有编译器。即AutoIt / AutoHotkey,甚至可以追溯到BASIC。其中编写了许多程序,然后将其编译为独立程序供公众使用。没有什么特别的要防止PHP不可编译的,这就是为什么存在大量编译器的原因,但是与AHK不同,没有官方的,经过测试的编译器-Zend Guard并不十分重要。
自从首次提出问题以来,答案已经从完全否定变为“有点”
http://github.com/facebook/hiphop-php/wiki
适用于PHP的Hip Hop是采用PHP代码并将其转换为高度优化的C ++的编译器,显然,不支持某些功能(例如'explode')
我在寻找有关如何实现HipHop的更多信息时发现了这个问题,并以为我会说出来:)
但是,自2013年以来,Facebook不再使用它,并且不再支持HHVM,而HHVM不是编译器:https://en.wikipedia.org/wiki/HipHop_for_PHP
pre-analyze
使用php代码。结果,您得到一个二进制缓存文件。使用此文件和正确的HHVM配置,可以仅使用字节码运行网页,而无需源文件了;)<br>我希望我做对了。
也有
目的是
- 在专有的PHP应用程序中编码整个脚本
- 在专有PHP应用程序中编码一些类和/或函数
- 启用无需客户端php.exe即可生成可在客户端桌面上使用的php-gtk应用程序的功能。
- 对PHP到C转换器进行可行性研究
该扩展可从PECL获得。
phc允许您将PHP程序编译到共享库中,然后可以将其上载到服务器。PHP程序被编译为二进制文件。以支持eval
s,include
s和整个PHP标准库的方式完成。
嗯,有人听说过Zend Guard,正是这个人在问的。它将PHP代码编码/混淆为“机器代码”。
有几个“编译器”的PHP代码。它们中的大多数不支持所有PHP功能,因为这些功能必须在运行时进行解释。
我们正在使用Phalanger- http :它甚至支持那些肮脏的PHP动态功能,并且仍然能够将它们编译为.NET程序集,并可以作为独立的DLL分发。
参见带有集成的OPcache模块的5.5.x,在共享内存中易失,性能更高,并且php的动态原理保持不变。
在php 7中,有php ini选项opcache.file_cache将字节码保存在特定的文件夹中。在php cli脚本中被“编译”并保存在特定文件夹中以进行优化重用可能会很有用。
Opcache它没有编译,但是类似。
PHP并没有像许多程序那样真正被编译。您可以使用Zend的编码器使其不可读。
如果允许您运行真正的本机二进制文件,则这是您的编译器:
https://github.com/ircmaxell/php-compiler
这是一个用PHP 编写的PHP编译器!
它将PHP代码编译为自己的VM代码。然后,可以通过自己的解释器(也用PHP编写,不是很疯狂吗)来解释此VM代码,也可以将其翻译为Bitcode。并使用LLVM编译器框架(clang
和co),可以将该位代码编译为LLVM支持的任何平台的本地二进制文件(几乎是当今重要的任何平台)。您可以选择静态执行此操作,也可以选择每次执行代码之前(JIT样式)。因此,此编译器在您的系统上运行的唯一两个要求是安装的PHP解释器和安装的clang
编译器。
如果不允许运行本机二进制文件,则可以将上面的编译器用作解释器,然后让其解释自己的VM代码,但这会很慢,因为您正在运行本身在PHP引擎上运行的PHP解释器。你有一个“双重解释”。