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