이 글에서는 VS2015(vs14)를 사용하여 PHP7 확장을 개발하는 방법을 소개합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.
개발 전 준비 작업:
VS (2013 사용)
Cygwin (다운로드 주소: http://www.cygwin.com/)
IIS7.5 PHP 운영 환경 탑재 (테스트에 사용) )
PHP 컴파일된 프로그램과 미리 컴파일된 소스 코드는 최신 버전 7.0.5를 사용합니다. (다운로드 주소: http://windows.php.net/download#php-7.0)
컴파일된 프로그램 경로: E: vs_c ++testphpextphp-7.0.5-src
컴파일 전 소스 코드 경로: E:vs_c++testphpextphp-7.0.5-nts-Win32-VC14-x86
단계:
1 설치 Cygwin
네트워크에서 설치
C드라이브는 기본으로 설치되어있습니다
캐시 맘대로 다운받으세요, 설치후 꼭 삭제하세요, 바탕화면에 올려두었습니다
중국에서는 , http://mirrors.163.com을 선택하고 끝까지 다음 단계로 계속 진행하세요.
2 내 PHP 소스 코드 디렉터리(E:vs_c++testphpextphp-7.0.5-src, 아래에서 소스 코드 디렉터리를 나타내는 데 사용됨)를 찾고 E:vs_c++testphpextphp-7.0.5를 엽니다. -srcextext_skel_win32.php
이것을 cygwin 설치 디렉토리로 변경하세요. 내 드라이브는 C 드라이브이므로 변경할 필요가 없습니다.
3. cmd를 실행하고 E: vs_c++testphpextphp-7.0.5-srcext를 입력하고 php.exe ext_skel_win32.php --extname=test를 실행합니다. 여기서 test는 PHP 확장을 나타냅니다.
E: vs_c++testphpextphp-7.0.5-srcext를 열면 테스트 폴더가 표시됩니다.
4. VS를 열고 "파일" - "새로 만들기" - "기존 코드에서 디렉터리 만들기"를 선택하세요.
C++
여기에서 PHP 확장 폴더 경로를 선택하고 프로젝트에 지정하세요. 이름을 지정하세요.
"Visual Studio 사용"을 선택하고 프로젝트 유형으로 "DLL(Dynamic Link Library) 프로젝트"를 선택하면 완료될 때까지 다음 단계가 기본값이 됩니다.
5. 처음 열면 오류가 많이 발생합니다. 다음으로 프로젝트 구성을 시작하겠습니다.
먼저 프로젝트 솔루션 구성을 Release
로 변경합니다. 프로젝트 속성, C/C++, 일반, 추가 포함 디렉터리를 마우스 오른쪽 버튼으로 클릭하고
을 편집하고 다음 PHP 소스 코드 디렉터리를 추가합니다( 실제 디렉터리는 다음으로 시작합니다. 개발자 자체 디렉터리가 우선합니다. 7.0.5- srcTSRM
E:vs_c++testphpextphp-7.0.5-srcZend
프로젝트 속성, C/C++, 전처리기, 전처리기 정의, 편집을 마우스 오른쪽 버튼으로 클릭하고 다음 변수를 추가합니다:
ZEND_DEBUG=0
PHP_EXTENSION
PHP_WIN32
ZEND_WIN32
HAVE_TEST
=1 (여기서 빨간색 부분은 확장자 이름으로 변경해야 합니다. 확장자 이름으로 변경하지 않으면 PHP가 인식하지 못합니다. it)
COMPILE_DL_TEST
(여기서 빨간색 부분은 확장명으로 변경해야 합니다. 확장명으로 변경하지 않으면 php에서 인식하지 못합니다)
ZTS(이 변수를 추가하면 스레드 안전성이 설정되고 추가하지 않으면 스레드 안전성이 꺼집니다. 컴파일한 PHP가 스레드로부터 안전한지 여부에 따라 이 변수를 추가할지 여부를 판단할 수 있습니다. ps: 여기서 손실을 입었습니다. 이에 응답하지 않아 PHP 확장이 실패했습니다.
해결책을 생성하면 "config.w32.h"를 찾을 수 없다는 오류 메시지가 표시됩니다. 소스 코드 파일 디렉터리(E: vs_c++testphpextphp-7.0) .5-srcwin32build 폴더에서 "config.w32.h.in"을 찾아 이 파일을 E:vs_c++testphpextphp-7.0.5-srcmain에 복사합니다. 폴더, 끝
에서 ".in"을 제거하고 다시 생성하십시오. 해결 방법, 오류 메시지 표시 LNK1120
Error 7 오류 LNK1120: 5개의 해결되지 않은 외부 명령 E: vs_c++testphpextphp-7.0.5-srcexttestReleasephptest.dll 1 1 phptest
프로젝트 속성 마우스 오른쪽 버튼 클릭, 커넥터, 입력, 종속성 추가, 편집, php5.lib 경로 입력(이 파일은 PHP 컴파일 후 프로그램 폴더, 루트 디렉터리의 dev 폴더에 있음)
참고 : 확장이 PHP 실행 환경과 일치하도록 하려면 다음을 기반으로 해야 합니다. PHP 실행 환경의 컴파일된 버전(php7.0.5는 VC14에 의해 컴파일됨)의 경우 config.w32.h 파일에
#define PHP_COMPILER_ID "VC14"
를 추가하세요. E: vs_c++testphpextphp-7.0.5-srcmain 폴더에서 E: vs_c++testphpextphp-7.0.5-srcexttesttest.c
이 코드 조각을 찾으세요:
PHP_FUNCTION(confirm_test_compiled) { char *arg = NULL; int arg_len, len; char *strg; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) { return; } len = spprintf(&strg, 0, "Congratulations! You have successfully modified ext/%.78s/config.m4. Module %.78s is now compiled into PHP.", "test", arg); RETURN_STRINGL(strg, len, 0); }
confirm_test_compiled를 test_echo
로 변경하세요. 이 코드 조각을 다시 입력하세요.
const zend_function_entry test_functions[] = { PHP_FE(confirm_test_compiled, NULL) /* For testing, remove later. */ PHP_FE_END /* Must be the last line in test_functions[] */ };
내부의 verify_test_compiled를 test_echo
로 변경하세요. 솔루션을 생성하고, 프로젝트 루트 디렉터리의 Release 폴더에서 자신만의 PHP 확장 phptest.dll을 찾아 php의 ext 폴더에 복사하고 구성합니다. php.ini에:
extension=phptest.dll
IIS를 다시 시작하고, 새 사이트를 만들고, 그 안에 새 test.php 파일을 만듭니다.
<?php echo test_echo("123");
실행하고 결과를 얻으세요.
이 test_echo 함수 당신은 또한 당신의 필요에 따라 당신의 PHP 성능을 향상시킬 수 있습니다.
추천 학습: php 비디오 튜토리얼
위 내용은 VS2015(vs14)로 PHP7 확장을 개발하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!