Подтвердить что ты не робот

Как скрыть системный() вывод

Я работаю над 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() вместо

заблаговременно

4b9b3361

Ответ 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