php扩展开发
_xiaoxiong
这个作者很懒,什么都没留下…
展开
-
PHP源码中EXPECTED和UNEXPECTED的作用
经常能在源码中很多分支条件判断加了这两个宏,了解具体的作用。例如: if (UNEXPECTED(Z_TYPE_P(member) != IS_STRING)) { ZVAL_COPY(&tmp_member, member); convert_to_string(&tmp_member); member = &tmp_member; cache_slot = NULL; }#if PHP_HAVE_BUILTIN_EXPECT# define EXPEC原创 2020-06-15 11:28:38 · 1026 阅读 · 0 评论 -
解决VS Code报检测到#include错误,请更新includepath的问题
使用VScode 开发php扩展时,提示"检测到#include错误,请更新includepath"执行 gcc -v -E -x c++ - #include "..." search starts here: #include <...> search starts here: /Applications/Xcode.app/Contents/Developer/T...原创 2020-01-12 09:24:26 · 55585 阅读 · 14 评论 -
php内核数组(HashTable)实现方式
数组是php重要的部分,内核中也有大量使用。一起来看看是如何实现的吧。php7中数组类型分为packed、hash数组。packed 数组:key 为顺序数字,索引数组。hash 数组:key为字符串,关键数组。下面主要是hash数组的插入、更新、及hash 冲突时解决方法。zend_array 组成部分typedef struct _Bucket { zval ...原创 2019-12-09 17:55:20 · 351 阅读 · 0 评论 -
生成一个gdb回溯调试php内核及扩展的方法
生成一个gdb回溯 注意到PHP崩溃 有没有绝对的方式知道PHP崩溃,但可能有迹象。通常情况下,如果你访问一个总是应该生成输出的页面(例如,有一个前导HTML块),并且突然从浏览器中获得“Document contains no data”,这可能意味着PHP在执行脚本。另一种告诉PHP崩溃的方法是查看Apache错误日志,寻找SEGV(Apache 1.2)或Segmentation Faul翻译 2018-01-03 17:21:08 · 498 阅读 · 0 评论 -
PHP7内部函数的参数是如何解析的
由于使用yaf框架Yaf_Response_Http::getHeader没有相关的文档只能查看源码确认。通过源码可以看出有一个非必参参数。结果这个例子学习下内核中传参数的方法。PHP内核函数使用zend_parse_parameters()将实际参数的值接收到C变量中。此函数使用scanf()方法进行参数定义。由包含说明符列表的字符串定义的所需数据的数量和类型(“s” - 表示字符串,“l”...原创 2019-04-03 15:03:26 · 1025 阅读 · 0 评论 -
怎么解决在Mac系统升级后phpize出错的问题
每次升级Max系统后总会出现一些问题,这次升级到10.15.1版后,编译php扩展时出现如下问题。grep: /usr/include/php/main/php.h: No such file or directorygrep: /usr/include/php/Zend/zend_modules.h: No such file or directorygrep: /usr/include/...原创 2019-11-07 22:28:52 · 2519 阅读 · 0 评论 -
在Windows上编译PHP及扩展的方法
在windows下编译php扩展官方文档查看官方文档环境安装安装Visual Studio官方下载Visul Studio下载php源码官网下载编译环境准备执行下面命令phpsdk-vc15-x64.batoutput[vcvarsall.bat] Environment initialized for: 'x64'PHP SDK 2.2.1-devOS arc...原创 2019-10-23 14:52:28 · 4062 阅读 · 1 评论 -
php扩展调用其他扩展函数
在扩展开发中,并不是所有的功能都需要自已去实现 。可以调用一些其他扩展已经实现的函数。调用内核标准函数如下面是调用php_string_tolower的过程。引入头文件#include "ext/standard/php_string.h"然后可以直接使用引入文件中的PHPAPI 开头的标准函数。如下:PHP_FUNCTION(rsautil_test1){ zend_str...原创 2019-10-30 14:42:03 · 882 阅读 · 0 评论 -
VLD扩展使用方法
VLD(Vulcan Logic Dumper)是一个挂钩在Zend引擎下, 并且输出PHP脚本生成的中间代码(OPCode)的扩展。 它可以在一定程序上查看Zend引擎内部的一些实现原理。VLD扩展是一个开源的项目下载地址<?php$start = new DateTime();echo $start->format("Y-m-d H:i:s");使用VLD查看OPCod...原创 2019-04-20 10:22:47 · 1022 阅读 · 0 评论 -
php扩展编译nts的方法
最近编译一个扩展遇到很多问题,始终不成功。经过努力查找解决方法,终于解决了。编译完扩展测试执行测试文件出现下面提示[root@localhost sample]# /home/php7/bin/php sample.php Warning: dl(): sample: Unable to initialize moduleModule compiled with build ID=API20151原创 2017-07-31 18:24:17 · 2304 阅读 · 0 评论 -
如何开发php扩展
[root@localhost ext]# ./ext_skel --extname=hehe[root@localhost ext]# cd hehe[root@localhost hehe]# vim config.m4[root@localhost hehe]# vim php_hehe.h extern zend_module_entry hehe_module_entry;PHP原创 2017-07-28 18:18:18 · 356 阅读 · 0 评论