这里我们使用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 Utils\Greeting();
var_dump($obj);
Utils\Greeting::say();
_EOF
$php test.php
得到结果:
object(Utils\Greeting)#1 (0) {
}
hello world!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。