Heim > Backend-Entwicklung > PHP-Tutorial > 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
Freigeben: 2016-10-19 10:40:52
Original
1239 Leute haben es durchsucht

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

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

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.

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