PHP 확장 개발 - PHP는 C 언어를 사용하여 확장을 개발합니다. zend_parse_parameters 메소드가 바이너리 데이터를 수신하면 데이터를 얻을 수 없습니까?

WBOY
풀어 주다: 2016-10-19 10:40:52
원래의
1208명이 탐색했습니다.

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()이 문자열을 반환하는지 확인해야 할 것 같습니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿