VS2019 开发PHP 拓展(二)创建空拓展
生成空的拓展
命令行进入 D:\zodream\php-sdk-binary-tools\phpdev\vs16\x64\php-src\ext
这里zodream代表你的php扩展名
vs2019 载入项目
- 打开
Visual Studio 2019
- 选择
继续但无需代码
- 打开菜单
文件
->新建
->从现有代码创建项目
- 选择
Visual C++
下一步 - 项目文件位置(拓展的目录
D:\zodream\php-sdk-binary-tools\phpdev\vs16\x64\php-src\ext\zodream
),项目名称phpzodream
,下一步 - 项目类型选择 动态链接库(DLL)项目,完成
- 菜单栏选配置
Release
x64
- 右键项目
属性
->C/C++
->常规
->附加包含目录
->编辑
,加入目录
D:\zodream\php-sdk-binary-tools\phpdev\vs16\x64\php-src
D:\zodream\php-sdk-binary-tools\phpdev\vs16\x64\php-src\main
D:\zodream\php-sdk-binary-tools\phpdev\vs16\x64\php-src\TSRM
D:\zodream\php-sdk-binary-tools\phpdev\vs16\x64\php-src\Zend
属性
-> C/C++
-> 预处理器
-> 预处理器定义
-> 编辑
加入以下变量(其中ZODREAM
替换成php扩展名
)
如果为开启线程安全 则加上
- 生成
可能报错
- 如果提示
LINK 1561: 必须定义入口点
属性
-> 常规
-> 配置类型
选择 动态库(.dll)
E0020: 未定义标识符arginfo_test1
或者 缺少zodream_arginfo.h
C1083 无法打开包括文件: “zodream_arginfo.h”: No such file or directory
请复制 D:\zodream\php-sdk-binary-tools\phpdev\vs16\x64\php-src\ext\skeleton\skeleton_arginfo.h
为 zodream_arginfo.h
即可
或者在 ext_skel.php
文件中的 copy_sources
方法 加上 'skeleton_arginfo.h' => $options['ext'] . '_arginfo.h'
function copy_sources() {
global $options;
$files = [
'skeleton.c' => $options['ext'] . '.c',
'skeleton.stub.php' => $options['ext'] . '.stub.php',
'php_skeleton.h' => 'php_' . $options['ext'] . '.h',
'skeleton_arginfo.h' => $options['ext'] . '_arginfo.h' // 加上这行就会自动生成
];
}
LNK2019 无法解析的外部符号 __imp_zend_strpprintf
属性
-> 连接器
-> 输入
-> 附加依赖项
-> 编辑
加入一个php.lib
,此文件在正式发布的PHP程序中 例如 D:\zodream\php\php-7.4-nts\dev\php7.lib
E0020 未定义标识符 "zif_test2"
因为定义的方式 PHP_FUNCTION(zodream_test2)
但是引入时用的是 PHP_FE(test2, arginfo_test2)
改为
或者改 D:\zodream\php-sdk-binary-tools\phpdev\vs16\x64\php-src\ext\skeleton\skeleton.c
/* {{{ string test2( [ string $var ] )
*/
PHP_FUNCTION(test2)
{
char *var = "World";
size_t var_len = sizeof("World") - 1;
zend_string *retval;
ZEND_PARSE_PARAMETERS_START(0, 1)
Z_PARAM_OPTIONAL
Z_PARAM_STRING(var, var_len)
ZEND_PARSE_PARAMETERS_END();
retval = strpprintf(0, "Hello %s", var);
RETURN_STR(retval);
}
使用
这是在正式时使用
把生成的 phpzodream.dll
复制到正式环境 ext
文件夹下,
修改 php.ini
引入插件
重启 iis
当前为测试时
按【上一章】编译 php 即可,不需要在ini配置,直接使用即可
在php 代码加入
查看效果
转载请保留原文链接: https://zodream.cn/blog/id/102.html