RJ博客

Linux & Windows下PHP扩展的编写

本文目录

Linux下的PHP扩展开发,比较容易,按着下面链接操作就行:

http://kimi.it/496.html



Windows下的PHP扩展开发起来就比较麻烦了:

在Windows下写PHP的C扩展

http://koda.iteye.com/blog/315779

clipboard.png


大圣的笑 ( ZTS参数设置 )

http://www.cnblogs.com/mahatmasmile/p/4527495.html

右键项目属性,C/C++,预处理器,预处理器定义,编辑,加入以下变量:

ZEND_DEBUG=0

PHP_EXTENSION

PHP_WIN32

ZEND_WIN32

HAVE_TEST=1(这里红色部分,要改成你的扩展名称,不改成你的扩展名,php会不识别)

COMPILE_DL_TEST(这里红色部分,要改成你的扩展名称,不改成你的扩展名,php会不识别)

ZTS(这一个变量加上是开启线程安全,不加是关闭线程安全)


用VS2015(vs14)开发PHP7扩展(转+)

http://blog.csdn.net/muyilongh/article/details/51062262

VS2012开发调试PHP扩展

http://blog.csdn.net/a600423444/article/details/12720543


 (问题补充, config.w32.h文件生成)

windows系统下c++扩展PHP开发流程

http://blog.csdn.net/th_gsb/article/details/42881721

编译生成c动态连接库,遇到生成config.w32.h不存在的解决办法:重新编译生成!

http://blog.sina.com.cn/s/blog_7336020f0100qdmd.html

下面主要为转贴,但是很好,在自己机器上也实现了,编译成功!

下载2个必要的包

http://www.php.net/extra/bindlib_w32.zip

http://www.php.net/extra/win32build.zip

把 这2个包的内容放一起,例如解压缩到 D:\win32build


请使用 Visual Studio Tools 下的 Visual Studio 命令提示 操作

进入D:\php-src\

执行buildconf.bat

建立一个临时环境变量,执行set path=%path%;D:\win32build\bin


执行 cscript /nologo configure.js --with-php-build="../win32build" --without-libxml --disable-odbc

如果想 要No Thread Safe 模式就在上面的命令最后加上参数 --disable-zts


然后看看是不是main下面多了一个 config.w32.h~

还有一点,config.w32.h 里面 #define PHP_COMPILER_ID 改成和你正在用的 PHP 编译版本相同的编译器ID,例如VC6或者VC9,不然编译出来的扩展没法载入


扩展 PHP ( *.h 文件修改补充)

http://yanbin.org/archive/extending-php-part-one.html

clipboard.png


Developing custom PHP extensions PECL Tutorials 从源程序编译 DLL

http://yushine.iteye.com/blog/858917


错误:

php5ts.lib引入异常

http://bbs.csdn.net/topics/391999702

1>------ 已启动生成: 项目: my_fopen, 配置: Release_TS Win32 ------

1>  my_fopen.c

1>     正在创建库 .\Release_TS\php_my_fopen.lib 和对象 .\Release_TS\php_my_fopen.exp

1>my_fopen.obj : error LNK2019: 无法解析的外部符号 _zend_parse_parameters,该符号在函数 _zif_confirm_my_fopen_compiled 中被引用

1>my_fopen.obj : error LNK2019: 无法解析的外部符号 __imp__spprintf,该符号在函数 _zif_confirm_my_fopen_compiled 中被引用

1>my_fopen.obj : error LNK2019: 无法解析的外部符号 __imp__php_info_print_table_header,该符号在函数 _zm_info_my_fopen 中被引用

1>my_fopen.obj : error LNK2019: 无法解析的外部符号 __imp__php_info_print_table_start,该符号在函数 _zm_info_my_fopen 中被引用

1>my_fopen.obj : error LNK2019: 无法解析的外部符号 __imp__php_info_print_table_end,该符号在函数 _zm_info_my_fopen 中被引用

1>.\Release_TS/my_fopen.dll : fatal error LNK1120: 5 个无法解析的外部命令

====== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ======


PHP与扩展 TS NTS 没统一 不兼容

http://www.th7.cn/Program/php/201408/253791.shtml


一个版本的php没有开启线程安全和另一个开启了线程安全的版本下编译的扩展,当他们在一起时就报类似的错误,原因是一个开启线程安全,一个没有


php  -v

Module compiled with build ID=API20090626,TS,debug

PHP    compiled with build ID=API20090626,TS

These options need to match

in Unknown on line 0





Reference:

http://kimi.it/496.html

http://www.laruence.com/2009/04/28/719.html

Build your own PHP on Windows

https://wiki.php.net/internals/windows/stepbystepbuild

用C/C++扩展你的PHP 为你的php增加功能

http://www.jb51.net/article/31216.htm

英文版下载: PHP 5 Power Programming

http://www.jb51.net/books/61020.html


相关推荐

发表评论