taoCMS是基于php+sqlite/mysql的国内最小(100Kb左右)的功能完善的CMS管理系统

warning: implicit declaration of function 'php_var_dump' is invalid in C99解决方法

编译扩展时遇到这个警告:/var/www/php-5.3.26/ext/taodemo/taodemo.c:670:9: warning: implicit declaration      of function 'php_var_dump' is invalid in C99      [-Wimplicit-function-declaration]        php_var_dump(args[i], 1 TSRMLS_CC);        ^1 warning generated.引入php_var.h文件即可:#include "ext/stan
发布时间:2013-08-09 | 类别:技术文章 | 阅读:82866 | 评论:0 | 标签:PHP内核 PHP内核 PHP内核

Zend API:支持初始化文件(php.ini)

PHP4 重写了对初始化文件的支持。现在你可以直接在代码中指定一些初始化选项,然后在运行时读取和改变这些选项值,甚至还可以在选项值改变时接到相关通知。如果想要为你的模块创建一个 .ini 文件的配置节,可以使用宏 PHP_INI_BEGIN() 来标识这个节的开始,并用 PHP_INI_END() 表示该配置节已经结束。然后在两者之间我们用PHP_INI_ENTRY() 来创建具体的配置项。1PHP_INI_BEGIN()2PHP_INI_ENTRY("first_ini_entry",  "has_string_value", PHP_INI_ALL, NULL)3PHP_INI_ENTRY(&quo
发布时间:2013-08-03 | 类别:技术文章 | 阅读:44219 | 评论:0 | 标签:PHP内核 PHP内核 PHP内核

PHP源码分析-数组

PHP中经常使用数组,使用数组最大的好处便是速度!读写都可以在O(1)内完成,因为它每个元素的大小都是一致的,只要知道下标,便可以瞬间计算出其对应的元素在内存中的位置,从而直接取出或者写入。那么内核中是如何实现的呢?PHP大部分功能,都是通过HashTable来实现,其中就包括数组。HashTable即具有双向链表的优点,同时具有能与数据匹敌的操作性能。PHP中的定义的变量保存在一个符号表里,而这个符号表其实就是一个HashTable,它的每一个元素都是一个zval*类型的变量。不仅如此,保存用户定义的函数、类、资源等的容器都是以HashTable的形式在内核中实现的。下面分别来看在PHP、内核中如何定义数组.PHP中定义数组:[php] view plaincopy<?php &nb
发布时间:2013-07-31 | 类别:技术文章 | 阅读:39094 | 评论:0 | 标签:PHP内核 PHP内核 PHP内核

PHP函数源码中的return_value变量,return_value哪里来的

最近在看PHP的C源码,经常发现在函数定义中莫名其妙地出现一个没有任何声明的return_value变量,Google了一下才知道,这个变量是通过宏展开的。在mainphp.h中:#define PHP_FUNCTION ZEND_FUNCTION在Zendzend_API.h中:#define ZEND_FN(name) zif_##name #define ZEND_NAMED_FUNCTION(name) void name(INTERNAL_FUNCTION_PARAMETERS) #define ZEND_FUNCTION(name) ZEND_NAMED_FUNCTION(ZEND_FN(name))在Zendzend.h中:#define INTERNAL_FUNCTION_PARAM
发布时间:2013-07-07 | 类别:技术文章 | 阅读:46218 | 评论:0 | 标签:PHP内核 PHP内核 PHP内核

php扩展的全局变量

   php的扩展有时候需要从php.ini中读取一些配置信息,在用ext_skel向导生成的扩展中已经包含这些,只是代码都是注释的。 今天调试都通过了,在这把过程写出来。     ext_skel生成的扩展框架有两个主要的程序文件 stone.c  ,php_stone.h . 打开php_stone.h 找到 52 ZEND_BEGIN_MODULE_GLOBALS(stone) 53 long global_value; 54 char *global_string; 55 ZEND_END_MODULE_GLOBALS(stone)去掉注释, 这里默认定义了两个 global_value,
发布时间:2013-07-05 | 类别:技术文章 | 阅读:45416 | 评论:0 | 标签:PHP内核 PHP内核

TSRMLS_CC是什么

原文地址:http://blog.libssh2.org/index.php?/archives/22-What-the-heck-is-TSRMLS_CC-anyway.html如果你曾经做过php内核或者是php扩展方面的工作,你一定见到过这个到处都是的结构,但是却从来没有人提起过它。知道这是什么的人典型回答不知道的人都会这样说:“不用管它是什么,只需要在这里、这里还有这里用,如果编译器说少一个tsrm_ls,就加一个...”。这样回答并非都是因为这个人懒惰(的确是有一点点懒),其实那只是在说引擎甚至可以不管这个神奇的值在简化什么,这是因为一个新入门的扩展开发者知道它的结构没有什么益处。这信息就像奶牛的意见一样,没关系,就是牛叫而已。既然我喜欢听自己喋喋不休的无意义主题(这个月我已经少写很多博客了),我想我
发布时间:2013-07-05 | 类别:技术文章 | 阅读:49932 | 评论:0 | 标签:PHP内核 PHP内核 PHP内核

深入理解PHP内核之变量(zval)的结构

第一节 变量的结构每门计算机语言都需要一些容器来保存变量数据。在一些语言当中,变量都有特定的类型,如字符串,数组,对象等等。比如C和Pascal就属于这种。而php则没有这样的类型。在PHP中,一个变量在某一行是字符串,可能到下一行就变成了数字。变量可以经常在不同的类型间轻易的转化,甚至是自动的转换。 PHP之所以成为一个简单并且强大的语言,很大一部分的原因是它拥有弱类型的变量。但是有些时候这也会带来一些问题。在PHP内部,所有的变量都保存在zval结构中,也就是说,zval使用同一种结构存储了包括int、array、string等不同数据类型。它不仅仅包含变量的值,也包含变量的类型。变量容器中包含一些Zend引擎用来区分是否引用的字段。同时它也包含这个值的引用计数。那么,zval是如何做到的呢,下面我们一起来
发布时间:2013-07-05 | 类别:技术文章 | 阅读:45842 | 评论:48 | 标签:PHP内核 PHP内核 PHP内核

php内核:变量的赋值和销毁

在强类型的语言当中,当使用一个变量之前,我们需要先声明这个变量。然而,对于PHP来说, 在使用一个变量时,我们不需要声明,也不需要初始化,直接对其赋值就可以使用,这是如何实现的?变量的声明和赋值在PHP中没有对常规变量的声明操作,如果要使用一个变量,直接进行赋值操作即可。在赋值操作的同时已经进行声明操作。 一个简单的赋值操作:$a = 10;使用VLD扩展查看其生成的中间代码为 ASSIGN。 依此,我们找到其执行的函数为ZEND_ASSIGN_SPEC_CV_CONST_HANDLER。 (找到这个函数的方法之一:$a为CV,10为CONST,操作为ASSIGN。 其他方法可以参见opcode处理函数查找) CV是PHP在5.1后增加的一个在编译期的缓存。如我们在使用VLD查看上面的PHP代码生成的
发布时间:2013-03-11 | 类别:技术文章 | 阅读:38644 | 评论:0 | 标签:PHP内核 PHP内核

PHP原理之内存管理中难懂的几个点

PHP的内存管理, 分为俩大部分, 第一部分是PHP自身的内存管理, 这部分主要的内容就是引用计数, 写时复制, 等等面向应用的层面的管理. 而第二部分就是今天我要介绍的, zend_alloc中描写的关于PHP自身的内存管理, 包括它是如何管理可用内存, 如何分配内存等.  另外, 为什么要写这个呢, 因为之前并没有任何资料来介绍PHP内存管理中使用的策略, 数据结构, 或者算法. 而在我们平时开发扩展, 修复PHP的bug的时候, 却对这一部分的知识需要有一个良好的理解. PHP开发组内的很多朋友也对这块不是很清楚, 所以我觉得有必要专门写一下.  一些基本的概念, 我就不赘述了, 因为看代码很容易能看懂, 我这里就主要介绍几个看代码没那么容易看懂的点, 为什么这么说呢, 呵呵, 我在写文章之前, 查找了下
发布时间:2011-12-25 | 类别:技术文章 | 阅读:48530 | 评论:0 | 标签:PHP内核 PHP内核 PHP内核

公告

taoCMS发布taoCMS2.5Beta5(最后更新14年05月25日),请大家速速升级,欢迎大家试用和提出您宝贵的意见建议。

捐助与联系

☟请使用新浪微博联系我☟

☟在github上follow我☟

标签云