仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1857|回复: 19
打印 上一主题 下一主题

[学习教程] PHP教程之用PHP完成经由过程Web履行C/C++法式

[复制链接]
再见西城 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:30:07 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
exit来实现结束后面的PHP语句的执行,缩小调试范围,特别是数据库交互的程序,先输出个SQL语句看看,对了,再分析怎么会插入/删除不成功呢?这样对查错很有帮助。c++|web|法式|履行   一,简介

假如你对Unix/Linux有所懂得的话,你应当晓得他们大都自带了C和C++的编译器,分离是GCC和G++。Unix在法式装置及Make等很多中央利用到了这些编译器。使用一些掌握台号令,C++和PHP, 我将向你引见如何生成一个完全的C++法式例子,他可以在用PHP法式来履行,并能取得响应的输入了局。我将师长教师成C++法式代码,并编译它,谈后会商咱们将假如经由过程利用PHP的函数passthru来履行这个法式。从某种意义下去说,这边文章给咱们供应一种经由过程Web页面来会见普通法式的办法。

为了能更好的了解这篇文章,你应当有一台运转着apache和最新版本php的unix/Linux办事器。同时也应当把握C++, unix掌握台号令,固然一些PHP的编程经历也是必须的。



二,编写一个C++法式



例如,咱们可以写一个可以经由过程号令行还吸收参数的C++ 复杂法式,并定名为Sampleapp.然后咱们可以依照上面的体例给他传递三个分歧的参数 :

Sampleapp ?参数一 ?参数二 ?参数三

这个法式的功效是能输入传递给他的参数的个数和每一个参数的值,然后咱们可以用PHP剧本法式来履行编译好的C++法式。

使用你习气的文本编纂器,新建一个名为Sampleapp.cpp 的文件,再此文件中输出以下的代码:

#include <iostream.h>

int main(int argc, char* argv[])
{
cout << endl << "You passed " << argc-1 << " arguement"
<< (argc-1 == 1 ? "" : "s") << "." << endl;

cout << (argc-1 == 1 ? "This" : "These")
<< " arguement" << (argc-1 == 1 ? "" : "s") << " "
<< (argc-1 == 1 ? "is" : "are") << ": " << endl << endl;

for(int i = 1; i < argc; i++)
cout << "[" << i << "] " << argv[i] << endl;

return 0;
}



这个C++法式包括的法式的进口点:main(),main()函数带了两个参数:argc(号令行传入参数的个数)和argv(一个包括了所传参数实践值的字符型指针数组)。这个两个参数能被C++编译器主动捕捉。

cout << endl << "You passed " << argc-1 << " arguement"
<< (argc-1 == 1 ? "" : "s") << "." << endl;;



这句话的意思是取得从履行号令行传入的参数的个数。Argv这个字符型指针数组是从0入手下手检索的,它最少包括一个实践的值(即本法式的途径和称号),这个值由C++编译器主动地附加上去。前提操作符”?”是用来判别号令行传上天参数是不是多于一个。例如,假如号令行过传入两个参数,咱们地法式将输入以下信息:

You passed 2 arguments.

cout << (argc-1 == 1 ? "This" : "These")
<< " arguement" << (argc-1 == 1 ? "" : "s") << " "
<< (argc-1 == 1 ? "is" : "are") << ": " << endl << endl;



接上去,咱们一样用前提操作符来输入另外一句话。不外要记住,即便咱们不从法式履行号令行传入任何参数,main函数地argv[]参数也包括一个值。一样地,假如咱们从号令行传入两个参数给法式,法式将输入以下地信息:

These arguments are:

for(int i = 1; i < argc; i++)
cout << "[" << i << "] " << argv[i] << endl;



最初,main函数一一的输入号令行传入的每一个参数,它用到了一个复杂的for(;;)轮回语句,这个函数能依据参数的个数将参数值一个一个的输入。假设咱们传给法式两个参数”first”和second”, for轮回输入的了局以下:

[1] ?first
[2] ?second



以上是关于这个C++法式的复杂申明,它的功效非常复杂,就是将号令行传入的参数用cout函数显示在输入屏幕上。

接上去,咱们将编译这个.cpp文件,假如你在windows平台下,需求telnet到所利用的server上。在这里,咱们利用大多Unix机械上都供应的G++编译器来编译这个源文件。不外为了确信你的机械装置了G++,你可以输出以下号令:which g++。假如G++已装置了,Unix shell将显示出G++地点的全途径。假如没有装置,它将提醒你说”command couldn’t be found”. 你可以在这里下载到G++.

在源文件地点的目次输出以下G++号令:



g++ -c sampleapp.cpp.



经由过程这个号令,咱们就将.cpp文件编译成了包括机械代码的方针文件。经由过程 ls ?a号令,你可以发明在本目次下呈现了一个新文件sampleapp.o,这就是.cpp源文件被编译成机械码的了局。不外咱们终究想要的是一个可履行文件,由于咱们还要输出以下的G++号令:

g++ sampleapp.cpp ?o sampleapp



如许咱们就取得了一个名为sampleapp的可履行文件。不外注重的是,Unix下的可履行文件跟Windows纷歧样,它没有任何后缀。

上面咱们可以来查验一下法式履行的了局,假如以下号令:

sampleapp one -two /three



咱们可以看到以下的履行了局:

You passed 3 arguments.
These arguments are:

[1] one
[2] ?two
[3] /three

如今,可履行的C++法式成生终了,上面咱们将生成一个可以经由过程 web阅读器来会见这个法式的PHP教本法式。



三,生成PHP剧本法式



为了能经由过程Internet来挪用咱们的C++法式,咱们需求生成一个PHP剧本法式。这个PHP剧本法式将有一个Form表单,以便用户能输出可以传给法式Sampleapp的参数。PHP剧本的代码太长就不在这里全体列出了,需求的话可以经由过程上面的地址来下载它。(Php code)

if(@$submit)
{

}
else
{
}

起首,剧本法式反省看变量$submit是不是有值,这个变量$submit的值是法式前面的Form表单提交后传递过去的,它缺省为空值。符号@的感化是当变量$submit的值不存在的时疏忽相干的毛病信息。

因为变量$submit缺省为空,所以一入手下手履行else{}中的代码,它在阅读器上复杂的显示一个Form表单。Form的action属性设为变量$PHP_SELF,即表单提交后前往本页。同时Form表单包括了一个文本输出条,这是用来让用户输出要传递给C++法式的号令行参数。Form以下图所示:




一旦咱们输出履行号令并提交表单,变量$submit(即按钮Go的名字)就取得一个值,如许PHP教本将履行if{}之间的代码。

if($args == "")
echo "<h1>You didn't enter any arguments.</h1>";
else
{
echo "<h1>SampleApp Result</h1>";
$command = "/htdocs/sampleapp " . escapeshellcmd($args);

passthru($command);
}



变量$args是主动发生的,它的值是Form表单中文本输出条传过去的值。假如没有输出任何信息,法式将复杂的告知用户没有输出任何值。

假如用户输出任何非空的信息,法式将把text域的值,即变量$args传给C++法式。上面这段代码就是履行C++的法式的履行号令:

$command = "/htdocs/sampleapp " . escapeshellcmd($args);



函数eacapeshellcmd是用来当作平安反省东西,以过滤调一些如”,”,””和”\”等的特别字符。这可以避免一些用户妄图输出某些字符来挪用体系外部号令。

例如,假如你在Form表单的text域中输出”1 ?two /three”,那末变量$command的值就为: /htdocs/sampleapp 1 ?two /three

你能发明咱们界说了法式sampleapp的全途径,在这个例子中,法式文件位于/htdocs目次下。你可以依据的本人法式地点的目次做响应的修正。

passthru($command);



最初,咱们利用PHP的函数passthru来履行变量$command所包括的号令而且将原始的履行了局输入到阅读器上。在我的办事器上,前往了局的HTML页面以下:




w在本文行将停止之前,几个能够碰着的成绩我想说一下。起首,当你履行sampleapp.php教本法式的时分,假如你没有看到法式的任何输入信息,也许是开了平安形式。假如如许,体系将不会答应PHP剧本来履行体系外部法式。关于若何封闭平安形式,请会见网页http://www.php.net/manual/en/features.safe-mode.php,下面有具体的引见。其次,在一些Unix体系上,PHP函数passthru不克不及将外部法式的输入传递给阅读页面,假如产生这类情形,可以用system函数来取代passthru函数。



四,结论

从本的例子可以看出,Unix操作体系十分壮大,而且PHP答应开辟者经由过程剧本以自力的线程来履行体系外部法式。本文的所给的例子十分的复杂,然而只需再多花一点工夫,你可以写一个能更新Mysql数据库的c++法式,运转其他体系号令的法式或是操作体系文件/目次布局的法式。然而,不论如何,你都应当确保你的体系平安,相对不克不及让任何其他的剧本法式随便会见体系外部法式。

假如你想取得更多关于本文提到的相干信息,可以检查上面列出的一些相干链接和图书。
  HTML中的任何元素都要亲自实践,只有明白了什么元素会起到什么效果之后,你才会记忆深刻,而一味的啃书,绝对是不行的,我想大部分新手之所以觉得概念难学,大部分是一个字“懒”,懒是阻止进步的最大敌人,所以克服掉懒的习惯,才能更快的学好一样东西。
再见西城 该用户已被删除
沙发
 楼主| 发表于 2015-3-13 00:50:13 | 显示全部楼层
Ps:以上纯属原创,如有雷同,纯属巧合
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-22 15:28

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表