php扩展开发 - PHP使用C语言开发扩展中:zend_parse_parameters方法接收二进制数据时取不到数据?

WBOY
Freigeben: 2016-10-19 10:40:52
Original
1174 Leute haben es durchsucht

PHP扩展开发中,有一个方法需要接收二进制数据,zend_parse_parameters设置参数类型为 "s",打印参数的时候为空,看样子是没有接收到。

<code class="c">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:\n", buf, strlen(buf), len);

}</code>
Nach dem Login kopieren
Nach dem Login kopieren
<code><?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() );</code>
Nach dem Login kopieren
Nach dem Login kopieren
<code>输出结果:str:, buf length:0, len:
</code>
Nach dem Login kopieren
Nach dem Login kopieren

是否参数类型设置不对!?

回复内容:

PHP扩展开发中,有一个方法需要接收二进制数据,zend_parse_parameters设置参数类型为 "s",打印参数的时候为空,看样子是没有接收到。

<code class="c">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:\n", buf, strlen(buf), len);

}</code>
Nach dem Login kopieren
Nach dem Login kopieren
<code><?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() );</code>
Nach dem Login kopieren
Nach dem Login kopieren
<code>输出结果:str:, buf length:0, len:
</code>
Nach dem Login kopieren
Nach dem Login kopieren

是否参数类型设置不对!?

zend_parse_parameters的使用上没有发现问题,并且你printf时也没有报空指针,说明buf确实被赋值了。我觉得你应该检查一下$packet->GetPacketBuffer()是否返回了一个字符串。

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!