关于在php中添加c扩展的问题,做过的请来看看! 我用c做了一个采集各个网站title的程序,现在想把它加到php扩展中,在网上搜集了关于加扩展的文章,试着做了一下,可在编译相关.c的文件的时候,看到好多以zend开头的函数,那么是否要将c语言的程序修改成相关的zend格式呢?该完了以后还是能是c语言的程序了么?不知道这么说大家理解不。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 都是c语言的语法,函数名只是区分功能用的,哪有什么zend格式? 比如说下面的例子,需要在.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程序? 是的那些大写字母表述的不是 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不认得 感谢你的回复,你说的“其实不用编成php扩展也是一样用的。只需约定好与php交换数据方式就可以了”,应该怎么做呢?在线等! 还是用文件作载体,因为文件直观且操作简单。php 将需求写到文件 A 中,c程序读取文件 A ,析出指令后执行c 程序将执行的结果以 php 代码形式写入文件 B,php 用 include 载入 B 后执行从程序可以书写成常驻内存的方式,也可以是命令行方式由系统定时任务或php exec 函数启动如果写成 cgi 方式的,使用起来更方便返回结果用 php 程序形式的好处在于,php可直接使用而不需解释子符串 PHP环境的搭建 用PHP安装数据库 出现1064错误 求英文单词分词的东东。 我猜我猜我猜猜猜:php未来的数据库搭挡是谁? php读excel文件,不支持单元格之间的运算。 如何把一个php文件转成htm文件? 超全局变量和全局变量的区别? 新手求页面传值的代码,在线等! php怎么同时批量传二个值zf_id和id执行mysql数据累加和插入? 帮我分析一句SQL,谢谢大家! php无法读取远程URL的XML Jquery+PHP怎样实现文件批量上传?
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程序?
和所有解释型语言一样,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不认得
php 将需求写到文件 A 中,c程序读取文件 A ,析出指令后执行
c 程序将执行的结果以 php 代码形式写入文件 B,php 用 include 载入 B 后执行
从程序可以书写成常驻内存的方式,也可以是命令行方式由系统定时任务或php exec 函数启动
如果写成 cgi 方式的,使用起来更方便
返回结果用 php 程序形式的好处在于,php可直接使用而不需解释子符串