我正在使用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()而不是
提前致谢
答案 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