风雪之隅
msgbartop
PHP源码分析,Zend引擎分析,Web技术分享–左手代码 右手诗
msgbarbottom

20 Nov 08 Opcodes list

Opcodes列表   [阅读全文]

20 Nov 08 深入理解PHP原理之foreach

foreach是PHP中很常用的一个用作数组循环的控制语句。
因为它的方便和易用,自然也就在后端隐藏着很复杂的具体实现方式:(对用户透明)
今天,我们就来一起分析分析,foreach是如何实现数组(对象)的遍历的。
本节内容涉及到较多编译原理(lex and yacc)的知识,所以如果您觉得看不太懂,可以先找相关的资料看看。

  [阅读全文]

07 Nov 08 深入理解PHP原理之文件上传

今天研究PHP注册POST/GET大变量的时候,看到了关于这块的一些东西,跟踪了半天,,先记录下来,免得以后再如此麻烦的跟踪

处理器注册:

[mod_php5.c, mod_php5模块初始化] php_init_handler(server_rec *s, pool *p)
    ->
[main/SAPI.c]sapi_startup(&apache_sapi_module)
        ->
[main/SAPI.c] sapi_globals_ctor(&sapi_globals)
            ->
[main/php_content_types.c]php_setup_sapi_content_types(TSRMLS_C)
                ->
[main/php_content_types.c php_post_entries如下]sapi_register_post_entries(php_post_entries TSRMLS_CC)
                    ->
[main/SAPI.c]sapi_register_post_entry(p TSRMLS_CC)

…..   [阅读全文]

07 Nov 08 PHP的GET/POST等大变量生成过程

主要探讨了PHP的大变量的生成过程。另外如果你注意到, 当在表单中提交的input的name中如果有点号的时候, 在PHP中会自动把点号处理成下划线。并且你很想知道这是为什么,在什么时候发生的? 呵呵,本文也就这个问题做了回答。
首先明确一个问题,PHP的变量名中是不能包含点号的。 但是为了处理表单中的点号命名,PHP就会自动把点号(.)转换成下划线(_) ……….

  [阅读全文]

31 Oct 08 关于一笔试题(Iterator模式)

中午的时候,收到一封求教信,是关于这样的一道腾讯的面试题:

使对象可以像数组一样进行foreach循环,要求属性必须是私有。

  [阅读全文]

23 Sep 08 使用PHP Embed SAPI实现Opcodes查看器

PHP提供了一个Embed SAPI,也就是说,PHP容许你在C/C++语言中调用PHP/ZE提供的函数。本文就通过基于Embed SAPI实现一个PHP的opcodes查看器。
首先,下载PHP源码以供编译, 我现在使用的是PHP5.3 alpha2
进入源码目录:

./configure --enable-embed
 ./make
 ./make install

最后,记得要将生成的libphp5.so复制到运行时…   [阅读全文]

19 Sep 08 深入理解PHP原理之变量分离/引用(Variables Separation)

在前面的文章中我已经介绍了PHP的变量的内部表示(深入理解PHP原理之变量(Variables inside PHP)),以及PHP中作用域的实现机制(深入理解PHP原理之变量作用域(Scope inside PHP))。这节我们就接着前面的文章,继续介绍PHP中变量分离和引用的概念:

  [阅读全文]

26 Aug 08 深入理解PHP原理之变量作用域(Scope in PHP)

我前面的文章介绍了PHP变量的内部表示,但是,问题是,这些内部表示是如何和用户脚本中的变量联系起来的呢?也就是说,如果我在脚本中写下:

<?php
 
$var = "laruence";
 
echo $var;
?>

ZE是如何把我的变量var和内部结构zval联系起来的呢?

  [阅读全文]

24 Aug 08 PHP5多层继承顺序的bug

今天guoxiaod提出了一个问题,如下:

<?php
class a extends b {
};
class b extends c{
};
class c{
};
?>

会导致fatal error:

PHP Fatal error:  Class 'b' not found in /home/xinchen/1.php on line 2
Fatal error: Class 'b' not found in /home/xinchen/1.php on line 2

分析这个问题,是运行阶段出错,经过分析PHP的编译,执行过程,得出如下的parsing顺序…

  [阅读全文]

24 Aug 08 PHP源码分析之Global关键字

闲来无事,就系统的从PHP的词法分析,语法分析,opcodes生成,执行,整个流程,详细的分析了global关键字的实现。

  [阅读全文]