PHP是比较流行的脚本语言,WEB开发使用广泛,如何在C++程序中不依赖任何WEB
创新互联建站专注于杨浦企业网站建设,响应式网站建设,电子商务商城网站建设。杨浦网站建设公司,为杨浦等地区提供建站服务。全流程定制网站制作,专业设计,全程项目跟踪,创新互联建站专业和态度为您提供的服务
SERVER调用PHP,并取得执行结果完成交互。
PHP安装好后,在目录下有一个php-cgi.exe,我们只要执行这个CGI程序,并将数据通过命名管道传递给它,然后把执行结果通过命名管道读取出来即可,过程并不复杂!请看如下代码:
命名管道的创建:
SECURITY_ATTRIBUTES
sa
=
{sizeof(SECURITY_ATTRIBUTES)};
sa.bInheritHandle
=
1;
sa.lpSecurityDescriptor
=
NULL;
HANDLE
hStdoutR,
hStdoutW,
hStdinR,
hStdinW;
CreatePipe(hStdoutR,
hStdoutW,
sa,
0);
SetHandleInformation(hStdoutR,HANDLE_FLAG_INHERIT,
0);
CreatePipe(hStdinR,
hStdinW,
sa,
0);
SetHandleInformation(hStdinW,
HANDLE_FLAG_INHERIT,
0);
启动php-cgi进程:
STARTUPINFO
si
=
{sizeof(STARTUPINFO)};
PROCESS_INFORMATION
pi;
si.dwFlags
=
STARTF_USESTDHANDLES;
si.hStdOutput
=
hStdoutW;
si.hStdInput
=
hStdinR;
char
env[255]
=
"REQUEST_METHOD=POST\0CONTENT_LENGTH=18\0CONTENT_TYPE=
application/x-www-form-urlencoded\0SCRIPT_FILENAME=D:\\test.php";
if(!CreateProcess(NULL,
"d:\\php5\\php-cgi.exe
D:\\test.php",
NULL,
NULL,
1,
NORMAL_PRIORITY_CLASS,
env,
NULL,
si,
pi))
return
0;
CloseHandle(hStdoutW);
CloseHandle(hStdinR);
传递数据:if(!WriteFile(hStdinW,
"var=Hello
VCKBASE!",
18,
dwWritten,
NULL))
return
0;
CloseHandle(hStdinW);
读取返回数据:char
buf[1000]
=
{0};
DWORD
dwRead
=
0;
while(ReadFile(hStdoutR,
buf,
sizeof(buf),
dwRead,
NULL)
dwRead
!=
0){
printf(buf);
}
CloseHandle(hStdoutR);
D盘的test.php
?
echo
$_REQUEST["var"];
?
执行结果:
X-Powered-By:
PHP/5.3.1
Content-type:
text/html
Hello
VCKBASE!
实际上,C++调用其他CGI程序,例如PERL,方法也大同小异,如果你打算做一个自己的WEB服务器,调用CGI程序是少不了的。
你这样做简直就是浪费了PHP 。
PHP 是做后端的不是做前端的。前端用 html。
如果不是效率要求特别高,是用不上C 的。
而且PHP 的效率已经非常高了。
PHP(外文名:PHP: Hypertext Preprocessor,中文名:逗超文本预处理器地)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
例如:PHP连接一个mysql数据库操作的演示,
实现连接打开一个库,并读取数据的基本功能。
数据库名称为:test 表名为:user
分别有7个字段:id userid sex age tel email address
服务器;数据库编码 均采用 utf-8
mysql_query("set names 'gbk'"); // //这就是指定数据库字符集,一般放在连接数据库后(解决数据库乱码)
*/
?
HTML
HEAD
META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"
style type="text/css"
!--
input { font-size:9pt;}
A:link {text-decoration: underline; font-size:9pt;color:000059}
A:visited {text-decoration: underline; font-size:9pt;color:000059}
A:active {text-decoration: none; font-size:9pt}
A:hover {text-decoration:underline;color:red}
body,table {font-size: 9pt}
tr,td{font-size:9pt}
--
/style
title注册会员列表 - 读取mysql的测试/title
/HEAD
body alink="#FF0000" link="#000099" vlink="#CC6600" topmargin="8" leftmargin="0" bgColor="#FFFFFF"
brbrcenterfont color=green size=3b注 册 会 员 列 表/b/font/center
br
table cellspacing=0 bordercolordark=#FFFFFF width="95%" bordercolorlight=#000000 border=1 align="center" cellpadding="2"
tr bgcolor="#6b8ba8" style="color:FFFFFF"
td width="5%" align="center" valign="bottom" height="19"ID/td
td width="10%" align="center" valign="bottom"姓名/td
td width="5%" align="center" valign="bottom"性别/td
td width="5%" align="center" valign="bottom"年龄/td
td width="20%" align="center" valign="bottom"联系电话/td
td width="20%" align="center" valign="bottom"电子邮件/td
td width="20%" align="center" valign="bottom"家庭住址/td
/tr
?
//连接到本地mysql数据库
$myconn=mysql_connect("localhost","root","root");
//选择test为操作库
mysql_query("set names 'gbk'"); // //这就是指定数据库字符集,一般放在连接数据库后面就系了
mysql_select_db("test",$myconn);
$strSql="select * from user";
//用mysql_query函数从user表里读取数据
$result=mysql_query($strSql,$myconn);
while($row=mysql_fetch_array($result))//通过循环读取数据内容
{
?
tr
td align="center" height="19"?echo $row["id"]?/td
td align="center"?echo $row["userid"]?/td
td align="center"?echo $row["sex"]?/td
td align="center"?echo $row["age"]?/td
td align="center"?echo $row["tel"]?/td
td align="center"?echo $row["email"]?/td
td align="center"?echo $row["address"]?/td
/tr
?
}
//关闭对数据库的连接
mysql_close($myconn);
?
/table
/BODY
/HTML