在日常的调试中,我们经常需要输出数组,但是print_r函数输出的数组是没有格式的,不太好看,

为了方便,我们只要自己增加一个函数,如

function dump($arr) {

echo '< pre>';

print_r($arr);

echo '< /pre>';

}

例如thinkphp就是这么做的,但是个人感觉太麻烦了,

如果php有个类似的内置函数,那不是方便多了?为此我们可以更改print_r的源代码,让他在输出数组前先输出pre标签,print_r的源代码在ext/standard/basic_functions.c中,

但是呢,修改php的原有函数毕竟不太好,我们还是新添加一个扩展好了。

我们添加一个tiyee扩展,增加一个dump()函数

代码如下

cd /path/to/phpsource/ext

./ext_skel --extname=tiyee

cd tiyee

vi config.m4

出现如下提示

$ cd ..

$ vi ext/tiyee/config.m4

$ ./buildconf

$ ./configure --\[with|enable\]-tiyee

$ make

$ ./sapi/cli/php -f ext/tiyee/tiyee.php

$ vi ext/tiyee/tiyee.c

$ make

Repeat steps 3-6 until you are satisfied with ext/tiyee/config.m4 and

step 6 confirms that your module is compiled into PHP. Then, start writing

code and repeat the last two steps as often as necessary.

然后进入生成的文件夹,打开config.m4

cd tiyee

vi config.m4

然后,将里面的代码里面的16-18行前面的dnl注释去掉,即改成如下

PHP_ARG_ENABLE(tiyee, whether to enable tiyee support,

Make sure that the comment is aligned:

[ --enable-tiyee Enable tiyee support])

然后运行

phpize

生成如下提示

Configuring for:

PHP Api Version: 20121113

Zend Module Api No: 20121212

Zend Extension Api No: 220121212

打开php_tiyee.h,在PHP_FUNCTION(confirm_tiyee_compiled); /* For testing, remove later. */下面增加一行(你其实也可以直接更改它)

PHP_FUNCTION(confirm_tiyee_compiled); /* For testing, remove later. */

PHP_FUNCTION(dump);

然后打开tiyee.c,在PHP_FE(confirm_tiyee_compiled, NULL) /* For testing, remove later. */下面增加一行

改成

PHP_FE(confirm_tiyee_compiled, NULL) /* For testing, remove later. */

PHP_FE(dump, NULL)

然后下面增加具体的函数,可以在

PHP_FUNCTION(confirm_tiyee_compiled)

{

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, "Congratulations! You have successfully modified ext/%.78s/config.m4. Module %.78s is now compiled into PHP.", "jumtao", arg);

RETURN_STRINGL(strg, len, 0);

}

增加一行,变成

PHP_FUNCTION(dump)

{

zval *var;

if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &var) == FAILURE) {

RETURN_FALSE;

}

printf("< pre >\n");

zend_print_zval_r(var, 0 TSRMLS\_CC);

printf("< /pre > \n");

}

PHP_FUNCTION(confirm_tiyee_compiled)

{

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, "Congratulations! You have successfully modified ext/%.78s/config.m4. Module %.78s is now compiled into PHP.", "jumtao", arg);

RETURN_STRINGL(strg, len, 0);

}

现在我们可以编译了

./configure --with-php-config=/usr/local/php/bin/php-config /*后面的php-config地址按你的实际地址写*/

make

make install

然后再php.ini里添加

extension=tiyee.so

然后重启php-fpm

试试,这时试试,是不是可以了!

allowedExts php,通过php扩展增加一个内置函数相关推荐

  1. python函数大全和意思_python 之 内置函数大全

    一.罗列全部的内置函数 二.range.xrange(迭代器) 无论是range()还是xrange()都是Python里的内置函数.这个两个内置函数最常用在for循环中.例如: >>&g ...

  2. python中breakpoint什么意思_breakpoint() Python 内置函数

    转载须注明出处:简书@Orca_J35 | GitHub@orca-j35 breakpoint() 是 Python 3.7 中新增加的内置函数,本文介绍了该函数的使用方法,目录结构如下: 目录.j ...

  3. 最全Python函数总结和应用(超详细+建议收藏),基本所有内置函数,心得都在这了,踩的坑也在里面了,最后还有函数的魂

    希望能帮助到你 前言 基础的函数了解 惊喜类 all() 和 any() lambda函数 sorted()函数 map()函数 filter()函数 reduce()函数 eval()函数 zip函 ...

  4. Python常用内置类和常用内置函数汇总

    一:内置类:(1)常用内置类1,class int(object): """ int(x=0) -> integer int(x, base=10) -> i ...

  5. python进制转换内置函数_python数学运算、逻辑运算和进制转化相关的 内置函数...

    学习函数原型 有些朋友平时反映,看不懂官方文档中介绍函数的说明,比如: max(iterable,*[, key, default]) max 函数的几个形参,为什么有 * 符号,又有 []? 今天在 ...

  6. 10个你必须知道的Python内置函数

    自从把精力投入到次幂数据(www.cimidata.com) 这个产品后,貌似很久很久没有写过原创文章了,人一旦懒起来也会形成习惯,反之亦然.一个目标之所以难以坚持,很大可能是太大了. 在我们的一个跑 ...

  7. python编程内置函数使用方法_Python内置函数 next的具体使用方法

    Python 3中的File对象不支持next()方法. Python 3有一个内置函数next(),它通过调用其next ()方法从迭代器中检索下一个项目. 如果给定了默认值,则在迭代器耗尽返回此默 ...

  8. python内置函数next()用来返回文件下一行_Python内置函数 next的具体使用方法

    Python 3中的File对象不支持next()方法. Python 3有一个内置函数next(),它通过调用其next ()方法从迭代器中检索下一个项目. 如果给定了默认值,则在迭代器耗尽返回此默 ...

  9. 小白打基础一定要吃透的11类 Python 内置函数

    内置函数就是python给你提供的, 拿来直接用的函数,比如print,input等.截止到python版本3.6.2 python一共提供了68个内置函数. 本人在复习过程中将其整理了出来,做成了思 ...

最新文章

  1. Pycharm回退操作+常用批量操作
  2. head在c语言中的作用,阅读以下说明和C语言函数,将应填入(n)处的字句写在对应栏内。【说明】 函数sort (NODE *head)的功能 - 赏学吧...
  3. 【转】Unity Scene场景自定义坐标轴
  4. HTML+CSS+JavaScript复习笔记持更(七)——CSS3常用属性之背景
  5. UI复习练习_优酷布局
  6. 纪中B组模拟赛总结(2020.2.3)
  7. 【经验】在CSS中定义超链接样式a:link、a:visited、a:hover、a:active的顺序
  8. C#: using JsonReader avoid Deserialize Json to dynamic
  9. Windows下用vs2017编译和配置libcurl库(手把手教,适合新人)
  10. 雷林鹏分享:PHP 实例 - AJAX 与 XML
  11. 网易163邮箱和网易126邮箱有什么区别?
  12. mysql添加字段 说明_MYSQL数据库MSSQL 添加字段说明
  13. Altium Designer--如何添加Mark点
  14. 2021年大学生网络安全邀请赛暨第七届上海市大学生网络安全大赛“东华杯”Misc(全)-Writeup
  15. 涂涂乐的详细实现之三--文件IO操作
  16. 计算机主机麦克风三个孔,台式机耳机和麦克风怎么通用一个插孔
  17. Java101班1组作业完成情况
  18. 新版标准日本语初级_第四课
  19. 一张图助你快速记忆CSS所有属性
  20. .net windows service开发与安装

热门文章

  1. Angular(build打包)报错:supplied parameters do not match any signature of call target
  2. python爬取基金历史净值_Python爬取天天基金网历史净值数据
  3. 什么叫云服务器_什么叫云计算,云计算是什么,最通俗的解释是这样的
  4. LeetCode-19 删除链表的倒数第N个节点
  5. IE10,IE9透明元素无法点击
  6. react获取state的值并更新使用
  7. 如何搭建一个node 工程
  8. 重拾python Day 1
  9. js Blob对象介绍
  10. kafka0.8消费者实例