如何隐藏系统()输出

2022-08-30 19:09:33

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

我的php脚本看起来像这样:

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

文件名.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 的密码: === /*一些文本*/ === \prompt:/->.../一些文本/

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

提前致谢


答案 1

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!

答案 2

使用 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!'; 
?>

推荐