C语言学堂之简单利用C语言创建PHP扩展

    作者:课课家更新于: 2019-03-01 17:06:51

    大神带你学编程,欢迎选课

      C语言作为一门元老级的编程语言被广大编程教材作为学习编程的基础语言,而php作为新兴的一种通用开源脚本语言因其独特的语法以及有着在Web开发方面的便利性而深受网站开发者们的欢迎。或许有同学会问没有学过PHP只学过C能不能进行web开发相关的工作呢?答案当然是可以的,只是需要的时间比较长和开发难度比较复杂。本次的讲解课课家笔者就简单为大家介绍如何利用C创建PHP扩展的步骤和方法,让大家在进行编写程序的时候多一种方法。

    C语言学堂之简单利用C语言创建PHP扩展_编程语言_C语言_PHP扩展_课课家

    PHP扩展

      ◎了解优缺点

      首先笔者先给大家列出使用C创建PHP扩展的优缺点,让大家对此有一个比较初步的了解。

      利用C创建PHP扩展的优点:

      ①能够提高运行效率。

      ②能够降低PHP复杂度,可以直接调用扩展方法实现功能。

      ③方便与第三方库交互。

      利用C创建PHP扩展的缺点:

      ①开发比PHP复杂。

      ②可维护性降低。

      ③开发周期变长。利用PHP开发在发现问题后,我们只要修复问题就可以见到效果。如果使用扩展修复后需要重新编译和重启服务才能见到效果。

      在介绍完优缺点后,下面笔者先给大家举一个以PHP语言将url字符串转换成超链接的例子,具体实现方法如下所示:

      

      functionstrtolink($url,$name='',$openwin=0){

      $name=$name==''?$url:$name;

      $openwin=$openwin==1?'target="_blank"':'';

      return''.$name.'';

      }

      echostrtolink('http://www.kokojia.com/fdipzone','fdipzoneblog',1);

      ?>

      接下来笔者使用C来做这个方法的扩展,由于开发PHP扩展需要使用到ext_skel工具包,所以我们要先找到这工具包并作出相应的修改,通常此工具包在PHP安装包的/ext/中,具体比如:PHP-5.3.15/ext/ext_skel。在找到工具包后大家就可以按照笔者以下七个步骤来利用C试创建PHP扩展了。

      ①首先我们创建skel文件,保存为strtolink.skel。

      stringstrtolink(stringurl,stringname,intopenwin)

      ②进行创建扩展框架的操作

      ./ext_skel--extname=strtolink--proto=strtolink.skel

      cdstrtolink

      ③进行修改配置文件config.m4的操作

      这一步的具体操作为将这10,11,12三行前面的dnl去掉。

      dnlPHP_ARG_WITH(strtolink,forstrtolinksupport,

      dnlMakesurethatthecommentisaligned:

      dnl[--with-strtolinkIncludestrtolinksupport])

      也就是修改为:

      PHP_ARG_WITH(strtolink,forstrtolinksupport,

      Makesurethatthecommentisaligned:

      [--with-strtolinkIncludestrtolinksupport])

      ④实现功能

      接下来我们修改strtolink.c,将PHP_FUNCTION(strtolink)这个方法修改为:

      PHP_FUNCTION(strtolink)

      {

      char*url=NULL;

      char*name=NULL;

      intargc=ZEND_NUM_ARGS();

      inturl_len;

      intname_len;

      longopenwin=0;

      char*opentag;

      char*result;

      if(zend_parse_parameters(argcTSRMLS_CC,"s|sl",&url,&url_len,&name,&name_len,&openwin)==FAILURE)

      return;

      if(name==NULL||strlen(name)==0){

      name=url;

      }

      if(openwin==1){

      opentag="target=\\"_blank\\"";

      }else{

      opentag="";

      }

      url_len=spprintf(&result,0,"%s",url,opentag,name);

      RETURN_STRINGL(result,url_len,0);

      PHP_error(E_WARNING,"strtolink:notyetimplemented");

      }

      ⑤进行编译扩展的操作

      PHPize

      sudo./configure

      sudomake

      sudomaketest

      make如果出现error:‘PHP_FE_END’undeclaredhere(notinafunction)

      接下来使用下面语句来解决并在此之后再重新进行编译的操作。

      sed-i's|PHP_FE_END|{NULL,NULL,NULL}|'./strtolink.c

      sed-i's|ZEND_MOD_END|{NULL,NULL,NULL}|'./strtolink.c

      成功后在strtolink/modules下找到strtolink.so文件。

      ⑥进行添加扩展的操作

      我们将strtolink.so复制到PHP扩展目录,此时我们可以通过PHPinfo的extension_dir查看扩展目录位置。

      sudocPStrtolink.so/usr/lib/PHP5/20090626/strtolink.so

      修改PHP.ini并在最后添加extension="strtolink.so"。

      重启动apache,此时我们在PHPinfo中会见到新扩展strtolink。

      ⑦进行使用扩展的操作

      最后我们用回之前的PHP,在这里我们只需把strtolinkfunction去掉就可以了。此方法已在扩展实现并可直接调用。

      01.

      02.

      03.echostrtolink('http://www.kokojia.com/fdipzone','fdipzoneblog',1)."\\r\\n";

      04.echostrtolink('http://www.kokojia.com/fdipzone','fdipzoneblog',0)."\\r\\n";

      05.echostrtolink('http://www.kokojia.com/fdipzone','fdipzoneblog')."\\r\\n";

      06.echostrtolink('http://www.kokojia.com/fdipzone','',1)."\\r\\n";

      07.echostrtolink('http://www.kokojia.com/fdipzone','')."\\r\\n";

      08.echostrtolink('http://www.kokojia.com/fdipzone',NULL,NULL)."\\r\\n";

      09.

      10.?>

      输出结果

      fdipzoneblog

      fdipzoneblog

      fdipzoneblog

      http://www.kokojia.com/fdipzone

      http://www.kokojia.com/fdipzone

      http://www.kokojia.com/fdipzone

      以上就是利用C创建PHP扩展的全部过程。

      本次的C语言学堂之简单利用C语言创建PHP扩展的讲解到此就暂告一段落,如果以后有什么相关的内容进行补充或者修改的话,笔者会在此继续进行相关的内容的补充或者修改的工作,同时也欢迎大家对本次的讲解提出自己的建议和补充。最后笔者希望本次的教程对大家学习C语言能够起到一定的帮助作用!

课课家教育

未登录