仓酷云

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

[学习教程] PHP编程:PHP中经由过程Web履行C/C++使用法式

[复制链接]
柔情似水 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:29:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
说说这一个月左右的学习情况和心得吧!我个人认为,既然决定了去做一件事,那就要以认真的态度去对待!既然决定来学习了,那不管当初是抱着怎样的心态来到这个培训班的,都要让自己认真的投入到学习中。c++|web|法式|履行   1、简介
  
  假如你对Unix/Linux有所懂得的话,你应当晓得他们大都自带了C和C++的编译器,分离是GCC和G++。Unix在法式装置及Make等很多中央利用到了这些编译器。使用一些掌握台号令,C++和PHP, 我将向你引见如何生成一个完全的C++法式例子,他可以在用PHP法式来履行,并能取得响应的输入了局。我将师长教师成C++法式代码,并编译它,谈后会商咱们将假如经由过程利用PHP的函数passthru来履行这个法式。从某种意义下去说,这边文章给咱们供应一种经由过程Web页面来会见普通法式的办法。
  
  为了能更好的了解这篇文章,你应当有一台运转着apache和最新版本php的unix/Linux办事器。同时也应当把握C++, unix掌握台号令,固然一些PHP的编程经历也是必须的。
  
  2、编写一个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教本法式。
  
3、生成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函数。
  
  4、结论
  
  从本的例子可以看出,Unix操作体系十分壮大,而且PHP答应开辟者经由过程剧本以自力的线程来履行体系外部法式。本文的所给的例子十分的复杂,然而只需再多花一点工夫,你可以写一个能更新Mysql数据库的c++法式,运转其他体系号令的法式或是操作体系文件/目次布局的法式。然而,不论如何,你都应当确保你的体系平安,相对不克不及让任何其他的剧本法式随便会见体系外部法式。  你发奋努力,熟悉了安全方面的问题,然后又设计了一些程序,感觉还不错。
乐观 该用户已被删除
沙发
发表于 2015-2-4 13:14:41 | 只看该作者
装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。
精灵巫婆 该用户已被删除
板凳
发表于 2015-2-4 13:49:35 | 只看该作者
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
再现理想 该用户已被删除
地板
发表于 2015-2-7 18:00:39 | 只看该作者
本文当是我的笔记啦,遇到的问题随时填充
第二个灵魂 该用户已被删除
5#
发表于 2015-2-22 20:00:55 | 只看该作者
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
飘飘悠悠 该用户已被删除
6#
发表于 2015-3-1 09:45:18 | 只看该作者
环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。
冷月葬花魂 该用户已被删除
7#
发表于 2015-3-6 13:16:40 | 只看该作者
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
莫相离 该用户已被删除
8#
发表于 2015-3-9 03:08:26 | 只看该作者
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
深爱那片海 该用户已被删除
9#
发表于 2015-3-13 08:09:52 | 只看该作者
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
金色的骷髅 该用户已被删除
10#
发表于 2015-3-14 22:30:49 | 只看该作者
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
小妖女 该用户已被删除
11#
发表于 2015-3-21 06:09:22 | 只看该作者
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
因胸联盟 该用户已被删除
12#
发表于 2015-3-29 00:31:56 | 只看该作者
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
爱飞 该用户已被删除
13#
发表于 2015-4-7 20:07:28 | 只看该作者
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
只想知道 该用户已被删除
14#
发表于 2015-4-30 19:12:08 | 只看该作者
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
蒙在股里 该用户已被删除
15#
发表于 2015-5-1 07:11:18 | 只看该作者
首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。
admin 该用户已被删除
16#
发表于 2015-5-6 17:34:40 | 只看该作者
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
山那边是海 该用户已被删除
17#
发表于 2015-5-12 14:29:55 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
分手快乐 该用户已被删除
18#
发表于 2015-6-20 21:41:13 | 只看该作者
首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
愤怒的大鸟 该用户已被删除
19#
发表于 2015-6-26 21:41:07 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
透明 该用户已被删除
20#
发表于 2015-7-4 00:44:25 | 只看该作者
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-14 14:51

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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