PHP提供了一個Embed SAPI,也就是說,PHP容許你在C/C++語言中調用PHP/ZE提供的函數。本文就通過基于Embed SAPI實現一個PHP的opcodes查看器。
首先,下載PHP源碼以供編譯, 我現在使用的是PHP5.3 alpha2
進入源碼目錄:
./configure --enable-embed --with-config-file-scan-dir=/etc/php.d --with-mysql --with-config-file-path=/etc/
./make
./make install
最后,記得要將生成的libphp5.so復制到運行時庫的目錄,我直接拷貝到了/lib/, 否則會在運行你自己的embed程序的時候報錯:
./embed: error while loading shared libraries: libphp5.so: cannot open shared object file: No such file or directory
如果你對PHP的SAPI還不熟悉的話,我建議你看看我的這篇文章:深入理解Zend SAPIs(Zend SAPI Internals)
這個時候,你就可以在你的C代碼中,嵌入PHP腳本解析器了, 我的例子:
- #include "sapi/embed/php_embed.h"
- int main(int argc, char * argv[]){
- PHP_EMBED_START_BLOCK(argc,argv);
- char * script = " print 'Hello World!';";
- zend_eval_string(script, NULL,
- "Simple Hello World App" TSRMLS_CC);
- PHP_EMBED_END_BLOCK();
- return 0;
- }
新聞熱點
疑難解答