메뉴 건너뛰기

프로그램언어

조회 수 3888 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

1. Skeleton 생성

   PHP 소스 디렉토리의 ext 디렉토리에 있는 ext_skel 실행

php-1.4.2/ext]# ./ext_skel --extname=[확장모듈명]

   ext 디렉토리에 [확장모듈명]으로 디렉토리 생성됨

                              ls -al php-1.42./ext/[확장모듈명]

                                   [확장모듈명].c

                                   php_[확장모듈명].h

 

2. C 라이브러리 함수와 PHP 함수의 연결  

      1) [확장모듈명].c 에 C 라이브러리 함수와 연결할 PHP 함수를 등록함

      function_entry  [확장모듈명]_functions [] = {

                PHP_FE( [PHP함수명1], NULL)

                PHP_FE( [PHP함수명2], NULL)

                {NULL, NULL, NULL}

      };

 

      2) PHP 함수와 C 라이브러리 함수의 연결 (PHP 함수 정의)

      PHP_FUNCTION ( [PHP함수명] )

      {

            /*  아규먼트 파싱 */

            if ( zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, ... ) == FAILURE ) return;

            /* 파싱 방법 ( ... )                                                                   */

            /* 아규먼트 타입 지정                                                              */

            /*          s : string 타입 (문자열 길이 저장을 위한 변수 필요)      */

            /*           l :  long 타입                                                              */

            /* 예 )                                                                                     */

            /* 

  zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &var_long);

  zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &var_str, &var_len);

  zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", &var_str, &var_len, &var_long);

            */

 

           /* C 라이브러리 함수 실행 */

           [C함수]( ... );

 

           RETURN_STRING( [문자열], 1);            /* 웹 브라우저에 출력 ? */

      }

 

      3) PHP 함수 헤더에 프로토타입 추가 ( php_[확장모듈명].h )

      PHP_FUNCTION( [PHP함수명] );

 

3. PHP 확장 모듈 라이브러리 작성 방법

       1) PHP skeleton 컴파일

                     gcc -fpic -DCOMPILE_DL_[확장모듈명]=1  \

                           -I/usr/local/include  -I../../TSRM   -I../..  -I../../main  -I../../Zend -I.

                           -c -o  [확장모듈명].o  [확장모듈명].c

       2) PHP 확장 모듈 라이브러리 생성

                    gcc -shared  -L/usr/local/lib  -rdynamic -o  [확장모듈명].so  \

                          [확장모듈명].o  [C 오브젝트 파일]

 

 

5. PHP Extension Module의 사용

 

1) Apache 설정

PHP 모듈 동적 로딩 시 추가

LoadModule php4_module        libexec/libphp4.so         # PHP 재설치시 자동 추가

AddType application/x-httpd-php .php .html .htm            # 없으면 추가
AddType application/x-httpd-php-source .php3             # 없으면 추가

 

2) PHP 확장 모듈 설정

PHP 설치 디렉토리의 php.ini-dist 파일을 php.ini 파일로 변경하여 [php설치경로]/lib에 복사

php.ini 파일 수정

extension_dir = "[아파치모듈라이브러리경로]"

예) extension_dir = "/usr/local/apache/libexec"

 

새로 생성한 [확장모듈].so 파일을 [아파치모듈라이브러리경로]에 복사


 

3) PHP 모듈(libphp4.so) 동적 링크 + PHP 확장 모듈 동적 링크

Apache 재설치

./configure --prefix=[설치경로] --enable-module=so

make

make install

 

PHP 재설치

./configure --prefix=[설치경로] --with-apxs=[아파치apxs경로] --with-[확장모듈명]=shared

make

make install

 

4) PHP 모듈 동적 링크 + PHP 확장 모듈 정적 링크

Apache 재설치

./configure --prefix=[설치경로] --enable-module=so

make

make install

 

PHP 재설치

./configure --prefix=[설치경로] --with-apxs=[아파치apxs경로] --with-[확장모듈명]

make

make install

 

5) PHP 모듈(libphp4.a) 정적 링크 + PHP 확장 모듈 동적 링크

Apache 재설치

./configure --prefix=[설치경로] --activate-module=[아파치모듈라이브러리경로]/libphp4.so

make

make install

 

PHP 재설치

./configure --prefix=[설치경로] --with-apache=[아파치설치경로] --with-[확장모듈명]=shared

make

make install

 

 

6) PHP 모듈 정적 링크 + PHP 확장 모듈 정적 링크

Apache 재설치

./configure --prefix=[설치경로] --activate-module=[아파치모듈라이브러리경로]/libphp4.so

make

make install

 

PHP 재설치

./configure --prefix=[설치경로] --with-apache=[아파치설치경로] --with-[확장모듈명]

make

make install

 

 

 

????

PHP의 소스 configure 전에 ./buildconf 실행 하면, 소스의 ext 디렉토리의 하위에 있는 모듈 디렉토리에 대한 정보를 configure에 포함시키는 것 같음.

따라서, 새로 생성한 확장 모듈이 PHP 모듈(libphp4.so)에 포함되게 되어 확장 모듈의 동적 링크를 사용하지 못함


  1. No Image 08Jan
    by
    2019/01/08 Views 1662 

    내 계정 용량 체크

  2. No Image 08Jan
    by
    2019/01/08 Views 1294 

    사업자번호로 사업자 종류알기

  3. No Image 08Jan
    by
    2019/01/08 Views 1524 

    디비내용을 엑셀 파일로 다운로드 시키는 방법

  4. No Image 08Jan
    by
    2019/01/08 Views 1776 

    php/asp에서 가상번호 부여와 가상번호를 거꾸로 적용

  5. No Image 08Jan
    by
    2019/01/08 Views 1900 

    php에서 체크박스 선택한 것 보여주기

  6. No Image 08Jan
    by
    2019/01/08 Views 1965 

    배열을 테이블로 만들기

  7. No Image 08Jan
    by
    2019/01/08 Views 1167 

    include 와 namespace

  8. No Image 08Jan
    by
    2019/01/08 Views 1557 

    파일

  9. No Image 08Jan
    by
    2019/01/08 Views 1305 

    디렉토리의 제어

  10. No Image 27Oct
    by
    2018/10/27 Views 3612 

    PHP 문자열에서 검색어를 기준으로 앞뒤로 일정 길이만큼 자르기

  11. No Image 27Oct
    by
    2018/10/27 Views 4863 

    PHP 랜덤확률 구하기

  12. No Image 27Oct
    by
    2018/10/27 Views 3576 

    PHP 소켓을 이용하여 URL의 응답결과를 문자열로 받기

  13. No Image 27Oct
    by
    2018/10/27 Views 4202 

    PHP 랜덤 문자열 생성

  14. PHP XML 문서파싱 (SAX 방식 , DOM 방식)

  15. No Image 27Oct
    by
    2018/10/27 Views 3608 

    PHP split()와 explode()의 차이점

  16. No Image 27Oct
    by
    2018/10/27 Views 4205 

    PHP eregi가 빠를까, strpos가 빠를까?

  17. No Image 27Oct
    by 조쉬
    2018/10/27 Views 3888 

    PHP 확장 모듈을 이용한 C 라이브러리 사용

  18. No Image 27Oct
    by
    2018/10/27 Views 3364 

    자바스크립트 이스케이프 문자열을 PHP로 디코딩 하기

  19. No Image 28Sep
    by
    2018/09/28 Views 5387 

    이미지 땡겨와서 출력하기

  20. No Image 28Sep
    by
    2018/09/28 Views 6402 

    DB 연동 4단 셀렉트 박스

Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 ... 17 Next
/ 17

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved