Http服务器-第三步c++执行php代码

梦想游戏人
目录:
C/C++

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 

Scroll Up