2015-09-02 4 views
0

Я хочу сделать telnet-соединение с сервером и отправить команды на это. Я успешно сделал соединение и отправил команды, но когда я хочу читать результаты с помощью fgets, он возвращает пустые строки.PHP fgets возвращает пустую строку

$socket=fsockopen($host, 25, $errno, $errstr); 
if ($socket!==false){ 
    fputs($socket, "helo hi\r\n"); 
    fputs($socket, "quit\r\n"); 
} 
fclose($socket); 
$buffer=array(); 
while (!feof($socket)){ 
    $buffer[]=fgets($socket); 
} 

Этот код возвращает пустые строки с помощью fgets и не выполняет указатель файла в потоковом выходе. В чем проблема?

+7

Возможно, вам не следует закрывать соединение перед чтением. –

+0

@CharlotteDunois Сделайте это ответом. – Barmar

+1

Я открыл дверь, затем закрыл дверь, а потом позвал мою кошку. Внутри нет кота. – AbraCadaver

ответ

3

Вы закрываете свое соединение, прежде чем пытаться прочитать, что возвращает ваш сокет.

Представьте себе следующее: вы ничего не помните, пока вам не сказали, что это так.
Проделайте следующую игру для мозга: откройте файл. Теперь напишите что-нибудь в нем. Затем закройте его. А теперь скажите мне содержимое указанного файла. Вы также сказали бы мне, что не знаете, потому что вы не читали, что было в нем. Вы закрыли его, прежде чем читать то, что в нем, и поэтому не знаете, что написано в нем.

Что мы узнаем из этого? Нам нужно прочитать сокет до, мы закрываем его.

$socket = fsockopen($host, 25, $errno, $errstr); 
if($socket !== false) { 
    fputs($socket, "helo hi\r\n"); 
    fputs($socket, "quit\r\n"); 
} 

$buffer = array(); 
while(!feof($socket)) { 
    $buffer[] = fgets($socket); 
} 
fclose($socket); 
+0

Спасибо за ответ. Я помню, чтобы отправить команду quit, или feof создаст цикл бесконечности, потому что он ждет новых добавленных строк вывода, но случайно вызвал команду fclose, прежде чем я прочитал вывод. – kukko

Смежные вопросы