【用php实现通过web执行cc 程序吗】用PHP实现通过Web执行C/C++程序

更新时间:2019-09-10 来源:热门资讯 点击:

【www.hzclsc.cn--热门资讯】

Author: Mitchell Harper


翻译  :Kefeng Nie (kefeng_nie@163.com)


Date  :2002-10-15


 


一,简介


 


如果你对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


int main(int argc, char* argv[])
{
cout 浏览器来访问这个程序的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 "You didn"t enter any arguments.";
else
{
echo "SampleApp Result";
$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++程序,运行其他系统命令的程序或者是操作系统文件/目录结构的程序。但是,不管怎样,你都应该确保你的系统安全,绝对不能让任何其他的脚本程序随意访问系统内部程序。


如果你想获得更多关于本文提到的相关信息,可以查看下面列出的一些相关链接和图书。


 


相关链接:


http://galton.uchicago.edu/~gosset/Compdocs/gcc.html
http://www.andrews.edu/~maier/tutor.html
http://www.php.net/manual/en/function.escapeshellcmd.php
 


相关图书:


Advanced Programming in the Unix Environment
Beginning C++: The Complete Language
Linux Apache Web Server Administration
Professional Apache
 


 


本文来源:http://www.hzclsc.cn/news/27350.html

为您推荐

dnf鬼泣新buff换装|dnf鬼泣BUFF换装如何搭配 dnf起源版鬼泣BUFF换装搭配攻略

您的位置:首页 → 网游资讯 → dnf资讯 → dnf鬼泣BUFF换装如何搭配 dnf起源版鬼泣BUFF换装搭配攻略 dnf鬼泣BUFF换装如何搭配 dnf起源版鬼泣BUFF换装搭配攻略时间:201dnf资讯

2021-02-25 18:54:41   dnf鬼泣buff换装95   地下城鬼泣buff换装  

dnf流年鬼泣装备_dnf鬼泣起源版本装备搭配推荐 dnf黑暗君主起源版本加点攻略

2月1日DNF起源版本正式更新了,这次更新全职业平衡性将进行调整,所以这个版本DNF黑暗君主起源版本怎么加点?DNF黑暗君主起源版本用什么装备好?下面小编为大家爱带来了DNF黑暗君主起源版本加点攻略dnf资讯

2021-02-25 18:54:41   dnf鬼泣装备推荐   dnf鬼泣毕业装备  

【dnf黄金雄鹰图腾怎么升级】dnf黄金雄鹰图腾怎么得 黄金雄鹰图腾出现概率介绍

DNF游戏中成功建造传说图腾的小伙伴可以一次性拿到20个图腾精华,而普通的和特殊也才只给到6个,是普通 特殊的3倍还多,难怪这么多的玩家追求黄金雄鹰图腾了,毕竟有了它,组合出传说的概率非常的高。 为dnf资讯

2021-02-25 18:54:41  

[dnf起源剧情]dnf起源版本公会改动一览 dnf起源版本公会有哪些变动

全新的起源版本已经到来,这次改版的改动很大,甚至有些小伙伴都在游戏中迷路了,那么在全新的起源版本中公会有哪些变化呢?下面就让我们一起去了解一下DNF起源版本公会改动吧! DNF起源版本公会改动一览起dnf资讯

2021-02-25 18:54:41  

德特尔兽人族|dnf兽人族的特别宝物礼盒有什么 兽人族的特别宝物礼盒选择建议

兽人族的特别宝物礼盒打开后,可以在两种宝物礼盒中选择一种,远古兽人族的神秘宝物礼盒、兽人族英雄的宝珠礼盒,很多小伙伴不知道怎么选择才好,小编今天带来一篇DNF兽人族的特别宝物礼盒选择建议,希望大家喜dnf资讯

2021-02-25 18:54:41   怪物猎人世界老练的兽人族学者   兽人族永不为奴除非