Я использую php ssh2_exec для выполнения команды ps aux на удаленном сервере Linux … Сервер, инициирующий соединение, — это Ubuntu 14.04, а сервер, с которым я общаюсь, — это Centos 6.6.
Обе системы полностью обновлены, и я использую следующие версии PHP и Apache в системе Ubuntu:
apache2 2.4.7-1ubuntu4.5
libapache2-mod-php5 5.5.9 + dfsg-1ubuntu4.11
php5 5.5.9 + dfsg-1ubuntu4.11
Я использую следующий код для отправки команды и захвата потока:
echo '<pre>';
$stream = ssh2_exec($connection, $command);
stream_set_blocking($stream, true);
$stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);
while($line = fgets($stream_out)) {
flush();
echo $line."<br />";
}
echo '</pre>';
echo '<br />';
unset($connection);
$ command определяется как: $ command = «ps aux | sed ‘/[.*]/d'»;
Команда выполняется, но возвращенный текст, показывая процессы, выполняющиеся в удаленной системе, заштрихован через текст … Ниже приведена ссылка на изображение происходящего.
https://www.joeman1.com/images/stikethoughtest.png
(Я бы опубликовал изображение, но я здесь новичок и мне нужна репутация;)).
Этого не происходит, когда я использую php -f в командной строке, просто в браузере — IE, Firefox и Chrome были протестированы.
Любые идеи о том, как решить эту проблему? Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.
Спасибо!
Джо
Попробуйте проверить ваш источник HTML. Или же:
<?php
echo '<pre>';
$stream = ssh2_exec($connection, $command);
stream_set_blocking($stream, true);
$stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);
while($line = fgets($stream_out)) {
flush();
// convert the string to HTML Entities
// Since you're getting data from a stream, no telling what might come out.
echo htmlentities($line)."<br />";
}
echo '</pre>';
echo '<br />';
unset($connection);
?>
Других решений пока нет …