PHP扩展开发中,有一个方法需要接收二进制数据,zend_parse_parameters设置参数类型为 "s",打印参数的时候为空,看样子是没有接收到。
PHP_FUNCTION(hau_socket) { char *buf; int len; if( zend_parse_parameters( ZEND_NUM_ARGS() TSRMLS_CC, "s", &buf, &len) == FAILURE ) { return; } php_printf("str:%s, buf length:%d, len:
", buf, strlen(buf), len); }
<?php $packet = new SocketPacket();//使用pack函数打包进制数据 $packet->WriteBegin( 0x7070 ); $packet->WriteInt_N( 0x1001 ); $packet->WriteInt_N( 1 ); $packet->WriteInt_N(9055249); $packet->WriteEnd_n(); hau_socket( $packet->GetPacketBuffer() );
输出结果:str:, buf length:0, len:
是否参数类型设置不对!?
付费偷看金额在0.1-10元之间
从
zend_parse_parameters
的使用上没有发现问题,并且你printf
时也没有报空指针,说明buf
确实被赋值了。我觉得你应该检查一下$packet->GetPacketBuffer()
是否返回了一个字符串。你先在php里
php_printf那一行是不是少了个%d,最后的len没有打印出来。
然后,接收二进制数据你不应该也不能用strlen。
打印参数的时候为空是正常的,因为你传入的是二进制数据(有NULL)。
还有,如果你一定要打印二进制数据,应该用PHPWRITE(buf, len)。
看这里http://php.net/manual/pl/inte...
输出一下他的值吧,扩展部分没毛病。。
一周热门 更多>