您的位置:首页 > 编程语言 > C语言/C++

基于Visual c++ 2012的php扩展开发 - HelloWord!

2017-02-13 16:03 603 查看
1、cmd进入命令行模式,并进入php-5.6.20-src/ext源代码的ext目录下
输入命令
php ext_skel_win32.php --extname=HelloWord
,执行结果如下图:


执行后在ext目录下多了
HelloWord
文件夹



文件夹中的
HelloWord.dsp
是Viscual C++的工程文件



从php的安装目录中的dev文件夹下,找到
php5ts.lib
,复制到创建的HelloWord扩展目录下

用Vs2012打开
HelloWord.dsp
工程文件,调试模式选择
Release
模式,



F5启动调试,发生错误,提示如下:
c:\php-5.6.20-src\zend\zend_config.w32.h(25): fatal error C1083: 无法打开包括文件:“../main/config.w32.h”: No such file or directory




说明
main/config.w32.h
文件缺失,网上搜索了诸多办法,均失效,或许是以前的版本有效,现在这里提供正确的解决办法:

添加
config.w32.h
文件
在php源代码文件目录里搜索
config.w32.h
,在
C:\php-5.6.20-src\win32\build
文件夹里找到
config.w32.h.in
,将这个文件复制到
C:\php-5.6.20-src\main
文件夹里,去掉后面的
.in

注意:为了让扩展能和php运行环境严格匹配,要根据你的php运行环境的编译版本(php5.6.20是VC11编译的),在
config.w32.h
文件里加上:
#define PHP_COMPILER_ID "VC11"


此时再重新编译,编译成功,在php-5.6.20-src目录下生成了
Release_TS
目录,里面有生成的扩展文件
php_HelloWord.dll




此时我们将
php_HelloWord.dll
拷贝到
C:/php/ext
目录下,并设置php.ini文件增加
extension=php_HelloWord.dll
,并重启Apache服务器
此时我们用
phpinfo()
函数测试,发现已经成功安装了php_HelloWord.dll扩展



打开HelloWord.c文件
找到如下函数:

PHP_FUNCTION(confirm_HelloWord_compiled)
{

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, "Congratulations! You have successfully modified ext/%.78s/config.m4. Module %.78s is now compiled into PHP.", "HelloWord", arg);
RETURN_STRINGL(strg, len, 0);
}


在下面增加函数HelloPHP

PHP_FUNCTION(HelloPHP)
{
RETURN_STRING("Hello PHP Ext!", 1);
}


找到如下代码:

const zend_function_entry HelloWord_functions[] = {
PHP_FE(confirm_HelloWord_compiled,  NULL)       /* For testing, remove later. */
PHP_FE_END  /* Must be the last line in HelloWord_functions[] */
};


并修改如下:

const zend_function_entry HelloWord_functions[] = {
PHP_FE(confirm_HelloWord_compiled,  NULL)       /* For testing, remove later. */
PHP_FE(HelloPHP,    NULL)
PHP_FE_END  /* Must be the last line in HelloWord_functions[] */
};


重新编译,生成php_HelloWord.dll

此时将php_HelloWord.dll复制到php/ext目录下,我们编写测试php代码如下:

<?php
echo HelloPHP();
?>


可以看到执行结果:



自此第一个简单的扩展开发完成!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: