DSP

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

2019-07-13 17:51发布

最近项目需求,需要自己开发一个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中测试,      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了