如何查看PHP内核堆栈执行信息?
早期在学习PHP扩展开发的时候就整理了这个.md文件,只不过一直没有发出来,看着它一直在桌面上占地方也是挺难受的,呵呵,其实也没有记录什么很高深或者很多东西,都是一些大牛的实验帖,我只是搬运工。
Web程序猿,专注系统架构设计及性能优化。
早期在学习PHP扩展开发的时候就整理了这个.md文件,只不过一直没有发出来,看着它一直在桌面上占地方也是挺难受的,呵呵,其实也没有记录什么很高深或者很多东西,都是一些大牛的实验帖,我只是搬运工。
题目虽然有点夸张,但也恰到好处。本篇文章主要内容取自Joe Watkins的一篇博客Hacking PHP7(但并不是完全照搬过来,取其精华,呵呵),如果你正在学习PHP内核相关的知识,这个过程会相当枯燥,并且我猜你并不知道如何下手,我认为这篇文章会给你一个非常不错的路线图!
ZTS(Zend Thread Safety)
当要使用Zend线程安全(Zend Thread Safety)时,需要在configure时,使用–enable-maintainer-zts参数,这种情况下,就会定义这个名为ZTS的宏。同时在处理PHP内置数据时,需要在函数调用时的最后一个参数后使用TSRMLS_XX标记。
TSRMLS_XX一般有4种形式,关于何时该使用哪一个,看下面这里
TSRMLS_D in declarations as only param
TSRMLS_C in uses (calls) as only param
static void my_helper(TSRMLS_D);
static void some_function(TSRMLS_D) {
my_helper(TSRMLS_C);
}
TSRMLS_DC in declarations after last param w/o comma
TSRMLS_CC in uses
PHP扩展开发说实话难度不大,但是却要扩展开发者拥有全面的基础知识以及要熟悉PHP内核的相关概念,这就要求我们对一些相关概念做到了如指掌。
本篇文章会针对一些新手难以理解的大概念进行解释,并大多画了流程图来更加直观的加深你的理解,以及你可能存在的疑问,比如第一个章节PHP生命周期和我们开发扩展有什么关系呢?不要着急,下面会回答你的问题。
如果你对PHP扩展开发还一点都不了解的话,也不要心急,可以看下我的这篇文章PHP扩展开发及入门解惑来个快速上手。
说在最前面
作为PHP程序猿,如果不懂得PHP内核、不懂得PHP扩展开发,仿佛是一件很”羞耻”的事情,嗯,的确很”羞耻”!虽说已经接触PHP已经有三年多的时间了,可是一直都没有机会或者说从没自己主动的去学习过,所以觉得更加”羞耻”了。在这种情况下,如果你被面试官发问说你接触PHP很久的时间有没有学习过PHP底层的知识的时候,你懂的,会更加更加”羞耻”。So,别废话,是该捯饬捯饬PHP扩展了。