###起因
又是很久很久以前(大概1年多了)看到鸟哥的《使用PHP Embed SAPI实现Opcodes查看器》,然后在Ubuntu上跟着折腾了起来,最后勉强也是跑起来了。最近找回了这份代码,打算在新笔记本上编译,然后问题就接踵而来。
###Mac上编译PHP embed sapi
按Ubuntu上
的套路,直接
$ cd php-src/
$ ./configure –enable-embed
$ make && make install
编译出libphp5.so
, 但是Mac上不认这一套,后来Google到《在mac上开启php的embed模式》才知道要编译成libphp5.dylib
。其实按照文章我打上patch执行make提示没有相关规则,继续Google后《在mac上开启php的embed模式》(别吐槽为什么名字一样,其实不是同一篇)。autoconf
以后重新configure
$ cd php-src/
$ ./configure –enable-embed
$ make libphp5.dylib && make install
到这里动态链接库就编译好了。
###PHP相关struct的改变
到源码目录执行make的时候杯具又发生了
赶紧翻源码看了一下(我系统PHP是brew安装的5.4.24,相应的我下载了5.4.19的源码,但是鸟哥文章中用的是5.3 alpha2 )
已经不在有var
这个成员。后来下载了最新的vld
源码,看到对应的处理宏发现5.4以后_znode
结构都没在用了
接着对着vld修修改改也终于跑起来了,效果大概这样
功能上当然不及vld
,比如没有把函数,类的内部opcode dump出来什么的。
这只是个PHP embed
模式的一个例子,发挥你的想象力应该还会有很多好玩的东西。