使用Zephir來快速編寫高性能PHP二進制拓展

這裏咱們使用Docker來安裝咱們的開發環境,docker的安裝參考官方文檔 https://docs.docker.com/install/

使用Docker安裝Zephir編譯器

首先就是根據咱們目標PHP版本拉取對應的Zephir編譯器鏡像,這裏咱們PHP版本是7.0,因而使用這條命令:php

docker pull phalconphp/zephir:7.0

而後建立/usr/local/bin/zephir文件,文件內容以下:html

#!/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

對這個文件加上可執行權限:docker

sudo chmod a+x /usr/local/bin/zephir

這樣咱們就裝好了Zephir編譯器:json

$zephir version
0.9.7

建立一個PHP二進制庫項目

這裏咱們建立的項目名叫作utils,使用Zephir腳手架初始化項目代碼:bash

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.soui

測試以及使用這個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配置文件目錄):this

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庫是否安裝成功:spa

$cat > test.php <<_EOF
<?php
$obj = new Utils\Greeting();
var_dump($obj);
Utils\Greeting::say();

_EOF

$php test.php

獲得結果:code

object(Utils\Greeting)#1 (0) {
}
hello world!

參考

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

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

相關文章
相關標籤/搜索