как скрыть вывод system () - PullRequest
18 голосов
/ 15 июля 2011

я работаю на Windows XP.я могу успешно запустить команду system () через мой браузер, вызвав скрипт TCL, который автоматизирует сессию ssh.Я также возвращаю значение из скрипта.Однако моя проблема заключается в том, что скрипт выгружает весь сеанс SSH в браузере.

мой php-скрипт выглядит следующим образом:

$ lastline = system ('"C: \ tcl \ bin \ tclsh.exe" \ путь к файлу \ filename.tcl'. $имя пользователя. ''. $ pass, $ val);

filename.tcl:

spawn plink -ssh $ user @ $ host
Ожидает "assword:"
отправить "$ pass \ r"
ожидаем "\ prompt: / ->"
устанавливаем $ return_value [сравнение строк /..string../ $ wait_out (буфер)]
/...some code ... это работает нормально /
exit $ return_value

все работает нормально, и я возвращаю $ return_value обратно правильно, но php-файл печатает результат выполнения всей сессии ssh в моем браузере, который выглядит следующим образом:

Использование имени пользователя "admin".пароль администратора @ 10.135.25.150: === / * некоторый текст * / === \ подсказка: / -> ... / некоторый текст /

iхочу запретить функции system () печатать это в моем браузере
я использовал функцию shell_exec (), но она возвращает весь результат сеанса ssh (который я проанализировал в сценарии tcl и получил точное значение для возврата кPHP скрипт) есть способ, которым я могу сделать это без использования shell_exec (), но с использованием system () вместо

заранее спасибо

Ответы [ 3 ]

26 голосов
/ 15 июля 2011

Документация для системы () специально гласит:

Запустить внешнюю программу и отобразить вывод

На этой странице перечислены альтернативы. Если вместо этого вы используете функцию 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!
3 голосов
/ 15 июля 2011

используйте 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!'; 
?>
1 голос
/ 15 июля 2011

В общем, если вы хотите запретить что-либо выводить в браузер, вы можете использовать ob_start () перед вызовом system () и затем ob_end_clean (). Смотри http://php.net/manual/en/function.ob-start.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...