这里我们使用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二进制拓展相关推荐

  1. 适合新手:手把手教你用Go快速搭建高性能、可扩展的IM系统(有源码)

    本文为开源工程:"github.com/GuoZhaoran/fastIM"的配套文章,原作者:"绘你一世倾城",现为:猎豹移动php开发工程师,感谢原作者的技 ...

  2. PHP7 学习笔记(七)如何使用zephir编译一个扩展记录

    一.zephir 编译遇到的错误 安装 git clone https://github.com/phalcon/zephir $ cd zephir $ ./install-json $ ./ins ...

  3. 快速编写HTML代码常用的方法

    在前端开发的过程中,一个最繁琐的工作就是写 HTML.CSS 代码.数量繁多的标签.属性.尖括号.标签闭合等,让前端们甚是苦恼.于是,我向大家推荐 Emmet,它提供了一套非常简单的语法规则,书写起来 ...

  4. VS+VAX的提示功能快速编写C51程序

    虽然有智能提示的软件有很多,比如Source Insight.Ultra Edit,但我都不太喜欢.周立功的TKStudio也用过,感觉还行,但还是不太满意. 由于学C#,我的电脑上安装了Visual ...

  5. Zen Coding: 一种快速编写HTML/CSS代码的方法

    译自:Smashing Magazine 中文:Zen Coding: 一种快速编写HTML/CSS代码的方法 请尊重版权,转载请注明来源! 在本文中我们将展示一种新的使用仿CSS选择器的语法来快速开 ...

  6. Emmet:HTML/CSS代码快速编写规范(转发)

    Emmet的前身是大名鼎鼎的Zen coding,如果你从事Web前端开发的话,对该插件一定不会陌生.它使用仿CSS选择器的语法来生成代码,大大提高了HTML/CSS代码编写的速度,比如下面的演示: ...

  7. Emmet插件:HTML/CSS代码快速编写神器

    Emmet插件的前身是大名鼎鼎的Zen coding,如果你从事Web前端开发的话,对该插件一定不会陌生.它使用仿CSS选择器的语法来生成代码,大大提高了HTML/CSS代码编写的速度,比如下面的演示 ...

  8. Sublime Text 3插件之Emmet:HTML/CSS代码快速编写神器

    一.快速编写HTML代码 1.  初始化 HTML文档需要包含一些固定的标签,比如<html>.<head>.<body>等,现在你只需要1秒钟就可以输入这些标签. ...

  9. Emmet:HTML/CSS代码快速编写神器

    本文来源:http://www.iteye.com/news/27580,还可参考:http://www.w3cplus.com/tools/emmet-cheat-sheet.html Emmet的 ...

最新文章

  1. 2018-3-13 目标改动---智能算法
  2. Vivado下几条 Verilog 综合规则
  3. ViewPager+Fragment懒加载
  4. Docker知识4:如何在win10下安装 / 使用ubuntu ?应用WSL2
  5. 删除链表重复节点 python_python无序链表删除重复项的方法
  6. 测试驱动开发–双赢策略
  7. IOT(9)---MQTT 优缺点
  8. [转载收藏]三层式开发中的层次划分
  9. mysql驱动是什么文件_Oracle数据库11g JDBC驱动程序 – 这么多文件?他们的意思是什么?...
  10. 什么事Lut预设_ps预设调色使用教程
  11. LSTM(Long Short Term Memory)和RNN(Recurrent)教程收集 (知乎)
  12. 【读书笔记】--少有人走的路①:心智成熟的旅程
  13. 腾讯企业邮箱只能接受消息不能发送
  14. 浏览器如何使用HTTP防止ip限制
  15. LINE FRIENDS 跨界李宁推出联名系列
  16. Win10 360浏览器打不开特定网站网页,选择兼容模式有时可以,不稳定
  17. JAVA--阿尔法平台编程练习---篮球弹跳
  18. 拯救者R9000P网络不可用问题解决
  19. python工程师求职信_如何写求职信更容易被录用?
  20. 潭州课堂25班:Ph201805201 django 项目 第三十六课 后台文章管理(课堂笔记)

热门文章

  1. magento SEO
  2. jQuery本身方法($.each,$.map,$.contains,$ajax)
  3. 网站是如何跟踪监视你的
  4. 人工智障学习笔记——深度学习(2)卷积神经网络
  5. 部署redis主从复制
  6. DIRECTORY_SEPARATOR
  7. mysql与python交互
  8. 【tensorflow】常量张量的初始化
  9. Collection的使用 字符串保存 java
  10. dj鲜生-34-存档-用户中心地址页重复查询默认地址的优化-利用自定义模型管理器的方法来实现