首先要知道, ZEND_NUM_ARGS()宏定义可以得到参数的个数。

参数解析函数:

int zend_parse_parameters(int num_args TSRMLS_DC, char *type_spec, …);

第一个参数num_args表明了我们想要接收的参数个数,一般都使用ZEND_NUM_ARGS() 来表示对传入的参数“有多少要多少”,如果有特殊需求,可以自己直接指定。第二参数应该总是宏 TSRMLS_CC 。第三个参数 type_spec 是一个字符串,用来指定我们所期待接收的各个参数的类型,有点类似于 printf 中指定输出格式的那个格式化字符串。剩下的参数就是我们用来接收PHP参数值的变量的指针。需要说明的一点是:zend_parse_parameters中如果声明了一个字符串类型,那么后面对应的参数将是两个,第一个代表字符串,第二个代表字符串长度。如果声明了一个指定类型的对象实例,那么后面对应的参数也是两个,第一个代表对象,第二个代表对象的类型。

type_spec 的各类型表示如下:

• l – 长整数

• d – 双精度浮点数

• s – 字符串(也可能是空字节)和其长度

• b – 布尔值

• r – 资源, 保存在 zval*

• a – 数组, 保存在 zval*

• o – (任何类的)对象, 保存在 zval*

• O – (由class entry 指定的类的)对象, 保存在 zval*

• z – 实际的 zval*

| – 表明剩下的参数都是可选参数。

/ – 表明参数解析函数将会对剩下的参数以 SEPARATE_ZVAL_IF_NOT_REF()

的方式来提供这个参数的一份拷贝, 除非这些参数是一个引用。

! – 表明剩下的参数允许被设定为 NULL(仅用在a、o、O、r和z身上)。

下边给几个例子,自己体会下:

阅读全文

首先是必需组件的安装。 有三个,vim的DBGp插件,php的xdebug扩展,Chrome浏览器的xdebug helper扩展。 一: vim 安装 dbgp client 插件 下载 DBGp client二:PHP安装xdebug扩展 具体安装方法就不讲了,网上例子很多.官方安装说明. 我把我的配置信息贴出来: sudo vim /home/s/apps/php-5.2.6/etc/include/xdebug.ini 其中需要注意的是有注释的地方,不自动开启profile和trace,因为这样每次请求都会保存相应信息,会把磁盘爆掉的。把触发器打开,这样,只有在请求的时候带特定信息的时候,才会记录相应的性能信息。触发器的实现机制是:在请求时,如果GET/POST/COOKIE信息中包含特定的变量,会开启对应的debug,profile或trace,所以我们可以通过在web中访问页面时,添加对应的变量来开启相应的功能。如果每次都自己拼接这个,也挺麻烦,所以会介绍后边的xdebug helper的chrome扩展,想开启任何一个功能的时候,点击一下扩展就可以了。也就是说,这个扩展不是调试必须的,但是会让你感觉用起来很方便。 三:chrome扩展xdebug helper 地址:https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc 如果在 chrome://apps里搜索xdebug helper搜索不到,记得把你的语言改为 English. xdebug helper两处配置要注意, IDE Key要注意选择Other, 值为1,然后保存。 第二个是domain白名单,如果不希望每个页面都出调试的debug icon,就把开发时的域名填进来,比如localhost神马的。其实icon很小,也不太碍事,可以不用设置。 开始使用: 如果不要debug调试,只是需要记录profile和trace信息,看一下性能问题,那么很简单,直接在chrome访问对应的url,会在url右侧看到一个xdebg helper 的小icon,点击后,选择 profile或trace,再刷新,就可以在预先设置的目录见到对应的文件了。 cachegrind* 是profile的文件,trace* 是trace的文件。 在windows下使用WinCacheGrind可以方便的查看profile的信息。 最后,是如何开启远程调试. 用vim编辑程序文件,在需要中断的地方使用:Bp命令打上断点。然后按F5执行监听。 这个时候,vim会提示 waiting for a new connection on port 9000 for 5 seconds… ,所以这个时候你需要在5s内向服务端发起带中断的请求,在前边的url地址,我们把xdebug helper的debug选择上,刷新页面,vim就会进入中断了。右侧有相关提示,我们就可以按GDB的方式逐步调试啦。如果没有安装xdebug helper,也无所谓,自己手动在url上拼接一个参数: &XDEBUG_SESSION_START=1 也可以开启远程调试的。

阅读全文

使用 sudo rm -rf *.sst 删除文件时,出现如下提示: sudo: unable to execute /bin/rm: Success 出现这种错误时,是由于*匹配的文件太多导致的。 所以需要换个方式来删除 使用sh -c 表示对整条命令使用sudo权限.

阅读全文

nodejs HTTPS发起POST请求

准备用nodejs搞一个快速注册163邮箱的东西,需要在某一步的时候post数据到https,node的官方文档实在太简陋了,网上找了个差不多的例子,拿来改了改用。

阅读全文

自己在尝试写一个简单的hashTable的时候,报错: hashTable.h: In function ‘hash_resize’: hashTable.h:40: 警告:隐式声明与内建函数 ‘calloc’ 不兼容 hashTable.h: In function ‘hash_init’: hashTable.h:65: 警告:隐式声明与内建函数 ‘calloc’ 不兼容 解决办法就是需要包含一个头文件:

阅读全文

结构体-struct是把若干个数据类型组合到一起,相当于形成一个结构类型,这样的结构体变量就拥有结构体所包含的所有的数据类型。

结构体所占用的内存单元是它里面包含数据类型所占内存单元的总和。

联合体-union是为了节省内存而设置的,若干个不同数据类型共用一组内存单元。

联合体所占的内存单元是它所包含的数据类型中占用内存单元最大的那个数据类型所占用的内存单元的值。

struct和union都是由多个不同的数据类型成员组成, 但在任何同一时刻, union中只存放了一个被选中的成员, 而struct的所有成员都存在。

对于union的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于struct的不同成员赋值是互不影响的。

阅读全文

/proc/sys/net/ipv4/icmp_timeexceed_rate

这个在traceroute时导致著名的“Solaris middle star”。这个文件控制发送ICMP Time Exceeded消息的比率。

/proc/sys/net/ipv4/igmp_max_memberships

主机上最多有多少个igmp (多播)套接字进行监听。

/proc/sys/net/ipv4/inet_peer_gc_maxtime

求 助: Add a little explanation about the inet peer storage? Minimum interval between garbage collection passes. This interval is in effect under low (or absent) memory pressure on the pool. Measured in jiffies.

/proc/sys/net/ipv4/inet_peer_gc_mintime

每一遍碎片收集之间的最小时间间隔。当内存压力比较大的时候,调整这个间隔很有效。以jiffies计。

/proc/sys/net/ipv4/inet_peer_maxttl

entries的最大生存期。在pool没有内存压力的情况下(比如,pool中entries的数量很少的时候),未使用的entries经过一段时间就会过期。以jiffies计。

/proc/sys/net/ipv4/inet_peer_minttl

entries的最小生存期。应该不小于汇聚端分片的生存期。当pool的大小不大于inet_peer_threshold时,这个最小生存期必须予以保证。以jiffies计。

/proc/sys/net/ipv4/inet_peer_threshold

The approximate size of the INET peer storage. Starting from this threshold entries will be thrown aggressively. This threshold also determines entries’ time-to-live and time intervals between garbage collection passes. More entries, less time-to-live, less GC interval.

/proc/sys/net/ipv4/ip_autoconfig

这个文件里面写着一个数字,表示主机是否通过RARP、BOOTP、DHCP或者其它机制取得其IP配置。否则就是0。

/proc/sys/net/ipv4/ip_default_ttl

数据包的生存期。设置为64是安全的。如果你的网络规模巨大就提高这个值。不要因为好玩而这么做——那样会产生有害的路由环路。实际上,在很多情况下你要考虑能否减小这个值。

阅读全文

作者的图片

DigDeeply

Technology Stack: Golang/PHP/Openresty, and so on…

Web Development Engineer

Beijing China