首页 后端开发 php教程 windows上制作PHP扩展

windows上制作PHP扩展

Jun 13, 2016 am 10:31 AM
nbsp php visual windows

windows下制作PHP扩展

windows下制作PHP扩展
2011年01月26日
  转自:http://demon.tw/software/compile-php-on-windows.ht ml
  编译PHP扩展必需的一些头文件需要从php源码中获取,其中有一些配置性的头文件,需要做到下面第8步之后,也就是说php服务器程序可以使用别人已经编译好的安装包。 最近在学习编写PHP拓展,懒得装Linux,就研究了一下在Windows下编译PHP的方法,总算搭建好了在Windows下开发PHP拓展的环境。
  1、在C盘新建一个文件夹,C:\PHPDEV
  2、从官网下载最新版(我这里用的是5.2.14)的PHP源码,将下tar.gz或tar.bz2压缩包保存到C:\PHPDEV,解压到当前文件夹
  3、下载php win32 build extras并保存到C:\PHPDEV,解压到当前文件夹
  4、获取编译好的bison.exe和flex.exe,保存到桌面或者其他C:\PHPDEV以外的地方。分别打开压缩包并进入bin文件夹,将bison.exe和flex.exe复制到C:\Windows文件夹
  5、假定你已经安装了Visual Studio 2008(我个人不推荐用Visual Studio 2008,推荐使用Platform SDK Febrary 2003,官方的编译版本就是用这个PSDK编译的,但是这里用Visual Studio 2008做说明),开始菜单->Microsoft Visual Studio 2008->Visual Studio Tools->Visual Studio 2008 Command Prompt,打开Visual Studio 2008命令提示行
  6、用cd命令将目录切换到C:\PHPDEV\php-5.2.14
  7、输入buildconf.bat,回车。这个批处理的作用是搜索所有的.w32文件并为你创建configure.js
  8、输入下面的命令
  cscript /nologo configure.js  without-xml  without-wddx  without-simplexml  without-dom  without-libxml  disable-zlib - without-sqlite  disable-odbc  disable-cgi  enable-cli  enable-debug  without-iconv  disable-ipv6
  为什么要disable和without那么多功能呢?因为这些功能需要的库文件并没有包含在PHP的源码包中(不然会很大),这些额外的库文件需要你自己去下载(要找全不是那么容易的)。如果你不禁用这些功能,会出现编译错误。
  9、输入nmake,回车
  10、第9步中可能会出现文件的编码错误,找到出现错误的文件,用EditPlus选择Western European (Windows)编码打开后另存为utf-8编码,重写nmake即可
  11、编译好以后切换到C:\PHPDEV\php-5.2.6\Debug_TS,测试一下
  php -r "echo 'hello,world';" 二、windows下开发PHP扩展
  转自:http://blog.csdn.net/linvo/archive/2009/04/17/4086 909.aspx
  第一步:准备
  1、php源码包和windows下的二进制包,以及安装Visual C++,并把Microsoft Visual Studio\Common\MSDev98\Bin的绝对路径添加到windows环境变量
  2、解压源码包到d:\php_src
  3、进入d:\php_src\ext目录,复制skeleton文件夹,并重命名为要开发扩展的名字,本例为"linvo"
  4、把二进制包中dev目录下的php5ts.lib文件,拷入新建的linvo目录
  5、编辑linvo目录中的php_skeleton.h、skeleton.c、skeleton.dsp这三个文件,替换内容中所有extname为linvo,EXTNAME为LINVO。(严格区分大小写)
  第二步:编码
  6、编辑php_skeleton.h文件(头文件)
  在PHP_FUNCTION(confirm_linvo_compiled);下面编写
  PHP_FUNCTION(hello);
  声明一个hello函数
  7、编辑skeleton.c文件(主文件)
  在PHP_FE(confirm_linvo_compiled, NULL) 下面编写
  PHP_FE(hello, NULL)
  这是函数入口,下面该写函数主体了
  找到PHP_FUNCTION(confirm_test_compiled)函数,该函数是测试函数,在该函数后面新写一个函数
  PHP_FUNCTION(hello)
  {
  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, "Hello,%s", arg);
  RETURN_STRINGL(strg, len, 0);
  }
  第三步:编译
  8、运行cmd命令行,进入d:\php_src\ext\linvo目录
  9、输入 msdev linvo.dsp /MAKE "linvo - Win32 Release_TS"
  10、如果没有错误,则在php_src目录下会生成一个Release_TS文件夹,里面就是编译好的php_linvo.dll扩展
  第四步:使用
  11、将其拷入运行环境中的php扩展目录ext
  12、编辑php.ini添加extension=php_linvo.dll,重启apache
  13、在php文件中执行如下语句 
  echo hello('Linvo');
  将输出
  Hello,Linvo
  14、通过echo phpinfo();也可看到扩展已加载的信息
  linvo
  linvo support enabled 三、加载问题
  当生成的扩展放到文件夹中,并且修改了php.ini之后有可能出现生成的扩展dll并没有被php加载,可以从以下几个方面进行检查。
  1、创建一个php,并且使用phpinfo()函数打出当前php信息,找到php中真实加载的php.ini。
  2、是否已经重启过apache。
  3、查看apache的错误日志,看出现的有没有关于加载扩展出错的一些信息。 如果出现"PHP Warning:  PHP Startup: extname: Unable to initialize module\nModule compiled with module API=20090626, debug=0, thread-safety=1\nPHP    compiled with module API=20060613, debug=0, thread-safety=1\nThese options need to match\n in Unknown on line 0"这样的提示,说明编译时使用源码版本与php的应用程序不符合(并未要求完全一致的版本) ,如果出现不符合。
  4、写扩展时是否引用了其它dll,对于此种问题原因,详见:
  http://www.guyzyl.com/post-37.html

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

在PHP API中说明JSON Web令牌(JWT)及其用例。 在PHP API中说明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

说明匹配表达式(PHP 8)及其与开关的不同。 说明匹配表达式(PHP 8)及其与开关的不同。 Apr 06, 2025 am 12:03 AM

在PHP8 中,match表达式是一种新的控制结构,用于根据表达式的值返回不同的结果。1)它类似于switch语句,但返回值而非执行语句块。2)match表达式使用严格比较(===),提升了安全性。3)它避免了switch语句中可能的break遗漏问题,增强了代码的简洁性和可读性。

在前端开发中,如何使用CSS和JavaScript实现类似Windows 10设置界面的探照灯效果? 在前端开发中,如何使用CSS和JavaScript实现类似Windows 10设置界面的探照灯效果? Apr 05, 2025 pm 10:21 PM

在前端开发中如何实现类似Windows...

如何加快PS的载入速度? 如何加快PS的载入速度? Apr 06, 2025 pm 06:27 PM

解决 Photoshop 启动慢的问题需要多管齐下,包括:升级硬件(内存、固态硬盘、CPU);卸载过时或不兼容的插件;定期清理系统垃圾和过多的后台程序;谨慎关闭无关紧要的程序;启动时避免打开大量文件。

什么是跨站点伪造(CSRF),您如何在PHP中实施CSRF保护? 什么是跨站点伪造(CSRF),您如何在PHP中实施CSRF保护? Apr 07, 2025 am 12:02 AM

在PHP中可以通过使用不可预测的令牌来有效防范CSRF攻击。具体方法包括:1.生成并在表单中嵌入CSRF令牌;2.在处理请求时验证令牌的有效性。

c 多线程三种实现方式的区别是什么 c 多线程三种实现方式的区别是什么 Apr 03, 2025 pm 03:03 PM

多线程是计算机编程中的重要技术,用来提升程序执行效率。在 C 语言中,有多种实现多线程的方式,包括线程库、POSIX 线程和 Windows API。

如何使用JavaScript区分关闭浏览器标签页和关闭整个浏览器? 如何使用JavaScript区分关闭浏览器标签页和关闭整个浏览器? Apr 04, 2025 pm 10:21 PM

如何在浏览器上使用JavaScript区分关闭标签页和关闭整个浏览器?在日常使用浏览器的过程中,用户可能会同时�...

描述...(SPLAT)操作员在php函数参数和数组解开包装中的目的和用法。 描述...(SPLAT)操作员在php函数参数和数组解开包装中的目的和用法。 Apr 06, 2025 am 12:07 AM

PHP中的...(splat)操作符用于函数参数和数组解包,提升代码简洁性和效率。1)函数参数解包:将数组元素作为参数传递给函数。2)数组解包:将一个数组解包到另一个数组中或作为函数参数。

See all articles