Как скрыть системный() вывод
Я работаю над Windows XP. Я могу успешно запустить команду system() через мой браузер, вызвав TCL script, который автоматизирует сеанс ssh. Я также возвращаю значение из script. однако моя проблема заключается в том, что script сбрасывает всю сессию ssh в браузере.
my php script выглядит так:
$lastline = system (' "C:\tcl\bin\tclsh.exe" \путь к файлу \filename.tcl'. $username. ''. $pass, $val);
filename.tcl:
spawn plink -ssh $user @$host
ожидать "соглашение":
отправить "$ pass\r"
ожидать "\ prompt:/- > "
set $return_value [string compare/..string../$expect_out (buffer)]
/... некоторый код... это нормально работает /
exit $return_value
все работает нормально, и я возвращаю значение $return_value правильно, но файл php выводит результат выполнения всей сессии ssh в моем браузере, которая выглядит так:
Использование имени пользователя "admin". [email protected] пароль: ===/* некоторый текст */===\prompt:/- > .../some text/
Я хочу, чтобы функция system() не печатала это в моем браузере
я использовал функцию shell_exec(), но он возвращает весь результат сеанса ssh (который я проанализировал в tcl script и получил точное значение для возврата к PHP скрипт) есть ли способ, которым я могу это сделать, не используя shell_exec(), но используя system() вместо
заблаговременно
Ответы
Ответ 1
Документация для системы() говорит:
Выполните внешнюю программу и отобразите вывод
На этой странице перечислены альтернативы. Если вы используете функцию 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(); before и ob_clean(); после его вызова
http://sandbox.phpcode.eu/g/850a3.php
<?php
ob_start();
echo '<pre>';
$last_line = system('ls');
ob_clean();
echo 'nothing returned!';
?>
Ответ 3
В общем случае, если вы хотите запретить что-либо выводить в браузер, вы можете использовать ob_start() перед вызовом system(), а затем ob_end_clean(). См. http://php.net/manual/en/function.ob-start.php