1. PHP7扩展编写的时候,提供的一些内核方法和之前的PHP之前的版本并不能完全兼容。有不少方法参数做了调整。下面是在迁移过程中遇到的一些问题。记录下来,避免大家再踩坑。
  2.  
  3. PHP7扩展开发之hello word
  4.  
  5. 白话PHP7扩展开发之创建对象
  6. add_assoc_stringl
  7.  
  8. 方法参数改为四个。
  9.  
  10. add_assoc_stringl(parray, key, value, value_len);
  11.  
  12. 迁移的时候,只要把最后一个参数删除即可。
  13.  
  14. add_assoc_string
  15.  
  16. 方法参数从四个改为了三个。
  17.  
  18. add_assoc_stringl(parray, key, value);
  19.  
  20. 迁移的时候,只要把最后一个参数删除即可。
  21.  
  22. add_next_index_stringl
  23.  
  24. 方法参数从四个改为了三个。
  25.  
  26. add_next_index_stringl(parray, value, value_len);
  27.  
  28. 迁移的时候,只要把最后一个参数删除即可。
  29.  
  30. add_next_index_string
  31.  
  32. 方法参数从三个改为了两个。
  33.  
  34. add_next_index_string(parray, value);
  35.  
  36. 迁移的时候,只要把最后一个参数删除即可。
  37.  
  38. RETURN_STRINGL
  39.  
  40. 方法参数从三个改为了二个。
  41.  
  42. RETURN_STRINGL(value, length);
  43.  
  44. 迁移的时候,只要把最后一个参数删除即可。
  45.  
  46. 错误:‘INT64_MAX 在此作用域中尚未声明
  47.  
  48. 原因为深入研究。在 #include "php.h" 上面加上一行
  49.  
  50. #include <stdint.h>
  51. #ifndef INT64_MAX
  52. # define INT64_MAX INT64_C( )
  53. #endif
  54. #ifndef INT64_MIN
  55. # define INT64_MIN (-INT64_C( )-)
  56. #endif
  57. 解决。
  58.  
  59. 创建类
  60.  
  61. 可以参考mysqli扩展mysqli.c文件中的 mysqli_objects_new 方法。
  62.  
  63. 变量声明从堆上分配,改为栈上分配。
  64.  
  65. 如,原先代码为
  66.  
  67. zval* sarray_l;
  68. ALLOC_INIT_ZVAL(sarray_l);
  69. array_init(sarray_l);
  70. 改为
  71.  
  72. zval sarray_l;
  73. array_init(&sarray_l);
  74. zend_hash_get_current_key_ex
  75.  
  76. 方法参数从六个改为了四个。
  77.  
  78. ZEND_API int ZEND_FASTCALL zend_hash_get_current_key_ex(const HashTable *ht, zend_string **str_index, zend_ulong *num_index, HashPosition *pos);
  79.  
  80. 迁移的时候,只要把第三个和第五个参数删除即可。
  81.  
  82. 错误:‘Z_TYPE_PP 在此作用域中尚未声明
  83.  
  84. 已经没有Z_TYPE_PP宏,只有Z_TYPE Z_TYPE_P宏方法的定义。
  85.  
  86. <>h2错误:不能从 zend_string*’ 转换到 const char*’
  87.  
  88. PHP7中对于字符串的处理使用zend_string进行存储。如果想把zend_string 转为 const char 。需要使用 ZSTR_VAL()宏方法。代码如下:
  89.  
  90. zend_string *str;
  91. char *sptr;
  92. .....
  93. sptr = ZSTR_VAL(str);
  94. 错误:‘IS_BOOL 在此作用域中尚未声明
  95.  
  96. 已经没有IS_BOOL类型。而是分为了IS_TRUE IS_FALSE.
  97.  
  98. 错误:‘Z_BVAL 在此作用域中尚未声明
  99.  
  100. 已经没有Z_BVAL宏。但是可以通过类型是否是 IS_TRUEIS_FALSE来判定。如果类型为IS_TRUE,则值为true。如果类型为IS_FALSE则值为false
  101.  
  102. 错误:‘zend_object_store_get_object 在此作用域中尚未声明
  103.  
  104. 增加如下代码:
  105.  
  106. static inline hsf_object *hsf_fetch_object(zend_object *obj) /* {{{ */ {
  107. return (user_object *)((char*)(obj) - XtOffsetOf(user_object, std));
  108. }
  109. /* }}} */
  110. #define Z_USEROBJ_P(zv) hsf_fetch_object(Z_OBJ_P((zv)))
  111. 然后把zend_object_store_get_object改为Z_USEROBJ_P即可。注意,user_object是你定义的结构体。
  112.  
  113. 原文链接: PHP扩展迁移为兼容PHP7记录 ,转载请注明来源!

PHP扩展迁移为兼容PHP7记录的更多相关文章

  1. PHP扩展迁移为PHP7扩展兼容性问题记录

    PHP7扩展编写的时候,提供的一些内核方法和之前的PHP之前的版本并不能完全兼容.有不少方法参数做了调整.下面是在迁移过程中遇到的一些问题.记录下来,避免大家再踩坑. add_assoc_string ...

  2. ie6,ie7,ie8 css bug兼容解决记录

    ie6,ie7,ie8 css bug兼容解决记录 转载自:ie6,ie7,ie8 css bug兼容解决记录 - 前端开发 断断续续的在开发过程中收集了好多的bug以及其解决的办法,都在这个文章里面 ...

  3. Oracle数据迁移至HBase操作记录

    Oracle数据迁移至HBase操作记录 @(HBase) 近期需要把Oracle数据库中的十几张表T级别的数据迁移至HBase中,过程中遇到了许多苦难和疑惑,在此记录一下希望能帮到一些有同样需求的兄 ...

  4. YII2.0.12兼容PHP7.2版本升级

    YII2.0.12兼容PHP7.2版本升级 报错信息: FastCGI sent in stderr: "PHP message: PHP Fatal error:  Cannot use ...

  5. [PHP] Phalcon应用升级PHP7记录

    升级主要有 php7, phalcon, extension 这三个方面工作. [php7] 我选择从 git 中源码包安装,下面是主要安装步骤: git clone -b php- https:// ...

  6. ie兼容问题记录

    工作中遇到的ie网站兼容性问题  头疼.......... 以下为从网上搜索学习的整理兼容性方法 用于自己记录 #兼容问题 ##css hack: https://blog.csdn.net/fres ...

  7. Django项目的创建与介绍.应用的创建与介绍.启动项目.pycharm创建启动项目.生命周期.三件套.静态文件.请求及数据.配置Mysql完成数据迁移.单表ORM记录的增删改查

    一.Django项目的创建与介绍 ''' 安装Django #在cmd中输入pip3 #出现这个错误Fatal error in launcher: Unable to create process ...

  8. 如何在PHP7中扩展mysql,先安装php7.2。后安装mysql

    相对与PHP5,PHP7的最大变化之一是移除了mysql扩展,推荐使用mysqli或者pdo_mysql,实际上在PHP5.5开始,PHP就着手开始准备弃用mysql扩展,如果你使用mysql扩展,可 ...

  9. Dom兼容问题记录汇总

    DOM方法兼容表   Chrome FireFox IE6 IE7 IE8 IE9 IE10 innerText 支持 不支持(改成了textContent) 支持 支持 支持 支持 支持 inner ...

随机推荐

  1. 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 ...

  2. SAP CRM 项目笔记(一) SOW(工作说明书)讨论

    前记 前两天在搜索资料时,看到一个网友在博客里面记录下了自己参于项目中的所有笔记.我觉得这个想法很不错,所以决定开笔记录下SAP CRM整个项目的实施和开发过程. 之前参加集团的SAP ERP(FI/ ...

  3. Java实现多线程邮件发送

    利用java多线程技术配合线程池实现多任务邮件发送. 1.基本邮件发送MailSender package hk.buttonwood.ops.email; import java.io.File; ...

  4. [原创] PostgreSQL Plus Advanced Server在Windows中配置双机热备流复制

    一.系统环境 操作系统:Windows Server 2003/2008 两个节点分别为master与slave. 主节点master:172.27.19.28 备机点slave:172.27.19. ...

  5. hdu 5253 连接的管道

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5253 连接的管道 Description 老 Jack 有一片农田,以往几年都是靠天吃饭的.但是今年老 ...

  6. hdu 2066 一个人的旅行

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2066 一个人的旅行 Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷 ...

  7. HTTP上传文件探究

    通常情况下,我们想在网页上上传一个文件的时候,会采用<input type="file">标签,但是你有没有想过,为什么通过这样一个标签,服务器端就能获取到文件数据呢? ...

  8. phpstorm自动对齐数组=>,自动加空格

    写完代码后可以点菜单中code-reformat code,快捷键是option+command+L

  9. Spark 3000门徒第二课scala面向对象总结

    昨晚听了王家林老师3000门徒spark系列课程的第二课,讲述了scala面向对象知识,并且带着过了一遍Spark核心类:SparkContent,RDD的代码,下面写一下心得: RDD是抽象类,实现 ...

  10. ##常用效果css##

    1    绝对定位的元素的位置相对于最近的已定位祖先元素,如果元素没有已定位的祖先元素,那么它的位置相对于最初的包含块.元素被设置成,absolute,原有的位置会被占用,设为 relative原位置 ...