如何隐藏system()输出


how to hide system() output

我用的是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   
expect "password:"  
send "$pass'r"  
expect "'prompt:/->"   
set $return_value [string compare /..string../ $expect_out(buffer)]   
/...some code...this runs fine/  
exit $return_value   

一切正常,我得到$return_value正确返回但PHP文件打印整个SSH会话在我的浏览器中执行的结果如下:

使用用户名"admin"admin@10.135.25.150的密码:= = =/ *一些文本* /= = = '提示:/→……一些文本/

我想阻止system()函数在我的浏览器中打印这个
我使用了shell_exec()函数,但它返回整个SSH会话结果(我已在TCL脚本中解析并获得返回到PHP脚本的精确值)是否有一种方法,我可以做到这一点,而不使用shell_exec(),但使用system()代替

thanks in advance

system()的文档特别说明:

执行外部程序并显示输出

在那一页列出了备选方案。如果您使用exec函数,它将只执行命令而不显示任何输出。

的例子:

<?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!

使用ob_start();Before和ob_clean();在调用

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

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

一般来说,如果你想阻止任何东西输出到浏览器,你可以在系统()调用之前使用ob_start(),然后使用ob_end_clean()。见http://php.net/manual/en/function.ob-start.php