分类: LINUX
2007-11-23 23:03:42
#include using namespace std; int main(int argc,char *argv[]){ cout<<"You passed "<<(argc-1)<<" argument"<<((argc-1)==1?"":"s")<<"."< cout<<" "<<((argc-1)==1?"is ":"are")<<": "< for(int i=1;i return 0; } |
#g++ test.cpp -o test |
#./test abc def ghi |
You passed 3 arguments. These arguments are: argument[1]is:abc argument[2]is:def argument[3]is:ghi |
cout<<"You passed "<<(argc-1)<<" argument"<<((argc-1)==1?"":"s")<<"."< |
echo ' '; echo ' '; ';if($_POST['args']!=""){ echo 'what you input in the textbox are:'; echo $_POST['args']; echo ' then the c++ program will execute as follows: '; /*call c++ aplications,the sapce right after ./test is necessary. It separate the command from its arguments*/ $command="./test ".escapeshellcmd($_POST['args']); passthru($command); }else{ echo ' You did not enter anything in the textbox.'; } echo ' |
解释:
函数eacapeshellcmd是用来当做安全检查工具,以过滤调一些如”,”,””和”\”等的特殊字符。 这可以防止一些用户企图输入某些字符来调用系统内部命令。
我这里用了test的当前路径,就是/var/www/html目录下,tet程序文件就位于/var/www/html 目录下。当然也可使用绝对路径(不推荐);
passthru($command);
最后,我们使用PHP的函数passthru来执行变量$command所包含的命令并且将原始的执行结果输出到浏 览器上。在我的服务器上,返回结果的HTML页面如下:
图一 cpp_test.html
图二 cpp_test.php
如果当你执行cpp_test.php教本程序的时候,如果你没有看到程序的任何输出信息,或许是开了安全模式。如果这样,系统将不会允许PHP脚本来执行系统内部程序。关于如何关闭安全模式,请访问网页http: //php.chinaunix.net/manual/zh/features.safe-mode.php,上面有详细的介绍。其次,在一些Unix系统上, PHP函数passthru不能将内部程序的输出传递给浏览页面,如果发生这种情况,可以用system函数来代替passthru函数。
判断安全模式是否打开可用下面的代码(事先应在当前目录下准备一个文本文件sample.txt):
readfile('./sample.txt'); ?> |
chinaunix网友2009-10-09 21:38:39
你好,今天拜读了您的这篇文章,我按照您的程序走了一遍,为什么点击提交按钮之后只是执行 else 中的语句,即返回的界面只显示"You did not enter anything in the textbox" ?