VC 建立php扩张
VC 建立php扩展
软件 php的源文件和安装包要一致
php5.3.8(VC9 x86 Thread Safe)
php5.3.8源文件(tar.bz2)
VC
bison.exe
MSYS(MSYS类似于Cygwin,但是由于工作原理的不同,速度更快、体积更小、功能强大、便于携带http://code.google.com/p/msys-cn/)
因为我的开发只是一个很简单的demo,没有使用第三方了类库。如果是把linux下拿过来的扩展项目,可能用到一些库。可能用cygwin会比较好。但是没有cygwin完全可以在window下开发。
1。解压下载到的源文件包tar.bz2包到C盘c:/phpsrc,并且解压php安装包(VC9 x86Thread Safe,也就是能够正常使用的php压缩包文件)到C:/php,我们只需要里面的一个文件C:/php/dev/ php5.lib,复制php5.lib到c:/phpsrc。
2。复制bison.exe到Microsoft Visual Studio\Common\MSDev98\Bin把Microsoft Visual Studio\Common\MSDev98\Bin的绝对路径添加到windows环境变量
3 .在这里我们开始生成生成config.w32.h。CMD在里面操作
进入:c:/phpsrc执行
C:\phpsrc>buildconf Rebuilding configure.js Now run 'configure --help'
?建立一个临时环境变量
C:\phpsrc>set path=%path%;C:/phpsrc/bin C:\phpsrc>cscript /nologo configure.js --with-php-build="../phpsrc" --without-libxml --disable-odbc
如果想要Non Thread Safe 模式就去掉上面的命令最后的参数--disable-zts
Saving configure options to config.nice.bat Checking for cl.exe ... <in default path> Detected compiler MSVC9 (Visual C++ 2008) Detected 32-bit compiler Checking for link.exe ... C:\Program Files\Microsoft Visual Studio 9.0\VC\BIN Checking for nmake.exe ... <in default path> Checking for lib.exe ... <in default path> ...........中间省略............. ------------------------------------------- | | | ------------------------------------------- | Build type | Release | | Thread Safety | Yes | | Compiler | MSVC6 (Visual C++ 6.0) | | Architecture | x86 | ------------------------------------------- Type 'nmake' to build PHP</in></in></in>
如果出现上类似的提示, 说明你的PHP开发环境已经搭建成功,同时在main下面多了一个 config.w32.h。即PHP开发环境的配置文件。如果没有这个脚本,windows下开发php,简直太悲惨了。
?
4.开发PHP扩展的方法
到这里我们就可以建立开发PHP扩展了,但是无从下手,我们该怎么办,其实PHP也给我们提供了很好用的工具来建立一个PHP扩展的骨架。就是用C:\phpsrc\ext下的ext_skel_win32.php如何运行,以php结尾,说明依赖php。下面看具体方法,我建立一个名为’test‘的扩展。这里要确保你的php.exe可以直接在cmd下使用,具体还是加入Path路径 。虽然有ext_skel_win32.php,用php执行,但是我们不知道具体的内容。 其实执行如下命令:
C:\phpsrc\ext>php ext_skel_win32.php 'sh' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
ext_skel_win32.php源码中说要使用cygwin,但我机器上没有装cygwin,另外发现其中实际上只使用到了sh,而我机器上装的MSYS里也有sh,应该可以用的吧,于是就将ext_skel_win32.php中的$cygwin_path变量设置成了MSYS的BIN目录
$cygwin_path = 'c:\msys\1.0\bin';
C:\phpsrc\ext>php ext_skel_win32.php ext_skel --extname=module [--proto=file] [--stubs=file] [--xml[=file]] [--skel=dir] [--full-xml] [--no-help] --extname=module module is the name of your extension --proto=file file contains prototypes of functions to create --stubs=file generate only function stubs in file --xml generate xml documentation to be added to phpdoc-cvs --skel=dir path to the skeleton directory --full-xml generate xml documentation for a self-contained extension (not yet implemented) --no-help don't try to be nice and create comments in the code and helper functions to test if the module compiled PHP Warning: fopen(/.php): failed to open stream: No such file or directory in C:\phpsrc\ext\ext_skel_win32.php on line 52 C:\phpsrc\ext>
?可以看到如何使用这php脚本。大体命令如下
c:\phpsrc\ext>php ext_skel_win32.php --extname=test Creating directory test Creating basic files: config.m4 config.w32 .svnignore test.c php_test.h CREDITS EXPERIMENTAL tests/001.phpt test.php [do ne]. To use your new extension, you will have to execute the following steps: 1. $ cd .. 2. $ vi ext/test/config.m4 3. $ ./buildconf 4. $ ./configure --[with|enable]-test 5. $ make 6. $ ./php -f ext/test/test.php 7. $ vi ext/test/test.c 8. $ make Repeat steps 3-6 until you are satisfied with ext/test/config.m4 and step 6 confirms that your module is compiled into PHP. Then, start writing code and repeat the last two steps as often as necessary. c:\phpsrc\ext>
这样就成功创建了一个php扩展骨架 ,你可以在里面修改。具体的还要好好研究PHP API。具体扩展的位置就在ext目录下,打开可以看到test文件夹,这就是刚才命令创建的。
C:\phpsrc\ext\test 的目录 2011-11-29 16:57 <dir> . 2011-11-29 16:57 <dir> .. 2011-11-29 16:57 16 .svnignore 2011-11-29 16:57 1,970 config.m4 2011-11-29 16:57 282 config.w32 2011-11-29 16:57 4 CREDITS 2011-11-29 16:57 0 EXPERIMENTAL 2011-11-29 16:57 2,768 php_test.h 2011-11-29 16:57 5,128 test.c 2011-11-29 16:57 4,954 test.dsp 2011-11-29 16:57 500 test.php 2011-11-29 16:57 <dir> tests 9 个文件 15,622 字节 3 个目录 7,441,883,136 可用字节 C:\phpsrc\ext\test></dir> </dir> </dir>
这样一个php扩展的框架已经创建完成了。
?
下面就是配置使用vc++6开发这个扩展
III. 添加依赖的php5ts.lib
? 在php的二进制包中的 dev目录下将 php5ts.lib 拷到我们的test目录中, 否则编译将通不过。
IV. 添加test c代码
生成的test目录中有关键文件包括
? test.dsp,
? test.c,
? php_test.h,
其他文件暂时不必关心.
提示:切忌test目录不可以挪移出ext目录,否则会编译报缺少php.h.
1. 修改php_test.h
扩展的新函数: 在PHP_FUNCTION(confirm_test_compiled); 行后添加一行
PHP_FUNCTION(confirm_test_compiled); PHP_FUNCTION(test); // 新增的行
2. 修改test.c
在PHP_FUNCTION(confirm_test_compiled) 后添加我们的新函数
PHP_FUNCTION(test){ php_printf("Hello C extension"); }
在数组zend_function_entry test_functions[]增加一行
const zend_function_entry test_functions[] = { PHP_FE(confirm_test_compiled, NULL) /* For testing, remove later. */ PHP_FE(test, NULL) // 新增的行 PHP_FE_END /* Must be the last line in test_functions[] */ };
?V. 构建DLL文件
用vc6打开我们的工程,就是test.dsp
1. 修改编译方式为release: 选择Build->Set Active Configuration设置默认编译方式为Release, 否则会提示缺少php5ts_debug.lib ,其实就是php5ts.lib。
2. 按F5编译。会在ext上级的Release_TS目录下生成php_test.dll
提示:如果愿意使用命令行编译也是可以的,命令如下:
msdev test\test.dsp /MAKE "test - Win32 Release_TS"
?VI. 集成dll到php中。
?

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

Huawei는 Watch GT 5 및 Watch GT 5 Pro 스마트워치용 소프트웨어 버전 5.0.0.100(C00M01)을 전 세계적으로 출시하고 있습니다. 이 두 스마트워치는 최근 유럽에서 출시되었으며, 표준 모델이 회사의 가장 저렴한 모델로 출시되었습니다. 이 하모니

이 튜토리얼은 PHP를 사용하여 XML 문서를 효율적으로 처리하는 방법을 보여줍니다. XML (Extensible Markup Language)은 인간의 가독성과 기계 구문 분석을 위해 설계된 다목적 텍스트 기반 마크 업 언어입니다. 일반적으로 데이터 저장 AN에 사용됩니다

문자열은 문자, 숫자 및 기호를 포함하여 일련의 문자입니다. 이 튜토리얼은 다른 방법을 사용하여 PHP의 주어진 문자열의 모음 수를 계산하는 방법을 배웁니다. 영어의 모음은 A, E, I, O, U이며 대문자 또는 소문자 일 수 있습니다. 모음이란 무엇입니까? 모음은 특정 발음을 나타내는 알파벳 문자입니다. 대문자와 소문자를 포함하여 영어에는 5 개의 모음이 있습니다. a, e, i, o, u 예 1 입력 : String = "Tutorialspoint" 출력 : 6 설명하다 문자열의 "Tutorialspoint"의 모음은 u, o, i, a, o, i입니다. 총 6 개의 위안이 있습니다

숙련된 PHP 개발자라면 이미 그런 일을 해왔다는 느낌을 받을 것입니다. 귀하는 상당한 수의 애플리케이션을 개발하고, 수백만 줄의 코드를 디버깅하고, 여러 스크립트를 수정하여 작업을 수행했습니다.

JWT는 주로 신분증 인증 및 정보 교환을 위해 당사자간에 정보를 안전하게 전송하는 데 사용되는 JSON을 기반으로 한 개방형 표준입니다. 1. JWT는 헤더, 페이로드 및 서명의 세 부분으로 구성됩니다. 2. JWT의 작업 원칙에는 세 가지 단계가 포함됩니다. JWT 생성, JWT 확인 및 Parsing Payload. 3. PHP에서 인증에 JWT를 사용하면 JWT를 생성하고 확인할 수 있으며 사용자 역할 및 권한 정보가 고급 사용에 포함될 수 있습니다. 4. 일반적인 오류에는 서명 검증 실패, 토큰 만료 및 대형 페이로드가 포함됩니다. 디버깅 기술에는 디버깅 도구 및 로깅 사용이 포함됩니다. 5. 성능 최적화 및 모범 사례에는 적절한 시그니처 알고리즘 사용, 타당성 기간 설정 합리적,

정적 바인딩 (정적 : :)는 PHP에서 늦은 정적 바인딩 (LSB)을 구현하여 클래스를 정의하는 대신 정적 컨텍스트에서 호출 클래스를 참조 할 수 있습니다. 1) 구문 분석 프로세스는 런타임에 수행됩니다. 2) 상속 관계에서 통화 클래스를 찾아보십시오. 3) 성능 오버 헤드를 가져올 수 있습니다.
