2015-09-02 104 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