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