c/C++를 사용하여 Windows에서 PHP 확장 개발

WBOY
풀어 주다: 2016-08-08 09:29:04
원래의
1209명이 탐색했습니다.

1: 필수 도구:

cygwin(Windows 플랫폼에서 실행되는 Unix 계열 시뮬레이션 환경)
PHP 소스 코드(압축 패키지)
Windows에 설치된 PHP인 PHP 바이너리 파일
vs2008 이상(vs2010, vs2013)
win32build.rar 및bindlib_win32.rar(주로 config.win32.h를 생성하는 데 사용됨)

둘: 구성 프로세스

1: PHP 소스 코드의 압축을 풀면 ext 디렉토리가 있습니다. PHP 확장 개발을 위한 디렉토리를 담당합니다. 디렉토리에는 모든 기본 확장 소스 코드와 두 개의 파일이 있습니다.
ext_skel_win32.php 및 ext_skel 파일
ext_skel은 확장을 생성하기 위한 셸이며 Windows에서는 실행할 수 없으므로 Unix 환경을 시뮬레이션하려면 cygwin이 있어야 합니다

2: 압축을 푼 후 ext 디렉터리에 자체 확장 디렉터리를 생성해야 합니다
. win+r cmd를 사용하여 명령줄을 직접 입력한 다음 cd를 눌러 ext 디렉터리로 이동하고 다음 명령을 입력합니다.
php ext_skel_win32.php –extname=myext 또는
php.exe ext_skel_win32.php –extname=myext

여기서 오류가 쉽게 발생할 수 있습니다
우선, php와 php.exe는 Windows에 설치된 php를 참조합니다. 루트 디렉터리에는 php 파일을 구문 분석하는 데 사용되는 php.exe가 있으므로 설치된 php 디렉터리를 환경 변수로 설정해야 합니다.
둘째: cygwin이 설치되지 않았거나 cygwin이 설정되지 않은 경우 다음 오류가 발생합니다. 따라서 cygwin을 설치한 후 PHP 소스 코드의 ext 디렉터리에 ext_skel_win32.php를 열어야 합니다. $cygwin_path = “c:/cygwin/bin”이라는 변수가 있으며 이를 설치한 디렉터리로 변경하고 저장합니다. 다시 시도해 보세요

그래도 오류가 발생한다면 이 사진을 보고 실수한 것이 아닌지 확인해 보세요.

모든 작업이 완료된 후 다음과 같은 현상이 발생하면

에 포함된 디렉터리가 성공적으로 생성되었음을 의미합니다. 수정해야 할 두 파일은 다음과 같습니다(화살표로 표시)

3: 종속 php5ts.lib 추가
php 바이너리 패키지의 dev 디렉터리에 있는 php5ts.lib를 확장 디렉터리에 복사합니다.

4: (1) php_hello.h 파일 수정
새 함수를 확장합니다. PHP_FUNCTION(confirm_myhello_compiled); 줄 뒤에 PHP_FUNCTION(hello);
줄을 추가합니다. (2) hello.c 파일 수정
배열 zend_function_entry myhello_functions[]에 한 줄 추가

<code>1. zend_function_entry myhello_functions[] = {  
2.     PHP_FE(confirm_myhello_compiled,    NULL)        /* For testing, remove later. */  
3.     PHP_FE(hello, NULL) // 新增的行  
4.     {NULL, NULL, NULL}    /* Must be the last line in myhello_functions[] */  
5. };  
</code>
로그인 후 복사

PHP_FUNCTION(confirm_myhello_compiled) 뒤에 새 함수를 추가합니다.

<code>1. PHP_FUNCTION(hello){  
2.     php_printf(”Hello C extension”);  
3. }  
4. 
</code>
로그인 후 복사

5: dll 확장 파일 빌드
다음 단계는 확장 파일을 vs2008로 열고 컴파일 모드를 Release_TS로 선택한 후 컴파일을 시작하거나 명령줄을 통해 ext/hello를 입력하고 msdev hello.dsp /MAKE "hello - Win32를 실행하는 것입니다. Release_TS" 성공하면 ext.와 동일한 레벨 디렉토리인 Release_TS에 php_hello.dll이 생성됩니다.
이쯤 되면 기본적으로 주요 작업은 완료되지만, 오류가 가장 많이 발생하는 지점이기도 하다.
가장 일반적인 오류는 컴파일 중에 "../main/config.win32.h" 포함 파일을 열 수 없다는 것입니다. 결과적으로 기본 폴더에 해당 파일이 없습니다.
따라서 PHP 소스 코드의 win32/build 디렉터리에 win32build.rar 및bindlib_win32.rar의 압축을 모두 풀고 환경 변수
에 win32/build를 추가합니다. cmd를 입력하여 PHP 소스 코드 디렉터리로 이동하고
를 입력합니다. cscript /nologoconfigure.js –with-php-build=”../win32build” –without-libxml –disable-odbc Enter를 누른 후

이 나타날 수 있습니다. 검색이 없습니다. cl.exe이므로 설치된 vs2008 디렉터리의 bin 디렉터리를 환경 변수에 추가해야 합니다. 내 컴퓨터에서는 다시 실행하면 오류가 보고될 수 있습니다. 사진을 찾을 수 없습니다. . 일반적인 의미는 C++ 컴파일러가 최소한 vc9.0(vs2008)이므로 실행을 계속하려면 vs2008 이상의 컴파일러

를 사용해 보세요:

이 파일은 Microsoft Visual Studio에서 실행할 수 있습니다. 10.0Common7IDE 디렉터리에서 찾아 VCbin 디렉터리에 복사합니다. 명령문을 성공적으로 계속 실행합니다. D:php 소스 코드 기본 디렉터리에 config.win32.h 파일을 생성합니다.

config.win32.h 열기:

에서 찾기 vc10으로 컴파일하는 경우

로 수정해야 합니다.

드디어 문제를 해결하고 컴파일했습니다. . 성공하면 dll을 생성합니다.
하지만 여전히 컴파일 문제가 발생했습니다. 치명적인 오류 c1902: 프로그램 데이터베이스 관리자가 일치하지 않습니다. .
정말 힘들었습니다. Baidu를 통해 CSDN 포럼에서 동일한 문제를 발견하고 마침내 이렇게 해결했습니다.
mspdbsrv.exe 또는 mspdbcore.dll이 없거나 해당 버전이 mspdb80.dll의 버전과 다릅니다. 이 세 파일의 동일한 버전이 시스템에 설치되어 있는지 확인하십시오.
VC 설치 디렉터리 아래의 Common7IDE 디렉터리에서 이 세 파일을 설치 디렉터리
아래의 VCbin으로 복사합니다. 모든 문제가 해결되었고 php_hello.dll

6을 성공적으로 컴파일했습니다. 마지막으로 바이너리 php 디렉토리 아래 ext 디렉토리에 복사하고 php.ini를 열고 Extension=php_hello.dll 아파치를 다시 시작하고 기능을 테스트하십시오.

PS: 당시 테스트한 함수는 Cock()

출력 결과:


이것 끝이다. . . 이 일을 하는 것은 정말 미친 일이었습니다. 다행히도 저는 인내심을 가지고 문제를 여러 번 해결하려고 노력했고 마침내 성공했습니다. 귀하의 참고를 위해 제가 겪은 모든 문제를 게시했습니다. PHP 확장은 매우 재미있습니다. 우리는 자체 PHP 기능을 개발할 수 있습니다. 하지만 전제는 c/c++를 잘 배워야 한다는 겁니다. . . 아무튼 시간을 갖고 모두들 성공하시길 바랍니다~

위 내용은 내용의 측면을 포함하여 Windows에서 PHP 확장을 개발하기 위한 c/C++ 사용을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿