zephir 编译php,使用Zephir来快速编写高性能PHP二进制拓展
这里我们使用Docker来安装我们的开发环境,docker的安装参考官方文档https://docs.docker.com/install/
使用Docker安装Zephir编译器
首先就是根据我们目标PHP版本拉取对应的Zephir编译器镜像,这里我们PHP版本是7.0,于是使用这条命令:
docker pull phalconphp/zephir:7.0
然后创建/usr/local/bin/zephir文件,文件内容如下:
#!/usr/bin/env bash
docker_bin="$(which docker 2> /dev/null)"
# 5.4, 5.5, 5.6, 7, 7.0, latest
PHP_VERSION=7.0
${docker_bin} run -it --rm \
--privileged=true \
-e ZEND_DONT_UNLOAD_MODULES=1 \
-v $(pwd):/zephir \
phalconphp/zephir:${PHP_VERSION} "$@"
ret=$?
if [ ${ret} -ne 0 ]; then
errors="$(pwd)/compile-errors.log"
if [ -e ${errors} ]; then
cat ${errors}
fi
fi
对这个文件加上可执行权限:
sudo chmod a+x /usr/local/bin/zephir
这样我们就装好了Zephir编译器:
$zephir version
0.9.7
创建一个PHP二进制库项目
这里我们创建的项目名叫做utils,使用Zephir脚手架初始化项目代码:
zephir init utils
编写一个zep文件:
$ cat utils/utils/greeting.zep
namespace Utils;
class Greeting
{
public static function say()
{
echo "hello world!\n";
}
}
编译这个项目
$cd utils
$ls
config.json ext utils
$zephir build
这样我们就得到了我们编译的so库文件:ext/modules/utils.so
测试以及使用这个so库文件
通过php -i | grep extension_dir得到我们PHP拓展so文件的安装目录是:/usr/lib/php/20151012/下面,于是2条命令完成cli模式PHP的拓展安装,fpm模式也类似,(通过php -i | grep 'Scan this dir for additional .ini files'获取ini配置文件目录):
sudo \cp ext/modules/utils.so /usr/lib/php/20151012/
echo "extension=utils.so" | sudo tee /etc/php/7.0/cli/conf.d/30-zephir-dev.ini
最后我们,写个PHP文件来测试下这个so库是否安装成功:
$cat > test.php <<_eof>
$obj = new Utils\Greeting();
var_dump($obj);
Utils\Greeting::say();
_EOF
$php test.php
得到结果:
object(Utils\Greeting)#1 (0) {
}
hello world!
参考
zephir 编译php,使用Zephir来快速编写高性能PHP二进制拓展相关推荐
- 适合新手:手把手教你用Go快速搭建高性能、可扩展的IM系统(有源码)
本文为开源工程:"github.com/GuoZhaoran/fastIM"的配套文章,原作者:"绘你一世倾城",现为:猎豹移动php开发工程师,感谢原作者的技 ...
- PHP7 学习笔记(七)如何使用zephir编译一个扩展记录
一.zephir 编译遇到的错误 安装 git clone https://github.com/phalcon/zephir $ cd zephir $ ./install-json $ ./ins ...
- 快速编写HTML代码常用的方法
在前端开发的过程中,一个最繁琐的工作就是写 HTML.CSS 代码.数量繁多的标签.属性.尖括号.标签闭合等,让前端们甚是苦恼.于是,我向大家推荐 Emmet,它提供了一套非常简单的语法规则,书写起来 ...
- VS+VAX的提示功能快速编写C51程序
虽然有智能提示的软件有很多,比如Source Insight.Ultra Edit,但我都不太喜欢.周立功的TKStudio也用过,感觉还行,但还是不太满意. 由于学C#,我的电脑上安装了Visual ...
- Zen Coding: 一种快速编写HTML/CSS代码的方法
译自:Smashing Magazine 中文:Zen Coding: 一种快速编写HTML/CSS代码的方法 请尊重版权,转载请注明来源! 在本文中我们将展示一种新的使用仿CSS选择器的语法来快速开 ...
- Emmet:HTML/CSS代码快速编写规范(转发)
Emmet的前身是大名鼎鼎的Zen coding,如果你从事Web前端开发的话,对该插件一定不会陌生.它使用仿CSS选择器的语法来生成代码,大大提高了HTML/CSS代码编写的速度,比如下面的演示: ...
- Emmet插件:HTML/CSS代码快速编写神器
Emmet插件的前身是大名鼎鼎的Zen coding,如果你从事Web前端开发的话,对该插件一定不会陌生.它使用仿CSS选择器的语法来生成代码,大大提高了HTML/CSS代码编写的速度,比如下面的演示 ...
- Sublime Text 3插件之Emmet:HTML/CSS代码快速编写神器
一.快速编写HTML代码 1. 初始化 HTML文档需要包含一些固定的标签,比如<html>.<head>.<body>等,现在你只需要1秒钟就可以输入这些标签. ...
- Emmet:HTML/CSS代码快速编写神器
本文来源:http://www.iteye.com/news/27580,还可参考:http://www.w3cplus.com/tools/emmet-cheat-sheet.html Emmet的 ...
最新文章
- 2018-3-13 目标改动---智能算法
- Vivado下几条 Verilog 综合规则
- ViewPager+Fragment懒加载
- Docker知识4:如何在win10下安装 / 使用ubuntu ?应用WSL2
- 删除链表重复节点 python_python无序链表删除重复项的方法
- 测试驱动开发–双赢策略
- IOT(9)---MQTT 优缺点
- [转载收藏]三层式开发中的层次划分
- mysql驱动是什么文件_Oracle数据库11g JDBC驱动程序 – 这么多文件?他们的意思是什么?...
- 什么事Lut预设_ps预设调色使用教程
- LSTM(Long Short Term Memory)和RNN(Recurrent)教程收集 (知乎)
- 【读书笔记】--少有人走的路①:心智成熟的旅程
- 腾讯企业邮箱只能接受消息不能发送
- 浏览器如何使用HTTP防止ip限制
- LINE FRIENDS 跨界李宁推出联名系列
- Win10 360浏览器打不开特定网站网页,选择兼容模式有时可以,不稳定
- JAVA--阿尔法平台编程练习---篮球弹跳
- 拯救者R9000P网络不可用问题解决
- python工程师求职信_如何写求职信更容易被录用?
- 潭州课堂25班:Ph201805201 django 项目 第三十六课 后台文章管理(课堂笔记)
热门文章
- magento SEO
- jQuery本身方法($.each,$.map,$.contains,$ajax)
- 网站是如何跟踪监视你的
- 人工智障学习笔记——深度学习(2)卷积神经网络
- 部署redis主从复制
- DIRECTORY_SEPARATOR
- mysql与python交互
- 【tensorflow】常量张量的初始化
- Collection的使用 字符串保存 java
- dj鲜生-34-存档-用户中心地址页重复查询默认地址的优化-利用自定义模型管理器的方法来实现