2011-07-15 56 views
17

我正在使用Windows XP。我可以通過調用一個可以自動執行ssh會話的TCL腳本,通過我的瀏覽器成功運行system()命令。我也從腳本中返回一個值。但是我的問題是腳本在瀏覽器中轉儲整個ssh會話。如何隱藏系統()輸出

我的PHP腳本的樣子:

$ lastLine所=系統( ' 「C:\ TCL \ BIN \ tclsh.exe」 \文件路徑\ filename.tcl' $用戶名「」。 $傳球,$ VAL);

filename.tcl:

產卵砰砰-ssh $用戶@ $主機01​​ 期望 「assword:」
發送 「$通\ R」
期望「\提示符:/ - >」
集$ RETURN_VALUE [字符串比較/..string../ $ expect_out(緩衝)
/...some代碼...這運行正常/
退出$ RETURN_VALUE

一切都正常運行,我回到正確得到$ RETURN_VALUE但PHP文件打印整個SSH會話的在瀏覽器中執行它看起來像的結果:

使用用戶名「管理員」。 [email protected]'s密碼:===/*一些文本*/=== \提示:/ - > ... /一些文本/

我想,以防止系統()函數從我的瀏覽器中打印
我已經使用了shell_exec()函數,但它返回了整個ssh會話結果(我已經在tcl腳本中解析並獲得了一個精確的值以返回到php腳本) 是否有這樣我可以做到這一點沒有事先使用了shell_exec(),但使用system(),而不是

感謝

回答

24

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

謝謝csl ...它的工作原理...早先我使用ob_start()和ob_end_clean()函數之前和之後系統()命令來獲得所需結果...感謝您的輸入.... – user806168

3

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

SRY丟失了這一點在我的疑問句,但即使這樣做$結果存儲$ return_value的價值,我正在回傳f從tcl腳本開始。不過,輸出仍然在我的瀏覽器中轉儲ssh會話 – user806168

+0

我編輯了我的答案。試試這一個 – genesis