首先,脚本程序检查看变量$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脚本来执行系统内部程序。其次,在一些Unix系统上,PHP函数passthru不能将内部程序的输出传递给浏览页面,如果发生这种情况,可以用system函数来代替passthru函数。
四、结论
从本的例子可以看出,Unix操作系统非常强大,并且PHP允许开发者通过脚本以独立的线程来执行系统内部程序。本文的所给的例子非常的简单,但是只要再多花一点功夫,你可以写一个能更新My
SQL数据库的c++程序,运行其他系统命令的程序或者是操作系统文件/目录结构的程序。但是,不管怎样,你都应该确保你的系统安全,绝对不能让任何其他的脚本程序随意访问系统内部程序。