资讯专栏INFORMATION COLUMN

PHP扩展开发:第一个扩展

JerryWangSAP / 1703人阅读

摘要:扩展开发第一个扩展扩展开发安装定时器在上一篇文章扩展开发安装我们已经将开发扩展的环境安装成功,那么接下来采用最简单直接的方式创建第一个扩展。

PHP扩展开发:第一个扩展

《PHP扩展开发:安装PHP》
《POSIX定时器:timer_settime() 》
在上一篇文章《PHP扩展开发:安装PHP》我们已经将开发PHP扩展的PHP环境安装成功,那么接下来采用最简单直接的方式创建第一个扩展。

我们先假设业务场景,是需要有这么一个扩展,提供一个叫ccvita_string的函数,他的主要作用是返回一段字符。(这个业务场景实在太假,大家就这么看看吧)对应的PHP代码可能是这样:

function ccvita_string($str){

 $result = "Link";
 return $result;

}
第一步,生成代码
PHP为了扩展开发的方便,提供了一个类似代码生成器的工具ext_skel,具体可以参见说明。
首先我们创建一个文件ccvita.skel,它的内容为

string ccvita_string(string str)

就是告诉ext_skel这个东西,我们要做的扩展里面有个函数叫ccvita_string。然后执行
cd MooENV/src/php-5.3.8/ext/
./ext_skel --extname=ccvita --proto=ccvita.skel
cd ccvita/

这时候,ccvita这个扩展的代码框架就已经出来了。
第二步,修改配置
然后修改config.m4文件将10、11、12三行最前面的dnl删除掉,就是将

dnl PHP_ARG_WITH(ccvita, for ccvita support,
dnl Make sure that the comment is aligned:
dnl [ --with-ccvita Include ccvita support])

修改为
PHP_ARG_WITH(ccvita, for ccvita support,
Make sure that the comment is aligned:
[ --with-ccvita Include ccvita support])
第三步,实现功能
修改源码ccvita.c文件
找到将ccvita_string这个函数修改为

PHP_FUNCTION(ccvita_string)
{

char *str = NULL;
int argc = ZEND_NUM_ARGS();
int str_len;
char *result;

if (zend_parse_parameters(argc TSRMLS_CC, "s", &str, &str_len) == FAILURE) 
    return;

str_len = spprintf(&result, 0, "Link", str);
RETURN_STRINGL(result, str_len, 0); 

}
第四步,编译扩展
保存后,开始编译

/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
第五步,添加扩展
这时候,一切顺利的话,该扩展已经在modules/ccvita.so这个位置了。下面就是将这个扩展加入到PHP中去,让我们PHP程序可以调用到。

cp modules/ccvita.so /usr/local/php/ext/
vim /usr/local/php/etc/php.ini
extension=/usr/local/php/ext/ccvita.so #在php.ini文件最后增加这一行
service php-fpm restart #重启PHP服务
cp ccvita.php /data/www/wwwroot/default/
接下来就可以访问ccvita.php这个文件,测试扩展了。下一篇,将会涉及一些更深入的内容。

相关代码,可以在我的github上clone出来,地址:https://github.com/KimiChen/P...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/31963.html

相关文章

  • PHP扩展开发教程2 - 编写一个扩展 hello world

    摘要:二下载第一个扩展第一个扩展的源码已经在上准备好了,直接用命令克隆,或者手工下载都可以。第四步确认扩展已经安装成功使用命令可以查看目前已经安装的所有扩展。 PHP扩展是高级PHP程序员必须了解的技能之一,对于一个初入门的PHP扩展开发者,怎么才能开发一个成熟的扩展,进入PHP开发的高级领域呢?本系列开发教程将手把手带您从入门进入高级阶段。本教程系列在linux下面开发(推荐使用cento...

    Berwin 评论0 收藏0
  • PHP扩展开发(一) - 构建一个PHP扩展

    摘要:例如,这里要创建一个名为的扩展现在,在目录下出现了一个新建的扩展目录这时,该扩展是无法编译通过的,需要先编辑文件才行。 首先需要确定系统中安装了gcc编译器,合适版本的bison等,下面是从源码编译安装PHP需要执行的基本命令: # cd php-src # ./buildconf # ./configure --enable-debug --enable-maintainer-zts...

    dongxiawu 评论0 收藏0
  • 如何基于 PHP-X 快速开发一个 PHP 扩展

    摘要:这里看到,表明你的扩展已经加载成功了,现在就可以调用这个扩展函数了。是不是很简单更多上面的例子还比较简单,只是编写了一个扩展函数。 PHP-X是我在2017年年初创建的一个新项目。这个项目的目标就是让有一定工作经验的PHP程序都能够具备扩展开发的能力。 0x00 初衷 从2012年开始编写swoole,现在算来已经有5个年头了。我发现编写一个 PHP 扩展这个工作非常艰难。PHP 程序...

    callmewhy 评论0 收藏0
  • 使用 Zephir 轻松构建 PHP 扩展

    摘要:简介通过扩展,我们可以在代码中使用一些特定的方法大部分的扩展都是用写的。这个目录与我们的扩展同名。我们先来在扩展中创建一个类,使用此类来渲染。接下来命令行执行以下命令来编译扩展第一次运行以上命令时,会初始化一些东西。 showImg(https://segmentfault.com/img/remote/1460000018698586); 简介: 通过 PHP 扩展, 我们可以在 p...

    gaosboy 评论0 收藏0
  • 腾讯与阅文技术合作 微服务框架Tars再添PHP

    摘要:引言作为由腾讯公司开源的优秀框架与服务部署运维解决方案,被阅文集团引入了实际实践中,同时阅文集团对在语言层面进行了能力的补全,令如虎添翼。作为腾讯公司的优秀框架与服务部署运维解决方案,可以满足上述的所有需求。 梁晨(Ted),任职阅文集团技术中心,负责起点中文网的WEB后台开发工作。曾负责腾讯上海企业产品部营销QQWeb后台开发、QQ公众号Web后台开发,对大型网站技术架构,有自己的经...

    yanwei 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<