php扩展开发 - PHP使用C语言开发扩展中:zend_parse_parameters方法接收二进制数据时取不到数据?
本文介绍了php扩展开发 - PHP使用C语言开发扩展中:zend_parse_parameters方法接收二进制数据时取不到数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
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:%d\n", buf, strlen(buf), len); //这里的输出跟原来一样
PHPWRITE(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:21
是否参数类型设置不对!?
解决方案
php_printf那一行是不是少了个%d,最后的len没有打印出来。
然后,接收二进制数据你不应该也不能用strlen。
打印参数的时候为空是正常的,因为你传入的是二进制数据(有NULL)。
还有,如果你一定要打印二进制数据,应该用PHPWRITE(buf, len)。
看这里http://php.net/manual/pl/inte...
这篇关于php扩展开发 - PHP使用C语言开发扩展中:zend_parse_parameters方法接收二进制数据时取不到数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文