這裡我們使用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!
";
}
}
編譯這個專案
$cd utils
$ls
config.json ext utils
$zephir build
這樣我們就得到了我們編譯的so庫檔案:ext/modules/utils.so
測試以及使用這個so庫檔案
通過php -i
得到我們PHP擴充so檔案的安裝目錄是:/usr/lib/php/20151012/
下面,於是2條命令完成cli模式PHP的擴充安裝,fpm模式也類似:
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!