首頁  >  文章  >  後端開發  >  php擴充開發 - PHP使用C語言開發擴充功能中:zend_parse_parameters方法接收二進位資料時取不到資料?

php擴充開發 - PHP使用C語言開發擴充功能中:zend_parse_parameters方法接收二進位資料時取不到資料?

WBOY
WBOY原創
2016-10-19 10:40:521176瀏覽

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

是否參數類型設定不對! ?

回覆內容:

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

是否參數類型設定不對! ?

zend_parse_parameters的使用上沒有發現問題,並且你printf時也沒有報空指針,說明buf確實被賦值了。我覺得你應該檢查一下$packet->GetPacketBuffer()是否回傳了一個字串。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn