使用Zephir来快速编写高性能PHP二进制拓展

发布时间:2019-08-07 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了使用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
<?php
$obj = new UtilsGreeting();
var_dump($obj);
UtilsGreeting::say();

_EOF

$php test.php

得到结果:

object(UtilsGreeting)#1 (0) {
}
hello world!

参考

https://hub.docker.com/r/phal...

https://docs.zephir-lang.com/...

脚本宝典总结

以上是脚本宝典为你收集整理的使用Zephir来快速编写高性能PHP二进制拓展全部内容,希望文章能够帮你解决使用Zephir来快速编写高性能PHP二进制拓展所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。