我用c做了一个采集各个网站title的程序,现在想把它加到php扩展中,在网上搜集了关于加扩展的文章,试着做了一下,可在编译相关.c的文件的时候,看到好多以zend开头的函数,那么是否要将c语言的程序修改成相关的zend格式呢?该完了以后还是能是c语言的程序了么?不知道这么说大家理解不。

解决方案 »

  1.   

    都是c语言的语法,函数名只是区分功能用的,哪有什么zend格式?
      

  2.   

    比如说下面的例子,需要在.c的文件中加上:
    PHP_FUNCTION(heiyeluren_test)
    {
        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, "Your input string: %s/n", arg);
        RETURN_STRINGL(strg, len, 0);
    }
    像zend_parse_parameters,RETURN_STRINGL, spprintf这些,都不是c的函数,如果这样的话是否要修改我们的c程序?
      

  3.   

    是的那些大写字母表述的不是 c 函数,而是宏
    和所有解释型语言一样,php扩展函数都需要分为:声明(注册)函数名、声明调用参数、声明函数体,这样的三个过程
    你搜素 heiyeluren_test 字符串,所有与此相关的部分,都是你需要套用的部分这是获取传入的参数
      if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
      return;
      }
    这是返回结果
      RETURN_STRINGL(strg, len, 0);
    这才是你的函数的调用方式
      len = spprintf(&strg, 0, "Your input string: %s/n", arg);也就是说你自己的函数,无论多少都要套用这个结构,不然php不认得
      

  4.   

    感谢你的回复,你说的“其实不用编成php扩展也是一样用的。只需约定好与php交换数据方式就可以了”,应该怎么做呢?在线等!
      

  5.   

    还是用文件作载体,因为文件直观且操作简单。
    php 将需求写到文件 A 中,c程序读取文件 A ,析出指令后执行
    c 程序将执行的结果以 php 代码形式写入文件 B,php 用 include 载入 B 后执行
    从程序可以书写成常驻内存的方式,也可以是命令行方式由系统定时任务或php exec 函数启动
    如果写成 cgi 方式的,使用起来更方便
    返回结果用 php 程序形式的好处在于,php可直接使用而不需解释子符串