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 添加到目录。添加以下代码

005920_gLxa_1391394.png

 

执行文件


#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 

 

转载于:https://my.oschina.net/kkkkkkkkkkkkk/blog/745060

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值