当前位置:  开发笔记 > 编程语言 > 正文

你能"编译"PHP代码吗?

如何解决《你能"编译"PHP代码吗?》经验,为你挑选了7个好方法。

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

但是你可以"编译"php并上传一个二进制文件,它只能由字节码解释器运行吗?



1> Frank Farmer..:

在提出这个问题之后,Facebook推出了HipHop for PHP,这可能是迄今为止经过最佳测试的PHP编译器(因为它运行了世界上最大的10个网站之一).然而,Facebook停止使用HHVM,这是一个虚拟机,而不是编译器.

除此之外,谷歌搜索引发PHP compiler了许多第三方解决方案.

Phalanger

GitHub(下载),维基百科

编译成.NET(CIL)

PHC

编译为本机二进制文件

现在不太活跃(2014年2月) - 2011年最后一个版本,2013年夏天的最后一次变化

Roadsend PHP编译器

GitHub,重写的GitHub

PHP的免费开源实现与编译器

编译为本机二进制文件(Windows,Linux)

从2010年开始停止,直到贡献者找到 - 网站关闭,停留在GitHub上,最后一次更改是从2012年初开始

字节码编译

PECL扩展PHP

试验

编译为PHP字节码,但可以将其包装在加载PHP解释器的Windows二进制文件中(参见bcompiler_write_exe_footer()手册)

现在看来已停止(2014年2月) - 2011年的最后一次变化

零项目

维基百科,IBM

WebSphere sMash的变更孵化器

由IBM提供支持

编译为Java字节码

看起来已经停止了(2014年2月) - 网站倒闭,看起来像2008年和2009年的大炒作

Bambalam

编译为独立的Windows二进制文件

二进制文件包含字节码和启动器

现在看来已停止(2014年2月) - 2006年的最后一次变化

BinaryPHP

编译成C++

现在看来已停止(2014年2月) - 2003年的最后一次变化


@sємsєм这取决于您的主机,但如果我不得不猜测,我猜许多主机不会允许它.
以上这些项目似乎都不再维护.自过去两年以来是否有一个普遍接受的编译器,或者为什么所有这些项目都被忽视/放弃?

2> zombat..:

最简洁的答案是不".

PHP的当前实现是解释语言的实现.您可以论证任何语言在技术上可以被解释或编译的事实的理论方面,但就目前而言,当前的实现使得PHP代码需要运行解释器,并且解释器管理执行环境.

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


这个答案已经过时了 - HipHop在2010年2月发布后6个月发布.
通常情况下,您需要一个解释器来正确运行PHP程序,但这并不意味着编译器无法在编译的代码中提供它.phc(phpcompiler.org)处理你描述的所有问题.据我所知,Roadsend(roadsend.com)也是如此.
实际上你可以使用常规的PHP编译器编译PHP代码.它只取决于目标平台; 你可以编译成Zend操作码,C语言或.NET程序集(使用Phalanger http://www.php-compiler.net)

3> Alex C..:

自从第一次提出这个问题以来,从"不"到"不是"这个问题的答案发生了变化.

http://github.com/facebook/hiphop-php/wiki

Hip Hop for PHP是一个编译器,它使用PHP代码并将其转换为高度优化的C++显然,某些功能不受支持(例如'explode')

我在寻找有关如何实施HipHop的更多信息的过程中发现了这个问题,并认为我会说出来:)

然而,自2013年以来,Facebook不再使用它,并且已经停止使用HHVM,而HHVM不是编译器:https://en.wikipedia.org/wiki/HipHop_for_PHP


这就是facebook我相信的用途

4> Gordon..:

还有

PHP的(实验性)bcompiler扩展,

目的

在专有的PHP应用程序中编码整个脚本

在专有PHP应用程序中编码某些类和/或函数

能够生成可以在客户端桌面上使用的php-gtk应用程序,而无需php.exe.

进行PHP到C转换器的可行性研究

该扩展可从PECL获得.



5> Paul Biggar..:

phc允许您将PHP程序编译为共享库,可以将其上载到服务器.PHP程序被编译成二进制文件.它以支持evals,includes和整个PHP标准库的方式完成.



6> asiby..:

如果您只是想从PHP脚本中生成二进制可执行文件,那么请避免尝试使您的问题非常精确,因为它会使您看起来确切地知道您需要什么.此外,大多数PHP开发人员对字节码的含义绝对不了解.

话虽如此,答案是肯定的.我刚刚将PHP脚本编译成二进制文件.而不只是任何二进制文件.我已经使用了CDE应用程序(链接到Wayback Machine,原来的链接现已被破坏)将其转换为可移植的二进制文件,可以与所有依赖项一起分发并执行而没有任何问题...并且它工作得很漂亮.

您只需要使用phc.



7> 小智..:

嗯,任何人都听说过Zend Guard,这正是这个人所要求的.它将PHP代码编码/混淆为"机器代码".

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有