2011-07-15 15 views
17

pracuję na Windows XP. mogę pomyślnie uruchomić polecenie system() przez moją przeglądarkę, wywołując skrypt TCL, który automatyzuje sesję ssh. Zwracam także wartość ze skryptu. jednak moim problemem jest to, że skrypt zrzuca całą sesję ssh w przeglądarce.jak ukryć wyjście systemowe()

mój skrypt php wygląda następująco:

$ lastline = System (' "C: \ tcl \ bin \ tclsh.exe" \ ścieżka do pliku \ filename.tcl' $ login „”... $ pass, $ val);

filename.tcl:

tarło Plink -ssh $ user @ $ host
oczekiwać "assword:"
wyślij "$ wprost \ r"
oczekiwać „\ wiersz:/- >”
zestaw $ Return_Value [ciąg porównać /..string../ $ expect_out (bufor)]
/...some kod ... to działa dobrze/
exit $ Return_Value

wszystko działa dobrze, a ja dostać $ Return_Value powrotem poprawnie, ale drukuje plik PHP wyniku realizacji całej sesji ssh w przeglądarce, która wygląda następująco:

Korzystanie login „admin”. [email protected]'s hasło: ===/* * jakiś tekst/=== \ monit:/-> .../jakiś tekst/

chcę zapobiec system() funkcja z drukowania tego w mojej przeglądarce
użyłem funkcji shell_exec(), ale zwraca ona cały wynik sesji ssh (którą przeanalizowałem w skrypcie tcl i otrzymałem dokładną wartość, aby powrócić do skryptu php). czy jest sposób mogę to zrobić bez użycia shell_exec(), ale przy użyciu systemu() zamiast

góry dzięki

Odpowiedz

24

documentation for system() specjalnie mówi:

wykonać zewnętrznego programu i wyświetla wyjście

na tej stronie są wymienione alternatywy. Jeśli zamiast tego użyjesz the exec function, wykonasz tylko polecenia bez wyświetlania żadnych danych wyjściowych.

Przykład:

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

wyświetli wyjście system:

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

podczas korzystania exec nie będą wyświetlane żadne informacje wyjściowe:

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

$ php -q foo.php 
Hello, world! 
+1

dzięki csl ... działa ... wcześniej używałam funkcji ob_start() i ob_end_clean() przed i po poleceniu system() do uzyskania pożądanego wyniki ... dzięki za wejście .... – user806168

3

użyj ob_start(); before i ob_clean(); po wywołaniu go

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

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

sry dla brakujących że w moich kwes , ale nawet kiedy jest to, że $ wynik przechowuje wartość $ return_value, którą przekazuję z powrotem f rom the tcl script. Niemniej jednak, dane wyjściowe nadal zrzucają sesję ssh w mojej przeglądarce – user806168

+0

Edytowałem swoją odpowiedź. spróbuj tego jeden – genesis