如何隐藏system()输出

时间:2011-07-15 14:01:34

标签: php system

我正在使用Windows XP。我可以通过调用自动执行ssh会话的TCL脚本,通过浏览器成功运行system()命令。我还从脚本中返回一个值。但问题是脚本会在浏览器中转储整个ssh会话。

我的php脚本如下:

  

$ lastline = system('“C:\ tcl \ bin \ tclsh.exe”\ path to file \ filename.tcl'。$ username。''。$ pass,$ val);

filename.tcl:

  

spawn plink -ssh $ user @ $ host
      期待“assword:”
      发送“$ pass \ r”
      期待“\ prompt:/ - >”
      set $ return_value [string compare /..string../ $ expect_out(buffer)]
      /...some code ...这个运行正常/
      退出$ return_value

一切运行正常,我正确地返回$ return_value但是php文件在我的浏览器中打印出整个ssh会话的执行结果,如下所示:

  

使用用户名“admin”。 admin@10.135.25.150的密码:=== / *一些文字* / === \ prompt:/ - > ... / some text /

我想阻止system()函数在我的浏览器中打印这个 我已经使用了shell_exec()函数但是它返回了整个ssh会话结果(我已经在tcl脚本中解析并获得了一个精确的值来返回php脚本)   有没有办法,我可以不使用shell_exec()但使用system()而不是

提前致谢

3 个答案:

答案 0 :(得分:26)

documentation for system()具体说:

  

执行外部程序并显示输出

在该页面上列出了备选方案。如果改为使用the exec function,它将只执行命令而不显示任何输出。

示例:

<?php
echo "Hello, ";
system("ls -l");
echo "world!\n";
?>

将显示system

的输出
$ php -q foo.php
Hello, total 1
-rw-r--r-- 1 bar domain users 59 Jul 15 16:10 foo.php
world!

使用exec时不会显示任何输出:

<?php
echo "Hello, ";
exec("ls -l");
echo "world!\n";
?>

$ php -q foo.php
Hello, world!

答案 1 :(得分:3)

使用ob_start();之前和ob_clean();在调用之后

http://sandbox.phpcode.eu/g/850a3.php

<?php 
ob_start(); 
echo '<pre>'; 
$last_line = system('ls'); 
ob_clean(); 
echo 'nothing returned!'; 
?>

答案 2 :(得分:1)

通常,如果要阻止任何内容输出到浏览器,可以在system()调用之前使用ob_start(),然后使用ob_end_clean()。见http://php.net/manual/en/function.ob-start.php