Windows10使用Zephir开发PHP8.1扩展
参考
- https://github.com/zephir-lang/zephir (zephir官方库)
- https://github.com/zephir-lang/zephir/blob/development/WINDOWS.md (zephir windows 说明)
- chatgpt
- https://www.80shihua.com/archives/2535 (linux下使用Zephir开发扩展)
- https://zhuanlan.zhihu.com/p/24611638 (在 windows 下使用 zephir 写 php7 扩展,包含php_devpack下载地址,php_sdk下载地址)
- https://blog.csdn.net/jason19905/article/details/113483962 (windows10环境使用Zephir编写PHP7.4扩展)
- https://zhuanlan.zhihu.com/p/60764142 (使用 Zephir 轻松构建 PHP 扩展)
- https://blog.csdn.net/jiqiren_dasheng/article/details/103775488 (MinGW-w64 C/C++编译器下载和安装)
- https://blog.csdn.net/StudyOgre/article/details/89057590 (Visual Studio 2019 下载地址)
- https://github.com/zephir-lang/zephir/issues/2019 (检测配置问题)
- https://github.com/zephir-lang/zephir/issues/1564
- https://github.com/zephir-lang/zephir/issues/1154
- https://github.com/microsoft/php-sdk-binary-tools/releases/tag/php-sdk-2.2.0 (php_sdk,测试直接git clone https://github.com/microsoft/php-sdk-binary-tools/没有bison.exe)
遇到的问题
- 直接命令行执行zephir build提示找不到ext\configure.js
 不可以直接在命令行执行该命令,需要在 Visual Studio 2019 的命令行执行。
- 提示 nmake 不被识别。
 需要在 Visual Studio 2019 的命令行执行。
- phpize 不被识别。
 将 php_devpack 加入到系统变量。
- Using unknown MSVC version 19.36.32537
 一开始下载的是 Visual Studio 2022,切换到 Visual Studio 2019 并在 Visual Studio 2019 的命令行执行命令。
- 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
- 检测配置问题
 进入 init 项目目录,本文章是 hello.
# 进入ext
cd hello/ext
# 检测配置是否正确
configure
- php_sdk停止更新了。
- error LNK2001: 无法解析的外部符号 __imp__php_info_print_table_row
 Visual Studio 2019 命令行开始使用的是 x86_x64, 后面切换为与php一致的 x64。
- 打包错误详情可以通过init创建的项目中的compile-errors.log查看.
- 配置完毕后还是不行就重启下。
环境
| 软件/系统 | 版本 | 说明 | 
|---|---|---|
| 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 扩展 | 
步骤
准备工作
- 下载 php ,将 php 加入系统 PATH。
- 开启 php 扩展(在zephir composer install的时候会提示需要哪些扩展):
extension=gmp
extension=pdo_sqlite
- 下载 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

- 下载 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
- 安装 Visual Studio 2019,并开启使用 C++ 的桌面开发:

- 下载 Zephir Parser ,解压压缩包,将php_zephir_parser.dll放到 php 的ext目录中,修改php.ini开启扩展。修改完毕后可以用过命令行php -m查看是否正常开启扩展。
[Zephir Parser]
extension=php_zephir_parser.dll
- 下载 zephir ,执行依赖安装命令,安装完毕后加入到系统PAYH。加入完成后可以通过命令行测试是否成功。
# zephir目录下手动执行安装依赖
composer install
# 手动加入系统PATH
C:\xxxx\zephir-0.17.0
# 命令行测试是否正常安装
> zephir
 _____              __    _
/__  /  ___  ____  / /_  (_)____
  / /  / _ \/ __ \/ __ \/ / ___/
 / /__/  __/ /_/ / / / / / /
/____/\___/ .___/_/ /_/_/_/
         /_/
Zephir 0.17.0 by Andres Gutierrez and Serghei Iakovlev (source)
...
编写与打包
- vs code 安装扩展 Zephir for VSCode.
- 创建项目
zephir init hello
- 编写代码 项目目录\hello\hello.zep
namespace Hello;
class hello
{
    public static function say()
    {
        echo "hello world";
    }
}
- 打开 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
- 将生成的 C:\xxxx\hello\ext\x64\Release_TS\php_hello.dll添加到 php 的ext目录下,并在php.ini启用扩展:
extension=hello
- 命令行查看扩展是否启用:
php -m
测试结果
- 创建 demo.php
<?php
\Hello\hello::say();
- 命令行运行
# 执行
php demo.php
# 输出
hello world
    博  主 :夏秋初
地 址 :https://www.cnblogs.com/xiaqiuchu/p/17869327.html
 
如果对你有帮助,可以点一下 推荐 或者 关注 吗?会让我的分享变得更有动力~
转载时请带上原文链接,谢谢。
    
地 址 :https://www.cnblogs.com/xiaqiuchu/p/17869327.html
如果对你有帮助,可以点一下 推荐 或者 关注 吗?会让我的分享变得更有动力~
转载时请带上原文链接,谢谢。
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号