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를 가져옵니다.