最近在看PHP内部实现的东西,想要了解PHP是如何从一个.php文件经过词法/语法/语义等分析生成OPCODE的。

鸟哥在博客里面安利了vld.so这个php opcode dump工具,网上没有在osx下mamp安装opcode的教程,自己鼓捣了一下,记录一下方便后人。

前提需要安装xcode command line tool这个网上教程比较多,自己去搜一下吧。

首先在/Applications/MAMP/bin/php中新建一个目录include

下载一个对应版本的php源码解压到这个目录,并且

./configure
make && make install

之后导入shell环境变量到当前目录

echo "export PATH=/Applications/MAMP/bin/php/php{对应版本}/bin:$PATH" >> ~/.profile

运行

. ~/.profile
pear config-set php_ini /Applications/MAMP/bin/php/php{对应版本}/conf/php.ini
pecl config-set php_ini /Applications/MAMP/bin/php/php{对应版本}/conf/php.ini

更新pecl

pecl channel-update pecl.php.net

下载与安装VLD

wget http://pecl.php.net/get/vld-{对应版本}.tgz
tar zxvf vld-{对应版本}.tgz
cd ./vld-{对应版本}
/Applications/MAMP/bin/php/php{对应版本}/bin/phpize
./configure --with-php-config=/Applications/MAMP/bin/php/php{对应版本}/bin/php-config --enable-vld
make && make install

然后在
/Applications/MAMP/bin/php/php{对应版本}/conf/php.ini中添加

[vld]
extension=vld.so

并且在mamp的选项edit template里修改php.ini

然后source ~/.profile

之后php运行

php -dvld.active=1 /path/to/your/code.php
就可以看到opcode的输出了

5855BC7E-5AAC-4C7C-BC42-850485624AC5.png