关于PHP自定义扩展加载的问题

17 篇文章 0 订阅
10 篇文章 0 订阅

最近项目需求,需要自己开发一个PHP扩展。在WIN32下载编译成功,可以在加载过程老是出问题。

自己疏忽没有看准问题所在,造成这个问题托了好几天:

PHP Warning: PHP Startup: ****:

Unable to initialize module

Module compiled with build ID=API20090626,TS VC6

PHP    compiled with build ID=API20090626,TS,VC9

由于扩展我是用VC6编译的,PHP是用VC9编译的,VC编译版本不匹配,造成无法加载成功。

解决方法:

在config.w32.h文件中加入编译版本

#define PHP_COMPILER_ID "VC9"   //保持一致

编译成功

 

============================================================

下面分享扩展教程:

1、下载php源码

2、到ext目录下找到ext_skel_win32.php

     在dos下运行

     php ext_skel_win32.php --extname=myextension

     //使用php解释这个php文件

     //如果没有找PHP,说明你的PHP不在环境变量中,设置

3、如果成功会在ext目录下面生成一个myextension的目录,那么你的扩展的源码就在这个文件夹下面了

     你会看到.dsp文件,用vc打开这个文件。

4、添加你自己的扩展函数

     在h头文件中找到

     PHP_FUNCTION(confirm_idict_compiled);    /* For testing, remove later. */

     在下面添加自己的函数

     PHP_FUNCTION(my_test);

     在:

     PHP_FE(confirm_idict_compiled,    NULL)下面添加自已的函数:

     PHP_FE(my_test,    NULL)

 

     查找:

     PHP_FUNCTION(confirm_idict_compiled)

     按照这个函数在加入自己的函数

5、编译成功。

6、测试、加载:

     将生成的myextension.dll拷贝到php的extension目录下

     extension = php_myextention.dll

7、重启apache,在自己php中测试,

     <?php

         echo my_test();

     ?>

8、成功

 

============================================================

这个过程只适用于windows下面的PHP,linux下面的程序在后面的文章中贴出。

 

Linux 下的编译

 

在LINUX下的编译基本同上

和几个不同的地方

1、生成扩展基本文件同上

2、修改config.m4文件,下面是相邻的三行,把dnl去掉就OK了

     dnl PHP_ARG_WITH(hello, for hello support

     dnl Make sure that the comment is aligned

     dnl [ --with-hello Include hello support])

3、phpize, 进入生成的扩展文件夹,使用phpize生成configure文件,

     phpize --with-php-config = /usr/local/bin/php-config

     如果找不到phpize, 使用whereis phpize 可以找到

4、make

5、make install

6、进入你的默认extension文件夹,能找到你编译成功的extension了

 

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值