> 백엔드 개발 > PHP 튜토리얼 > PHP 5.6에서 PHP 확장을 작성하는 간단한 예 version_php 팁

PHP 5.6에서 PHP 확장을 작성하는 간단한 예 version_php 팁

WBOY
풀어 주다: 2016-05-16 20:25:36
원래의
1090명이 탐색했습니다.

PHP 자체에 요구사항을 충족하는 API가 없는 경우에는 해당 확장을 직접 작성해야 하는 경우가 있습니다. 확장이 작성된 후 이를 컴파일하고 자체 개발 환경에 추가하여 PHP의 기능을 확장하세요.

다음은 문자열과 정수 숫자를 연결하는 연결 작업의 간단한 확장입니다.

먼저 최신 PHP 소스 코드 설치 패키지를 다운로드하고 ext/ 디렉터리에 들어가서 새 extstrcat.def를 만듭니다.

코드 복사 코드는 다음과 같습니다.

문자열 extstrcat(문자열 strarg, int intarg)

그런 다음 다음을 실행하세요.
코드 복사 코드는 다음과 같습니다.

./ext_skel --extname=extstrcat --proto=extstrcat.def

ext/extstrcat/config.m4를 수정하고 다음 줄 앞에 있는 주석(dnl)을 제거합니다.
코드 복사 코드는 다음과 같습니다.

PHP_ARG_ENABLE(extstrcat, extstrcat 지원 활성화 여부,
댓글이 정렬되었는지 확인하세요.
[ --enable-extstrcat extstrcat 지원 활성화])

이때, ext/extstrcat/extstrcat.c를 편집하여 PHP_FUNCTION(extstrcat) 함수를 찾으세요. 이는 확장의 메소드가 extstrcat라고 함을 의미합니다.

코드 복사 코드는 다음과 같습니다.

PHP_FUNCTION(extstrcat)
{
char *strarg = NULL;
int argc = ZEND_NUM_ARGS();
int strarg_len;
긴 intarg;

char intargstr[10];
int retstrlen = 0;
char *retstr = NULL;

If (zend_parse_parameters(argc TSRMLS_CC, "sl", &strarg, &strarg_len, &intarg) == FAILURE)
          반품;

snprintf(intargstr, 9, "%d", intarg);
retstrlen = strarg_len strlen(intargstr) 1;
​ retstr = (char *)malloc(sizeof(char)* retstrlen);
Memset(재설정, '        strncat(retstr, strarg, strlen(strarg));
        strncat(retstr, intargstr, strlen(intargstr));
RETURN_STRING(retstr, 1);

php_error(E_WARNING, "추출: 아직 구현되지 않았습니다.");
}

, 여기서 strarg와 intarg는 해당하는 두 개의 문자열 및 정수 매개변수입니다.

다음으로 할 일은 확장을 컴파일하는 것입니다.

코드 복사 코드는 다음과 같습니다.
PHP화
./configure --enable-extstrcat
만들다

성공적으로 컴파일되면 extstrcat.so 파일이 ext/modules 디렉터리
에 생성됩니다.

코드 복사 코드는 다음과 같습니다.
cp ./modules/extstrcat.so /usr/local/lib/php/extensions/no-debug-non-zts-20121212/

php.ini를 수정하고 확장자 = extstrcat.so를 추가하세요.

php-fpm을 다시 시작하고 phpinfo()를 실행하여 extstrcat 확장이 추가되었는지 확인하세요.
이제 데모를 작성하고 PHP 확장을 테스트해 보겠습니다.

코드 복사 코드는 다음과 같습니다.
if(!extension_loaded('extstrcat')) {
dl('extstrcat.' . PHP_SHLIB_SUFFIX);
}
$ret=extstrcat('testarg',1234);
echo $ret;
?>
, 명령줄에서 파일을 실행하고 testarg1234를 가져옵니다.
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿