关于PHP自定义扩展加载的问题
2012-06-26 21:49
381 查看
最近项目需求,需要自己开发一个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了
自己疏忽没有看准问题所在,造成这个问题托了好几天:
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了
相关文章推荐
- 关于PHP自定义扩展加载的问题
- 关于PHP自定义扩展加载的问题
- 关于windows在php.ini加载的问题
- 关于php扩展编程如何返回数组的问题
- 关于扩展HTMLParser,解决自定义tag的问题
- 关于thinkphp5.0 rc4.0扩展类库自动与手动加载的问题
- win7 64位 php无法加载mysql扩展的问题
- PHP intl扩展安装/ext/php_intl.dll文件无法动态加载的问题
- 设置php在apache下加载ini配置文件路径,~和curl扩展无法加载的问题
- php环境搭建问题(简单记录二------php5.2不加载mysql扩展)
- PHP7 学习笔记(三)关于PHP7如何安装调试工具Xdebug扩展以及Zephir的问题
- 关于自定义对话框加入自定义ListView和getView多次加载导致EditText获取文本的问题
- 最近碰到个问题,关于php扩展编程如何返回数组的问题
- 关于PHP编译添加的扩展与外部扩展的问题
- 关于Mac安装PHP相关扩展出现Zend/zend_config.h缺失的问题记录
- 关于2003+IIS6.0+PHP 中ISAPI显示未加载问题解决方法
- 解决PHP Redis扩展无法加载的问题
- 关于php编译安装扩展模块memcache的问题
- 关于php无法加载组件和Apache启动报错“PHP错误:LoadModule takes two arguments..."的问题
- 关于php.ini配置文件不能加载的问题