PHP 编译器 BPC 6.2 发布,直接编译 PHP 文件为 web server!

314 天前
 heguangyu5

不了解 BPC 是什么的可以翻看之前的帖子.

简言之,BPC 可以将 PHP 代码最终转译成 C 语言,然后编译成动态链接库或者可执行程序,实现 PHP Native AOT.

apache2 mod_bpc

在 BPC 6.2 之前,要想发布 web 应用,需要将 php 文件编译成.so,然后由 BPC 提供的 apache2 module mod_bpc 加载,借由 apache 对外提供服务,详见 07_mod_bpc.

althttpd/althttpd-tls

Althttpd 是 https://sqlite.org/ 背后的 webserver, 其简介如下:

Althttpd is a simple webserver that has run the https://sqlite.org/ website since 2004. Althttpd strives for simplicity, security, and low resource usage.

As of 2022, the althttpd instance for sqlite.org answers about 500,000 HTTP requests per day (about 5 or 6 per second) delivering about 200GB of content per day (about 18 megabits/second) on a $40/month Linode. The load average on this machine normally stays around 0.5. About 10% of the HTTP requests are CGI to various Fossil source-code repositories.

详见 Althttpd: The Althttpd Webserver.

Althttpd 源码只有一个 c 文件,我们将其改造,然后将 BPC 最终转译出来的.c 和 althttpd.c 编译在一起,于是一个全新的 web server 诞生了!

如果编译时再加上 --static 选项,那么最终交付时,就一个可执行文件,包含了 web server + php 逻辑 + js/css/image 等静态资源, 非常便捷!

BPC Playground

BPC 官网 https://bpc.dev Try it Online ( BPC Playground ) 已经支持将合适的项目编译成 althttpd, 感兴趣的可以试一试!

2363 次点击
所在节点    PHP
25 条回复
vitovan
314 天前
下一步就是 WebAssembly 了吧。
happy321
314 天前
workerman 全是原生的 建议把这个的兼容性弄好一点? 把一项做精。
可以去 workerman.net 发帖 大家都需要这个工具
CodeCodeStudy
314 天前
老哥能坚持下来不容易啊
heguangyu5
314 天前
@happy321

BPC 已经成功编译了 workerman 和 GatewayWorker,并且我们自己基于 GatewayWorker 的聊天应用已经发布到了线上,bpc.dev 上的那个 online compiler 也是用 wokerman 做的.

但是普通的 web 项目和 workerman/webman 还是有区别的,编译成 althttpd 的 php 代码里,逻辑和使用 php-fpm 或者 mod_php 是一样的,exit/die 该怎么用就怎么用,echo/var_dump 也一样会显示在页面里,而不是终端上.

由于编译的关系,每次请求当然不需要解释 php 源码了,并且 class 的定义也可以做到只加载一次,相当于 workerman/webman 说的常驻内存了.

这样,我们可以正常写 php 页面,经 BPC 编译后,又能获得额外的一些好处.
rm0gang0rf
314 天前
主流框架能编不
heguangyu5
313 天前
@rm0gang0rf 举个例子,你想编译哪个框架?

能否编译一般考虑两方面:

1. 框架用到的 php 语言/语法特性 BPC 是否支持.

BPC 不支持 trait,generator,reflection.比如 thinkphp,我 grep 了一下 trait,发现 think-orm 目录下有一些文件用到了 trait,那么要想编译 thinkphp 可能需要的改动就要大一些.

2. 框架用到的扩展 BPC 是否已经实现了.

一般来说,BPC 的扩展开发相比 php 扩展要容易很多,所以扩展未实现不是什么大问题.但是如果框架用到的扩展 BPC 还没有实现,显然你自己编译不了.需要 BPC 实现了扩展之后才能编译成功.

其它的一般都是些小改动,比如__DIR__ __FILE__之类的.

另外,如果框架有比较完善的 phpunit 测试用例的话,会有非常好的质量保障.

以下几个项目可供参考,你可以浏览 git commit log,看下为了 BPC 编译需要做哪些调整:

1. https://github.com/bob-php-compiler/zf1
2. https://github.com/bob-php-compiler/bpc-workerman-4.1-branch
3. https://github.com/bob-php-compiler/bpc-GatewayWorker-3.x-branch
chenjia404
313 天前
这个有没有使用案例呢?
heguangyu5
313 天前
@chenjia404 目前整个 BPC 就我们自己的项目在用,之前都是 apache+mod_bpc 发布的,很快线上都会升级成 nginx + althttpd 形式的,毕竟只有一个文件,部署起来方便很多.

我们的项目大多是 toB 的,不方便分享.近期有一个刚上线的 toC 微信小程序"中实国际集团",你可以微信里搜一下,后端就是 BPC 编译的,在线聊天是 BPC 编译的 GatewayWorker/workerman.
jry
313 天前
啥时候支持下 thinkphp 大佬
chenjia404
313 天前
@heguangyu5 #8 感觉需要一些 to c 的用户,然后用户多了,就有更多人开发者参加。
heguangyu5
313 天前
@jry 我没用 thinkphp 开发过项目,对 thinkphp 不熟.现在来说是要调整 thinkphp 的代码来让 BPC 编译成功.如果你手里有真实的项目需求,我可以提供一些帮助.
love51money
313 天前
支持 BPC ,应该出一个小白的入门教程,这样可以吸引更多的开发者,毕竟,PHP 是最好的语言,数量众多。🐶
jry
313 天前
@heguangyu5 thinkphp 有 trait 不支持,需要去修改 thinkphp 源码吗?
learningman
313 天前
wordpress 能工作吗,这种运行时有插件的应该跑不了吧
heguangyu5
313 天前
@jry

除了非常简单的 php 程序,不可避免都要进行一些修改,毕竟编译后是一个二进制包括了所以逻辑,编译前是分目录和文件的.

不过我看 https://github.com/top-think/framework 只有 tests 里有一个 trait, 当然 think-orm 里多一些.
但是简单的情况下, trait 就是在 use 的位置插入 trait 的代码而已, 所以调整起来应该还好.
jry
313 天前
@heguangyu5 改源码怕不稳定,话说 23 年是 AOT 元年啊,springboot/dotnet 都出 AOT 了,再也不用缓慢的运行时,PHP 官方跟进下就好了。
mrpzx001
313 天前
比 static-php 多了代码保护的作用?
heguangyu5
313 天前
@learningman

没有尝试编译过,但应该没问题. 插件可以编译成一个个的.so, 然后调用 dl()函数加载进来.
因为 BPC 的目标是源码保护,而不是性能,所以 php 的动态特性该有的都实现了.
happy321
313 天前
kphp 的 mysql redis 都要重新开发,你这个是直接使用原生的吗?
大佬 能不能自己实现服务器,类似 swow workerman libuv 那样,既能加密又能引入一些高并发的东西
heguangyu5
313 天前
@mrpzx001 BPC 的核心目标是两个,一是源码保护,二是软件授权.

另外 BPC 重新实现了 php 的 runtime 和每一个扩展函数,部署出去时,服务器上是没有 php 运行环境的,就相当于是 C 写的程序,只不过是 php 转译的.但是从外部看,所有表现都很像 php.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/952783

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX