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