Windows10使用Zephir开发PHP8.1扩展

参考

遇到的问题

  1. 直接命令行执行zephir build提示找不到 ext\configure.js
    不可以直接在命令行执行该命令,需要在 Visual Studio 2019 的命令行执行。
  2. 提示 nmake 不被识别。
    需要在 Visual Studio 2019 的命令行执行。
  3. phpize 不被识别。
    将 php_devpack 加入到系统变量。
  4. Using unknown MSVC version 19.36.32537
    一开始下载的是 Visual Studio 2022,切换到 Visual Studio 2019 并在 Visual Studio 2019 的命令行执行命令。
  5. bison is required
    直接 clonse 的 https://github.com/microsoft/php-sdk-binary-tools ,这里面好像没有 bison.exe,最后通过指定版本下载解决的。https://github.com/microsoft/php-sdk-binary-tools/releases/tag/php-sdk-2.2.0g
  6. 检测配置问题
    进入 init 项目目录,本文章是 hello.
# 进入ext
cd hello/ext
# 检测配置是否正确
configure
  1. php_sdk停止更新了。
  2. error LNK2001: 无法解析的外部符号 __imp__php_info_print_table_row
    Visual Studio 2019 命令行开始使用的是 x86_x64, 后面切换为与php一致的 x64。
  3. 打包错误详情可以通过init创建的项目中的compile-errors.log 查看.
  4. 配置完毕后还是不行就重启下。

环境

软件/系统 版本 说明
windows 10
php 8.1.9-Win32-vs16-x64
php_sdk php-sdk-binary-tools-php-sdk-2.2.0 已停止更新 下载
php_devpack php-8.1.26-devel-vs16-x64 下载
composer 2.4.4 下载
Visual Studio Visual Studio 2019 下载
zephir zephir-0.17.0 下载
zephir-parser zephir_parser-php-8.1-ts-windows2019-vs16-x64 下载
vs code 1.84.2
Zephir for VSCode v1.6.3 vs code 扩展

步骤

准备工作

  1. 下载 php ,将 php 加入系统 PATH。
  2. 开启 php 扩展(在zephir composer install 的时候会提示需要哪些扩展):
extension=gmp
extension=pdo_sqlite
  1. 下载 php_sdk ,加入系统变量与系统PATH。(注意,需要加到两个地方,一个是系统变量,一个是系统PATH中)
# 系统PATH
C:\xxxx\php-sdk-binary-tools-php-sdk-2.2.0\bin
C:\xxxx\php-sdk-binary-tools-php-sdk-2.2.0\msys2\usr\bin
# 系统变量
php_sdk C:\xxx\php-sdk-binary-tools-php-sdk-2.2.0

image

  1. 下载 php_devpack,将路径加入到系统PATH与系统变量:

这一步是安装 phpize

# 加入系统PATH
C:\xxxx\php-8.1.26-devel-vs16-x64

# 加入系统变量
php_devpack C:\xxxx\php-8.1.26-devel-vs16-x64
  1. 安装 Visual Studio 2019,并开启使用 C++ 的桌面开发:

image

  1. 下载 Zephir Parser ,解压压缩包,将php_zephir_parser.dll放到 php 的 ext目录中,修改 php.ini开启扩展。修改完毕后可以用过命令行 php -m 查看是否正常开启扩展。
[Zephir Parser]
extension=php_zephir_parser.dll
  1. 下载 zephir ,执行依赖安装命令,安装完毕后加入到系统PAYH。加入完成后可以通过命令行测试是否成功。
# zephir目录下手动执行安装依赖
composer install
# 手动加入系统PATH
C:\xxxx\zephir-0.17.0
# 命令行测试是否正常安装
> zephir
 _____              __    _
/__  /  ___  ____  / /_  (_)____
  / /  / _ \/ __ \/ __ \/ / ___/
 / /__/  __/ /_/ / / / / / /
/____/\___/ .___/_/ /_/_/_/
         /_/

Zephir 0.17.0 by Andres Gutierrez and Serghei Iakovlev (source)
...

编写与打包

  1. vs code 安装扩展 Zephir for VSCode.
  2. 创建项目
zephir init hello
  1. 编写代码 项目目录\hello\hello.zep
namespace Hello;

class hello
{
    public static function say()
    {
        echo "hello world";
    }
}
  1. 打开 Visual Studio 2019 命令行 x64 Native Tools Command Prompt for VS 2019,我的 php 版本是 x64,所以使用 x64 的命令行(x86_x64命令行测试失败)。
# 每一行都是单独一个命令
%PHP_SDK%\bin\phpsdk_setvars
# 进入 init 项目的目录内
cd hello
# 打包
zephir build
  1. 将生成的 C:\xxxx\hello\ext\x64\Release_TS\php_hello.dll 添加到 php 的 ext 目录下,并在 php.ini 启用扩展:
extension=hello
  1. 命令行查看扩展是否启用:
php -m

测试结果

  1. 创建 demo.php
<?php
\Hello\hello::say();
  1. 命令行运行
# 执行
php demo.php
# 输出
hello world
posted @   夏秋初  阅读(239)  评论(1编辑  收藏  举报
点击右上角即可分享
微信分享提示