我知道PHP在服务器上运行之前被编译为字节代码,然后字节代码可以被缓存,这样整个脚本就不必在每次web访问时重新解释。
但是,您能否“编译”PHP代码并上传一个二进制文件,该文件将由字节码解释器运行?
我知道PHP在服务器上运行之前被编译为字节代码,然后字节代码可以被缓存,这样整个脚本就不必在每次web访问时重新解释。
但是,您能否“编译”PHP代码并上传一个二进制文件,该文件将由字节码解释器运行?
当前回答
见5.5。使用集成的OPcache模块,在共享内存中的易失性,更好的性能和php的动态原则保持不变。
http://www.php.net/manual/en/opcache.installation.php
其他回答
简短的回答是“不”。
PHP的当前实现是一种解释性语言。您可以从理论上论证任何语言在技术上都可以被解释或编译的事实,但就目前的情况而言,当前的实现是PHP代码需要一个解释器才能运行,解释器管理执行环境。
要回答关于上传预编译的PHP字节码的问题,这可能是可行的,但必须实现一种方法,让PHP解释器读取这样的文件并使用它。由于已有的操作码缓存已经存在,这似乎不是一个会获得太多回报的任务。
有人听说过Zend Guard吗,它的功能正是这个人想要的。它将PHP代码编码/混淆为“机器代码”。
在php 7中有php ini选项opcache。File_cache,用于将字节码保存到指定文件夹中。In可能对In php cli脚本有用,这些脚本被“编译”并保存在特定的文件夹中,以便优化重用。
Opcache,它不是编译,而是类似的东西。
还有bcgen (bcompiler的一个PHP7端口):
https://github.com/vjardin/bcgen/
(仅PHP7.2)
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.