Http服务器-第三步c++执行php代码
1.先要编译 php embed得到 php5embed.lib 然后c++编译输入该lib
2.打开源码目录 下sapi\embed\php5embed.dsp VS2013 打开 直接编译即可
3.如果提示找不到config.w32.h 那就用vs cmd 打开buildconf.bat 生成的configure.bat 运行时候需要bison.exe,下载添加目录即可。
4.把需要的dll 添加到目录。添加以下代码
执行文件
#define ZEND_WIN32 #define PHP_WIN32 #define ZTS 1 #define ZEND_DEBUG 0 #include <php.h> #include <php_embed.h> #pragma comment (lib,"php5embed") int main(int argc, char** argv) { /*char *s = "echo \"Hello world!\\n\";"; PHP_EMBED_START_BLOCK(argc, argv); zend_eval_string(s, 0, " " TSRMLS_CC); PHP_EMBED_END_BLOCK(); system("pause"); return 0;*/ // std::cout << buf; char *eval_string = " <html><body><h1>我的第一张 PHP 页面</h1> "; "<? php echo \"Hello World!\";?></body></html> "; char *php_code = "echo \"Hello, phpteam!\n\";"; zval ret_value; void ***tsrm_ls; int exit_status; php_embed_init(argc, argv PTSRMLS_CC); zend_stream str; memset((void*)(&str), 0, sizeof (zend_stream)); zend_file_handle f; f.filename = "1.php"; f.type = ZEND_HANDLE_FILENAME; f.opened_path = NULL; f.free_filename = 0; //f.handle.fp = stdin; f.handle.fd = 0; f.handle.stream = str; zend_first_try{ php_execute_simple_script(&f , TSRMLS_CC); } zend_end_try(); php_embed_shutdown(TSRMLS_C); system("pause"); return 0; }
解析后产生的html 会输出在stdout
zend_eval_string 内部吧输出重定向到了stdout,可以通过挂载模块来提取输出内容到其他用途,
通过sapi 来扩展php