windows10环境使用Zephir编写PHP7.4扩展

概念

Zephir 是一种中间语言,以接近 PHP 的语法来编写代码,然后转换成 PHP 扩展。

准备

在开始之前,需要下载并安装好以下几样东西:

安装Visual Studio 2017

后续很多命令需要在VS 2017的开发人员命令提示符中执行。

关于Visual Studio版本的说明:
编译PHP 7.0+扩展 => Visual Studio 2015
编译PHP 7.2+扩展 => Visual Studio 2017
编译PHP 8.0+扩展 => Visual Studio 2019

我下载的是VS2017社区版,也就是免费版,下载地址:
https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/

安装vs2017注意事项

安装时勾选使用C++的桌面开发

安装PHP7.4

下载PHP7.4,TS版或NTS版均可。至于下载的是哪个版本,意味着后面生成的插件也只能在该版本中使用。
下载地址:http://windows.php.net/download/
本文下载的是PHP7.4 VC15 x64 Thread Safe:

下载后解压至D:\php\dist目录下,解压后如图:

设置环境变量

设置php.ini

D:\php\dist\php-7.4.14-Win32-vc15-x64\php.ini-development复制一份,重命名为php.ini,然后打开php.ini,去掉;extension_dir = "ext"前面的分号,同时去掉以下两行的分号:

extension=fileinfo
extension=mbstring

安装PHP SDK

下载地址:https://github.com/Microsoft/php-sdk-binary-tools/releases

本文下载的是2.2.0版本:

下载后解压至D:\php\sdk目录下,解压后如图:

设置环境变量

新建一个名为PHP_SDK的环境变量,值为:D:\php\sdk

安装PHP Developer Pack

这里注意要跟前面的php版本一致。
下载地址:https://windows.php.net/downloads/releases/
本文下载的是php-devel-pack-7.4.14-Win32-vc15-x64.zip

下载后解压至D:\php\devel-pack目录下,解压后如图:

设置环境变量

新建一个名为PHP_DEVPACK的环境变量,值为:D:\php\devel-pack

安装Zephir

在D:\php目录下新建zephir文件夹,用于安装Zephir

cd D:\php\zephir
composer require phalcon/zephir:dev-master

设置环境变量

在Path中添加一个环境变量,值为:D:\php\zephir\vendor\bin

打开cmd,输入:zephir,显示如下界面则说明Zephir安装成功:

安装Zephir Parser扩展

注意下载的版本需要与前面的php版本一致。
下载地址:https://github.com/phalcon/php-zephir-parser/releases/latest
本文下载的是:zephir_parser_X64_vc15_php7.4_1.3.6-559.zip

下载并解压,将php_zephir_parser.dll文件拷贝至php的扩展目录:D:\php\dist\php-7.4.14-Win32-vc15-x64\ext

然后修改D:\php\dist\php-7.4.14-Win32-vc15-x64\php.ini文件,在文件末尾加入:

extension=zephir_parser

然后打开cmd,输入php -m,显示Zephir Parser则说明扩展安装成功。

创建第一个Zephir扩展

生成扩展骨架

在d:\php目录下创建extension文件夹,用于存放即将要生成的扩展代码。

用管理员身份运行VS 2017的开发人员命令提示符

进入刚创建的扩展目录:d:\php\extension

cd d:\php\extension

通过zephir init命令生成扩展骨架:

zephir init hello

进入D:\php\extension\hello\hello文件夹,编写common.zep,内容如下:

namespace Hello;
class Common
{
    public static function say()
    {
        echo "hello,zephir!";
    }
}

语法跟php几乎一样,唯一不同是没有开始的<?php标记。

编译扩展

回到VS 2017的开发人员命令提示符,进入php-sdk文件夹,执行phpsdk-vc15-x64.bat

cd D:\php\sdk
phpsdk-vc15-x64.bat

执行后,可以看到命令行交互界面前面多了一个$符号:

进入扩展目录,编译扩展:

cd D:\php\extension\hello
zephir compile
cd ext
configure
nmake

执行完以上命令后,在D:\php\extension\hello\ext\x64\Release_TS目录就可以看到生成好的php_hello.dll文件。

测试扩展

将生成的php_hello.dll文件拷贝至D:\php\dist\php-7.4.14-Win32-vc15-x64\ext目录,然后修改D:\php\dist\php-7.4.14-Win32-vc15-x64\php.ini文件,在末尾添加extension=hello

然后打开cmd,输入php -m,显示hello则说明扩展已安装成功。

接着输入:php -r "echo Hello\Common::say();",结果显示hello,zephir!

发表评论

邮箱地址不会被公开。 必填项已用*标注