PHP编译器BPC新里程碑达成: 可以编译web应用了!

不清楚BPC是什么的参看这里:

开发了一年多的 PHP 编译器 BPC 初见成效,发一些测试程序给大家看看

PHP编译器BPC的第一个成功案例来了!

新里程碑

在过去的3个多月里,我们完成了apache2 module mod_bpc的开发,使得bpc可以将php web项目编译成动态链接库文件(.so)加载到apache2里,像mod_php那样运行.

扩展方面,我们实现了session,spl,pdo,pdo_mysql,pdo_sqlite,filter.

php方面,我们改写了phpunit,使之能够编译运行.

mod_bpc提供web访问,session管理用户状态,pdo连接数据库,phpunit测试保障.到此,php web开发的最小核心都ready了.

php web项目展示

两年前,我写了一本电子书 《PHPUnit in Action — The Easy Way》.

这本书通过一个完整的实战项目介绍了云招 OurATS 11 年来实践 PHPUnit/DbUnit 的经验.

这个实战项目是一个极简的blog项目,但麻雀虽小,五脏俱全,包含了用户注册/激活/登录/退出/文章的CURD/打标签/上传文件等功能及相应的测试方法.

这里我使用bpc将其编译成动态链接库,给大家展示下bpc编译的web项目是什么样子的.

该项目的php源码在这里: github.com/heguangyu5/PHPUnit-in-A...

由于php代码最终被编译成了动态链接库,所以运行此项目不需要php环境.

以下假设我们在一台全新的 Ubuntu 18.04 amd64 server 上部署此项目.

第一步: 安装apache2和mysql server

sudo apt install apache2 mysql-server

由于apache默认启用了module mpm_event,而我们需要mpm_prefork,所以切换下.

sudo a2dismod mpm_event
sudo a2enmod mpm_prefork

第二步: 创建our_blog数据库

wget https://www.ourats.com/bpc/ourblog/our_blog.sql
sudo mysql < our_blog.sql

第三步: 安装bpc runtime及扩展

bpc的pdo_mysql扩展基于libmysqlclient实现,所以需要先安装libmysqlclient.

sudo apt install libmysqlclient20
wget https://www.ourats.com/bpc/ourblog/bpc-common-2.0.tar.gz
sudo tar -C / -zxf bpc-common-2.0.tar.gz

第四步: 安装并启用mod_bpc

wget https://www.ourats.com/bpc/ourblog/libapache2-mod-bpc.tar.gz
sudo tar -C / -zxf libapache2-mod-bpc.tar.gz
sudo ldconfig
sudo a2enmod bpc

第五步: 部署ourblog项目

wget https://www.ourats.com/bpc/ourblog/libourblog_u-4.4a.so
sudo mv libourblog_u-4.4a.so /usr/local/lib/

配置 /usr/local/etc/bpc.conflibourblog_u-4.4a.so 以 web lib 加载.

sudo vi /usr/local/etc/bpc.conf
# 最后一行 (web-libs bpctest) 改为
(web-libs ourblog)

配置apache虚拟主机

wget https://www.ourats.com/bpc/ourblog/bpc.ourblog.me.conf
sudo mv bpc.ourblog.me.conf /etc/apache2/sites-available/
sudo mkdir /var/www/bpc.ourblog.me
sudo touch /var/www/bpc.ourblog.me/index.php
sudo mkdir /var/www/bpc.ourblog.me/upload
sudo chown www-data:www-data /var/www/bpc.ourblog.me/upload
sudo a2enmod rewrite
sudo a2ensite bpc.ourblog.me.conf
sudo systemctl restart apache2

修改本机 /etc/hosts 将 bpc.ourblog.me 指向 Ubuntu 18.04 amd64 server 的IP地址.

浏览器访问 bpc.ourblog.me 即可.

要想进一步使用各个功能,需要点击Sign Up注册一个帐号,然后去数据库mail_queue表中找到激活链接激活帐号.然后就可以点击Sign In登录到后台进行文章的CURD操作.文件上传在 admin/upload.php页面.

到此,一个bpc编译的极简的php web项目就运行起来了.

关于phpunit

phpunit可以很好地保障编译后的php代码和php本身运行效果一致.

《PHPUnit in Action — The Easy Way》 的读者可以下载 sync-test-db.sh run-testrun-all-tests-bpc.sh 试一下.

运行这几个程序需要 《PHPUnit in Action — The Easy Way》中构建的 mysql-3307,所以如果你没有环境就不用试了.

运行效果如下:

wget https://www.ourats.com/bpc/ourblog/sync-test-db.sh
wget https://www.ourats.com/bpc/ourblog/run-test
wget https://www.ourats.com/bpc/ourblog/run-all-tests-bpc.sh
chmod a+x sync-test-db.sh run-test run-all-tests-bpc.sh
mkdir -p ./OurBlog/Upload
wget -O OurBlog/Upload/ourats.png https://www.ourats.com/css/img/logo-white.png
./sync-test-db.sh
./run-all-tests-bpc.sh

=== Run Reg,Activate ===

PHPUnit 4.8.36 by Sebastian Bergmann and contributors.

.....................

Time: 98 ms, Memory: 26.84MB

OK (21 tests, 41 assertions)

=== Run BaseDbTablesInit ===

PHPUnit 4.8.36 by Sebastian Bergmann and contributors.

.

Time: 33 ms, Memory: 17.54MB

OK (1 test, 1 assertion)

=== Run Others ===

PHPUnit 4.8.36 by Sebastian Bergmann and contributors.

.........................................

Time: 208 ms, Memory: 43.46MB

OK (41 tests, 75 assertions)
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!