Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Erweiterungsentwicklung - PHP verwendet die C-Sprache, um Erweiterungen zu entwickeln: Wenn die Methode zend_parse_parameters Binärdaten empfängt, kann sie die Daten nicht abrufen?

PHP-Erweiterungsentwicklung - PHP verwendet die C-Sprache, um Erweiterungen zu entwickeln: Wenn die Methode zend_parse_parameters Binärdaten empfängt, kann sie die Daten nicht abrufen?

WBOY
WBOYOriginal
2016-10-19 10:40:521208Durchsuche

In der PHP-Erweiterungsentwicklung gibt es eine Methode, die den Parametertyp „zend_parse_parameters“ auf „s“ setzt.

<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>
<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>
<code>输出结果:str:, buf length:0, len:
</code>

Ist die Einstellung des Parametertyps falsch? ?

Antwortinhalt:

In der PHP-Erweiterungsentwicklung gibt es eine Methode, die den Parametertyp „zend_parse_parameters“ auf „s“ setzt.

<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>
<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>
<code>输出结果:str:, buf length:0, len:
</code>

Ist die Einstellung des Parametertyps falsch? ?

Bei der Verwendung von zend_parse_parameters wurden keine Probleme festgestellt, und beim printf wurde kein Nullzeiger gemeldet, was darauf hinweist, dass buf tatsächlich ein Wert zugewiesen wurde. Ich denke, Sie sollten prüfen, ob $packet->GetPacketBuffer() eine Zeichenfolge zurückgibt.

Stellungnahme:
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