`
hudeyong926
  • 浏览: 2035418 次
  • 来自: 武汉
社区版块
存档分类
最新评论

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

如果出现上类似的提示, 说明你的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>

这样一个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中。

 

分享到:
评论

相关推荐

    phpredis-vc11

    这意味着它与PHP的VC11版本兼容,对于那些使用Windows系统且PHP环境由VC11构建的用户来说尤其重要,因为不同版本的VC编译器可能导致PHP扩展的兼容性问题。 描述中提到“php5.5”,这表明此PHPRedis版本是为PHP 5.5...

    php_redis-5.3-vc9

    《PHP与Redis扩展:php_redis-5.3-vc9深度解析》 在Web开发领域,PHP作为一种广泛使用的服务器端脚本语言,以其简洁高效的特点深受开发者喜爱。与此同时,随着大数据时代的到来,键值存储系统Redis因其高性能、易用...

    Ultimate_VC_Addons_WordPress_Ultimate_VC_Addons_wpaddon_Vc_php_源

    【标题】"Ultimate_VC_Addons_WordPress_Ultimate_VC_Addons_wpaddon_Vc_php_源" 提供的是WordPress插件Ultimate VC Addons的PHP源代码,这是一款功能强大的Visual Composer扩展插件,用于增强WordPress网站的构建...

    php_redis-2.2.7-5.6-ts-vc11-x64.zip.zip

    该压缩包“php_redis-2.2.7-5.6-ts-vc11-x64.zip.zip”包含了适用于64位Windows环境的PHP Redis扩展,具体版本为2.2.7,它针对PHP 5.6版本进行了编译,并且是线程安全(TS)版本,使用了Visual C++ 11编译器(VC11)...

    集成vc运行库的绿色集成环境,php环境搭建专业工具

    由于许多PHP扩展依赖于VC运行库,PHPWAMP已经预先包含了这些库,确保了所有必需的组件都已就绪。这样避免了在运行过程中因缺少VC库而引发的错误,简化了环境搭建的过程,同时也提高了程序的执行效率。 **3. 绿色...

    php-5.6.34-win32-vc11-x64.zip

    标题中的"php-5.6.34-win32-vc11-x64.zip"表明这是一款针对Windows 64位系统编译的PHP 5.6.34版本的软件包,由Visual C++ 11 (VC11) 编译器构建。这个版本的PHP是2016年发布的,对于那些需要维护旧项目或依赖于该...

    PHP memcache 多版本拓展

    4. **放置到PHP扩展目录**: 将选中的`php_memcache.dll`复制到你的PHP安装目录下的`ext`文件夹。 5. **编辑php.ini**: 打开`php.ini`配置文件,添加以下行以启用扩展: ``` extension=php_memcache.dll ``` 6. ...

    最新 php_memcache-3.0.8-5.5-ts-vc11-x64 用于 for php5.5 64位版本

    5. **使用Memcache**:Memcache提供了一系列的PHP函数,例如`memcache_connect()`用于建立连接,`memcache_set()`用于存储数据,`memcache_get()`用于获取数据。通过这些函数,你可以将经常访问的数据存储在内存中,...

    php_redis-5.3.2rc2-7.4-nts-vc15-x64.zip

    PHP Redis扩展提供了丰富的API,如`new Redis()`创建连接,`connect()`或`pconnect()`建立连接,`set()`和`get()`进行键值对操作,`hSet()`和`hGet()`处理哈希表,`lPush()`和`rPop()`管理列表,`sAdd()`和`sMembers...

    php-5.4.37-Win32-VC9-x86

    但存在一个问题,很多常用的PHP扩展是以Linux/Unix的多进程思想来开发的,这些扩展在ISAPI的方式运行时就会出错,很可能将IIS进程搞崩溃,因此对于IIS来说,CGI模式才是PHP运行的最安全的方式,只不过CGI模式对于每...

    php_redis-5.2.1-7.4-ts-vc15-x64.zip

    本文将围绕“php_redis-5.2.1-7.4-ts-vc15-x64.zip”这个压缩包文件,深入探讨PHP Redis扩展的相关知识点。 首先,"php_redis-5.2.1-7.4-ts-vc15-x64.zip"这个文件名揭示了几个关键信息。版本号“5.2.1-7.4”表明该...

    php_redis-4.1.0-7.0-nts-vc14-x86.zip

    本文将围绕"php_redis-4.1.0-7.0-nts-vc14-x86.zip"这个最新的安装包,详细阐述PHP的Redis扩展以及其在实际应用中的重要性。 首先,"php_redis-4.1.0-7.0-nts-vc14-x86.zip"是针对PHP 7.0版本的一个非线程安全(NTS...

    PHP 扩展php_stomp.dll

    **PHP扩展php_stomp.dll详解** PHP作为一款广泛使用的服务器端脚本语言,拥有丰富的扩展库,能够增强其功能和性能。"php_stomp.dll"是PHP的一个关键扩展,它为PHP提供了STOMP(Simple Text Oriented Messaging ...

    php_redis-3.1.2-7.1-nts-vc14-x86

    标题“php_redis-3.1.2-7.1-nts-vc14-x86”指的是一个PHP扩展,用于连接和操作Redis数据库。这个扩展的版本是3.1.2,兼容PHP 7.1版本,是非线程安全(NTS)构建,并且是针对Visual C++ 14编译器(对应于VC14,即Visual...

    php_memcache-4.0.5.2-7.3-nts-vc15-x64.zip

    - `php_memcache.pdb`: 这是PHP扩展的调试信息文件,对于开发和调试是很有帮助的。 - `README`: 提供了关于如何使用和配置扩展的简要指南。 总的来说,Memcache扩展为PHP提供了一种有效且高效的缓存解决方案,有助...

    redies php5.6 扩展

    - **数据类型操作**:Redis支持字符串、哈希、列表、集合和有序集合等多种数据结构,PHP扩展提供了相应的操作接口,如`hSet()`, `lPush()`, `sAdd()`, `zAdd()`等。 - **事务处理**:`multi()`, `exec()`, `...

    php_memcache-5.2-ts-win32-vc6-x86

    标题“php_memcache-5.2-ts-win32-vc6-x86”指的是一个针对PHP编程语言的扩展模块,具体是Memcache扩展的特定版本。这个版本是为PHP 5.2编译的,使用了Thread Safety (TS)模式,并且适配于32位的Windows操作系统,...

    php_memcache扩展大全(所有版本)

    需要注意的是,不同的PHP版本、线程安全(NTS, Non Thread Safe)或非线程安全(TS, Thread Safe)、以及VC编译器版本(如VC9、VC11)都会影响到扩展的兼容性,因此在下载和安装时必须谨慎匹配。 1. PHP Memcache扩展的...

Global site tag (gtag.js) - Google Analytics