php从流中获取所有内容

时间:2014-06-30 19:41:14

标签: php stream

我想从流中读取信息,例如我尝试连接到munin-node,发送请求并读取远程socket(munin)将为我发送的所有数据

$stream = stream_socket_client('tcp://127.0.0.1:4949', $errorNumber, $errorMessage);
stream_socket_sendto($stream, "list\n");
$content = stream_get_contents($stream, -1);
print_r($content);

但是,stream_get_contents读取数据....并被阻止!只有在流超时结束后代码才会继续工作。 任何机构都知道我需要更改代码才能从服务器获得无阻塞的答案吗?

1 个答案:

答案 0 :(得分:0)

您应该在stream_get_content的第二个arg中指定您要等待的字节数。但也许你不知道。至少,在这里,你知道你会得到两条线。所以你可以使用这个工作,调用fgets两次:

$fp = fsockopen("localhost", 4949, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)\n";
} else {
    fwrite($fp, "list\n");
    echo fgets($fp, 1024);
    echo fgets($fp, 1024);
    fclose($fp);
}

如果你想按自己的方式去做,你应该看看socket_set_blocking(0)。和/或使用stream_get_meta_data()来了解您从流中获得的字节数