我知道PHP在服务器上运行之前被编译为字节代码,然后字节代码可以被缓存,这样整个脚本就不必在每次web访问时重新解释。
但是,您能否“编译”PHP代码并上传一个二进制文件,该文件将由字节码解释器运行?
我知道PHP在服务器上运行之前被编译为字节代码,然后字节代码可以被缓存,这样整个脚本就不必在每次web访问时重新解释。
但是,您能否“编译”PHP代码并上传一个二进制文件,该文件将由字节码解释器运行?
当前回答
PHP不像许多程序那样真正被编译。您可以使用Zend的编码器使其不可读。
其他回答
简短的回答是“不”。
PHP的当前实现是一种解释性语言。您可以从理论上论证任何语言在技术上都可以被解释或编译的事实,但就目前的情况而言,当前的实现是PHP代码需要一个解释器才能运行,解释器管理执行环境。
要回答关于上传预编译的PHP字节码的问题,这可能是可行的,但必须实现一种方法,让PHP解释器读取这样的文件并使用它。由于已有的操作码缓存已经存在,这似乎不是一个会获得太多回报的任务。
PHP不像许多程序那样真正被编译。您可以使用Zend的编码器使其不可读。
在php 7中有php ini选项opcache。File_cache,用于将字节码保存到指定文件夹中。In可能对In php cli脚本有用,这些脚本被“编译”并保存在特定的文件夹中,以便优化重用。
Opcache,它不是编译,而是类似的东西。
在回答了这个问题之后,Facebook为PHP推出了HipHop,这可能是迄今为止测试最好的PHP编译器(因为它运行的是世界上最大的10个网站之一)。然而,Facebook为了支持HHVM而停止了它,HHVM是一个虚拟机,而不是编译器。
除此之外,谷歌PHP编译器会出现许多第三方解决方案。
PeachPie
PeachPie GitHub 编译PHP到。net和。net核心 可以编译成自包含二进制文件 运行在Mac, Linux, Windows, Windows核心,ARM,…
袋貂
GitHub(下载),Wikipedia 编译到。net (CIL)从2017年7月开始停产,似乎不支持PHP 7。
phc
编译为本地二进制文件 现在不是很活跃(2014年2月)-上一个版本在2011年,最后一次更改在2013年夏天
Roadsend PHP编译器
GitHub的一个重写 免费的,开源的PHP编译器实现 编译为本地二进制文件(Windows, Linux) 自2010年停用,直到贡献者发现-网站关闭,留在GitHub上,上一次更改是在2012年初
b编译器
PHP的PECL扩展 实验 编译为PHP字节码,但可以将其包装为加载PHP解释器的Windows二进制文件(参见bcompiler_write_exe_footer()手册) 现在已经停产了(2014年2月)——2011年最后一次更换
Project Zero
维基百科,IBM WebSphere sMash的变化孵化器 IBM支持 编译成Java字节码 现在看起来已经停止了(2014年2月)-网站关闭,看起来像2008年和2009年的大炒作
Bambalam
编译成独立的Windows二进制文件 二进制文件包含字节码和启动器 现在已经停产了(2014年2月)——2006年最后一次更换
二进制PHP
编译为c++ 现在看来已经停产了(2014年2月)——上一次更换是在2003年
Actually, the Just-In-Time compiler introduced with PHP 8 does in fact compile PHP. Strangely enough, it doesn't really speed up CMS based websites (e.g. WordPress), however, it does open the doors for PHP to compete with the likes of C++. For more information, see the RFC behind the JIT implementation here: https://wiki.php.net/rfc/jit. Also, Matthew Weir O'Phinney has posted a number of insightful blogs that shed light on its capabilities. Start reading here: https://www.zend.com/blog/exploring-new-php-jit-compiler.