요구 사항: maxwelldu라는 함수가 포함된 첫 번째 PHP 확장을 작성합니다. maxwelldu는 배열의 길이를 계산할 수 있습니다(count와 동일).
요구 사항: C/C++ 프로그래밍을 이해하고 익숙해집니다. PHP 프로그래밍
시스템: CentOS6.5
환경: LNMP(yum 설치)
첫 번째 단계를 수행하고 PHP 확장 작성을 시작하려면 다음 도구를 사용합니다. 이 도구는 PHP 소스 코드 안에 있으므로 http://php.net/downloads.php
cd ~ mkdir software cd software wget http://cn2.php.net/distributions/php-5.6.11.tar.gz tar zxvf php-5.6.11.tar.gz cd php-5.6.11/ext
#확장 프로젝트를 생성합니다. ext 디렉토리에 추가 sayhello 파일이 있을 것입니다. 이 폴더는 확장 프로젝트입니다
./ext_skel --extname=maxwelldu cd maxwelldu vim config.m4
#Open 권한, PHP_ARG_ENABLE 행 앞의 dnl과 [ --enable-maxwelldu ] line
PHP_ARG_ENABLE(maxwelldu, whether to enable maxwelldu support, dnl Make sure that the comment is aligned: [ --enable-maxwelldu Enable maxwelldu support])
#파일 끝에
vim php_maxwelldu.h PHP_FUNCTION(maxwelldu);
를 추가합니다. 다를 수 있습니다
vim maxwelldu.c ``` PHP_FUNCTION(maxwelldu){ zval *arr; //声明一个变量来接受数组参数 HashTable *arr_hash; //声明一个HashTable的变量 int array_count; //声明一个数组长度的变量 if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &arr)==FAILURE){ //判断接受的数组是>否是数组, 并把值放入arr中 return; } arr_hash = Z_ARRVAL_P(arr); //将数组转换成HashTable array_count = zend_hash_num_elements(arr_hash);//通过zend提供的函数获取一共有多少个元素 RETURN_LONG(array_count); //返回元素的个数 } ``` #然后修改zend_function_entry maxwelldu_functions[] = { 的内容如下 ``` const zend_function_entry maxwelldu_functions[] = { PHP_FE(maxwelldu,NULL) {NULL,NULL,NULL} }; ```
#이때 , 확장은 해당 확장 디렉토리에 자동으로 배치됩니다
#mysql, memcache 및 기타 확장을 정상적으로 추가하는 것처럼 php 구성 파일을 수정합니다
phpize ./configure --with-php-c/bin/php-config make make test make install
#설치된 확장 프로그램 보기
#Maxwelldu는 phpinfo에서 볼 수 있습니다extension=maxwelldu.so service httpd restart service php-fpm restart
#PHP 스크립트에서 사용할 수 있습니다
php -m
참고 주소:
http://blog.csdn.net/heiyeshuwu/article/details/3453854
<?php $arr = [ 1, 2, 3, 4, 5 ]; echo maxwelldu($arr) == count($arr), PHP_EOL; //打印出1就表示函数返回的数组个数和系统的count函数返回值一样
위 내용은 내용을 포함하여 배열의 수를 계산하는 첫 번째 PHP 확장의 작성을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.