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
아파치를 다시 시작하고 기능을 테스트하십시오.