php扩展函数调用扩展中的标准函数
2016-07-29 17:35
274 查看
这几天在写php的扩展函数,在网上学习步骤什么的都有,一般问题也都能查到,所以就不再此啰嗦,写这篇博客的原因是因为遇到的一个问题,百度谷歌都没找到,对于初学者,这个或许有用,对于过来人,我想他们肯定也遇到过,所以想想还是写出来吧。
问题:在php的扩展中想调用c已经写好的东西,但是不知道怎么调用,此处想调用的是standard中的标准函数
首先把要调用的标准库的头文件include 进来
如:#include "ext/standard/php_rand.h" 把随机数的头文件加载进来
我们只能调用php_rand.h 头文件声明的PHPAPI函数,如php_rand.h中声明的这些函数:
PHPAPI void php_srand(long seed TSRMLS_DC);
PHPAPI long php_rand(TSRMLS_D);
PHPAPI void php_mt_srand(php_uint32 seed TSRMLS_DC);
PHPAPI php_uint32 php_mt_rand(TSRMLS_D);
这些函数的具体代码在rand.c中都可以找到,调用这些标准函数的参数大概也可以知道,如果还是不清楚,参数代表的是什么,还有一个办法,就是查看别的函数是如何调用的,仿照它传参就行。如:我想调用php_rand函数,但是我不清楚它那个参数是什么意思,在rand.c中搜索调用它的函数,可以找到如下代码段:
PHP_FUNCTION(rand)
{
long min;
long max;
long number;
int argc = ZEND_NUM_ARGS();
if (argc != 0 && zend_parse_parameters(argc TSRMLS_CC, "ll", &min, &max) == FAILURE)
return;
number = php_rand(TSRMLS_C); //这就是调用的例子,仿照这个进行调用
if (argc == 2) {
RAND_RANGE(number, min, max, PHP_RAND_MAX);
}
RETURN_LONG(number);
}
TSRMLS_C代表线程安全,可以直接使用,所以用的时候照着那个传就行。如果参数是别的,你就找参数的来源,在源文件中搜索或者参数是php调用的时候传的,总之可以找到参数的意义,你就可以使用了。
然后在你的扩展代码 .c文件中
#include "ext/standard/php_rand.h"
代码中正常调用函数:
int number = php_rand(TSRMLS_C);
返回的number就是你要的结果
问题:在php的扩展中想调用c已经写好的东西,但是不知道怎么调用,此处想调用的是standard中的标准函数
首先把要调用的标准库的头文件include 进来
如:#include "ext/standard/php_rand.h" 把随机数的头文件加载进来
我们只能调用php_rand.h 头文件声明的PHPAPI函数,如php_rand.h中声明的这些函数:
PHPAPI void php_srand(long seed TSRMLS_DC);
PHPAPI long php_rand(TSRMLS_D);
PHPAPI void php_mt_srand(php_uint32 seed TSRMLS_DC);
PHPAPI php_uint32 php_mt_rand(TSRMLS_D);
这些函数的具体代码在rand.c中都可以找到,调用这些标准函数的参数大概也可以知道,如果还是不清楚,参数代表的是什么,还有一个办法,就是查看别的函数是如何调用的,仿照它传参就行。如:我想调用php_rand函数,但是我不清楚它那个参数是什么意思,在rand.c中搜索调用它的函数,可以找到如下代码段:
PHP_FUNCTION(rand)
{
long min;
long max;
long number;
int argc = ZEND_NUM_ARGS();
if (argc != 0 && zend_parse_parameters(argc TSRMLS_CC, "ll", &min, &max) == FAILURE)
return;
number = php_rand(TSRMLS_C); //这就是调用的例子,仿照这个进行调用
if (argc == 2) {
RAND_RANGE(number, min, max, PHP_RAND_MAX);
}
RETURN_LONG(number);
}
TSRMLS_C代表线程安全,可以直接使用,所以用的时候照着那个传就行。如果参数是别的,你就找参数的来源,在源文件中搜索或者参数是php调用的时候传的,总之可以找到参数的意义,你就可以使用了。
然后在你的扩展代码 .c文件中
#include "ext/standard/php_rand.h"
代码中正常调用函数:
int number = php_rand(TSRMLS_C);
返回的number就是你要的结果
相关文章推荐
- POC Pro -- RTP/RTSP/HLS应用
- thinkPHP bug解决
- 在ubuntu下纯指令方式搭建php开发环境
- FileZilla客户端使用遇到的问题
- 表单提交后分页页面标签POST实现 —— 一个小小的bug引发的思考
- input 判断文件类型
- CodeIgniter 如何去掉 Index.php
- 111. PHP 流
- IO流之创建文件并fileInputStream、fileOutputStream 读写操作
- php获取时间戳/基本绘图及验证码、水印
- php 下载保存文件保存到本地的两种实现方法
- 基于原生PHP的路由分配实现
- PHP FTP 文件上传
- thinkphp 3.2 CronRunBehavior.class 使用
- PHP GD库生成图像的几个函数总结
- php图像处理大全
- Laravel migration PHP Storm遇到的问题:failed to open stream: Operation now in progress
- php header功能的使用
- Zendstuido汉化方法
- PHP 引用 返回引用 静态变量的问题