PHP扩展迁移为兼容PHP7记录
- PHP7扩展编写的时候,提供的一些内核方法和之前的PHP之前的版本并不能完全兼容。有不少方法参数做了调整。下面是在迁移过程中遇到的一些问题。记录下来,避免大家再踩坑。
- PHP7扩展开发之hello word
- 白话PHP7扩展开发之创建对象
- add_assoc_stringl
- 方法参数改为四个。
- add_assoc_stringl(parray, key, value, value_len);
- 迁移的时候,只要把最后一个参数删除即可。
- add_assoc_string
- 方法参数从四个改为了三个。
- add_assoc_stringl(parray, key, value);
- 迁移的时候,只要把最后一个参数删除即可。
- add_next_index_stringl
- 方法参数从四个改为了三个。
- add_next_index_stringl(parray, value, value_len);
- 迁移的时候,只要把最后一个参数删除即可。
- add_next_index_string
- 方法参数从三个改为了两个。
- add_next_index_string(parray, value);
- 迁移的时候,只要把最后一个参数删除即可。
- RETURN_STRINGL
- 方法参数从三个改为了二个。
- RETURN_STRINGL(value, length);
- 迁移的时候,只要把最后一个参数删除即可。
- 错误:‘INT64_MAX’ 在此作用域中尚未声明
- 原因为深入研究。在 #include "php.h" 上面加上一行
- #include <stdint.h>
- #ifndef INT64_MAX
- # define INT64_MAX INT64_C( )
- #endif
- #ifndef INT64_MIN
- # define INT64_MIN (-INT64_C( )-)
- #endif
- 解决。
- 创建类
- 可以参考mysqli扩展mysqli.c文件中的 mysqli_objects_new 方法。
- 变量声明从堆上分配,改为栈上分配。
- 如,原先代码为
- zval* sarray_l;
- ALLOC_INIT_ZVAL(sarray_l);
- array_init(sarray_l);
- 改为
- zval sarray_l;
- array_init(&sarray_l);
- zend_hash_get_current_key_ex
- 方法参数从六个改为了四个。
- ZEND_API int ZEND_FASTCALL zend_hash_get_current_key_ex(const HashTable *ht, zend_string **str_index, zend_ulong *num_index, HashPosition *pos);
- 迁移的时候,只要把第三个和第五个参数删除即可。
- 错误:‘Z_TYPE_PP’ 在此作用域中尚未声明
- 已经没有Z_TYPE_PP宏,只有Z_TYPE 和Z_TYPE_P宏方法的定义。
- <>h2错误:不能从 ‘zend_string*’ 转换到 ‘const char*’
- PHP7中对于字符串的处理使用zend_string进行存储。如果想把zend_string 转为 const char 。需要使用 ZSTR_VAL()宏方法。代码如下:
- zend_string *str;
- char *sptr;
- .....
- sptr = ZSTR_VAL(str);
- 错误:‘IS_BOOL’ 在此作用域中尚未声明
- 已经没有IS_BOOL类型。而是分为了IS_TRUE 和 IS_FALSE.
- 错误:‘Z_BVAL’ 在此作用域中尚未声明
- 已经没有Z_BVAL宏。但是可以通过类型是否是 IS_TRUE和IS_FALSE来判定。如果类型为IS_TRUE,则值为true。如果类型为IS_FALSE则值为false。
- 错误:‘zend_object_store_get_object’ 在此作用域中尚未声明
- 增加如下代码:
- static inline hsf_object *hsf_fetch_object(zend_object *obj) /* {{{ */ {
- return (user_object *)((char*)(obj) - XtOffsetOf(user_object, std));
- }
- /* }}} */
- #define Z_USEROBJ_P(zv) hsf_fetch_object(Z_OBJ_P((zv)))
- 然后把zend_object_store_get_object改为Z_USEROBJ_P即可。注意,user_object是你定义的结构体。
- 原文链接: PHP扩展迁移为兼容PHP7记录 ,转载请注明来源!
PHP扩展迁移为兼容PHP7记录的更多相关文章
- PHP扩展迁移为PHP7扩展兼容性问题记录
PHP7扩展编写的时候,提供的一些内核方法和之前的PHP之前的版本并不能完全兼容.有不少方法参数做了调整.下面是在迁移过程中遇到的一些问题.记录下来,避免大家再踩坑. add_assoc_string ...
- ie6,ie7,ie8 css bug兼容解决记录
ie6,ie7,ie8 css bug兼容解决记录 转载自:ie6,ie7,ie8 css bug兼容解决记录 - 前端开发 断断续续的在开发过程中收集了好多的bug以及其解决的办法,都在这个文章里面 ...
- Oracle数据迁移至HBase操作记录
Oracle数据迁移至HBase操作记录 @(HBase) 近期需要把Oracle数据库中的十几张表T级别的数据迁移至HBase中,过程中遇到了许多苦难和疑惑,在此记录一下希望能帮到一些有同样需求的兄 ...
- YII2.0.12兼容PHP7.2版本升级
YII2.0.12兼容PHP7.2版本升级 报错信息: FastCGI sent in stderr: "PHP message: PHP Fatal error: Cannot use ...
- [PHP] Phalcon应用升级PHP7记录
升级主要有 php7, phalcon, extension 这三个方面工作. [php7] 我选择从 git 中源码包安装,下面是主要安装步骤: git clone -b php- https:// ...
- ie兼容问题记录
工作中遇到的ie网站兼容性问题 头疼.......... 以下为从网上搜索学习的整理兼容性方法 用于自己记录 #兼容问题 ##css hack: https://blog.csdn.net/fres ...
- Django项目的创建与介绍.应用的创建与介绍.启动项目.pycharm创建启动项目.生命周期.三件套.静态文件.请求及数据.配置Mysql完成数据迁移.单表ORM记录的增删改查
一.Django项目的创建与介绍 ''' 安装Django #在cmd中输入pip3 #出现这个错误Fatal error in launcher: Unable to create process ...
- 如何在PHP7中扩展mysql,先安装php7.2。后安装mysql
相对与PHP5,PHP7的最大变化之一是移除了mysql扩展,推荐使用mysqli或者pdo_mysql,实际上在PHP5.5开始,PHP就着手开始准备弃用mysql扩展,如果你使用mysql扩展,可 ...
- Dom兼容问题记录汇总
DOM方法兼容表 Chrome FireFox IE6 IE7 IE8 IE9 IE10 innerText 支持 不支持(改成了textContent) 支持 支持 支持 支持 支持 inner ...
随机推荐
- LN : leetcode 292 Nim Game
lc 292 Nim Game 292 Nim Game You are playing the following Nim Game with your friend: There is a hea ...
- SAP CRM 项目笔记(一) SOW(工作说明书)讨论
前记 前两天在搜索资料时,看到一个网友在博客里面记录下了自己参于项目中的所有笔记.我觉得这个想法很不错,所以决定开笔记录下SAP CRM整个项目的实施和开发过程. 之前参加集团的SAP ERP(FI/ ...
- Java实现多线程邮件发送
利用java多线程技术配合线程池实现多任务邮件发送. 1.基本邮件发送MailSender package hk.buttonwood.ops.email; import java.io.File; ...
- [原创] PostgreSQL Plus Advanced Server在Windows中配置双机热备流复制
一.系统环境 操作系统:Windows Server 2003/2008 两个节点分别为master与slave. 主节点master:172.27.19.28 备机点slave:172.27.19. ...
- hdu 5253 连接的管道
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5253 连接的管道 Description 老 Jack 有一片农田,以往几年都是靠天吃饭的.但是今年老 ...
- hdu 2066 一个人的旅行
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2066 一个人的旅行 Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷 ...
- HTTP上传文件探究
通常情况下,我们想在网页上上传一个文件的时候,会采用<input type="file">标签,但是你有没有想过,为什么通过这样一个标签,服务器端就能获取到文件数据呢? ...
- phpstorm自动对齐数组=>,自动加空格
写完代码后可以点菜单中code-reformat code,快捷键是option+command+L
- Spark 3000门徒第二课scala面向对象总结
昨晚听了王家林老师3000门徒spark系列课程的第二课,讲述了scala面向对象知识,并且带着过了一遍Spark核心类:SparkContent,RDD的代码,下面写一下心得: RDD是抽象类,实现 ...
- ##常用效果css##
1 绝对定位的元素的位置相对于最近的已定位祖先元素,如果元素没有已定位的祖先元素,那么它的位置相对于最初的包含块.元素被设置成,absolute,原有的位置会被占用,设为 relative原位置 ...