如何在PHP中读取STDIO流

时间:2015-12-01 10:39:07

标签: php stream stdio

我需要通过PHP读取输入流。

响应对象:

Serial Object
(
    [_device] => \.\com4
    [_windevice] => COM4
    [_dHandle] => Resource id #23
    [_dState] => 2
    [_buffer] => 
    [_os] => windows
    [autoflush] => 1
)

我需要从 [_ dHandle] =>中提取信息资源ID#23 。我提取元数据

stream_get_meta_data($serial->_dHandle)

并发现以下内容:

Array
(
    [wrapper_type] => plainfile
    [stream_type] => STDIO
    [mode] => r+b
    [unread_bytes] => 0
    [seekable] => 1
    [uri] => \.\com4
    [timed_out] => 
    [blocked] => 1
    [eof] => 
)

请建议我如何从该资源ID中提取数据:#23

感谢。

1 个答案:

答案 0 :(得分:0)

这取决于它是什么类型的资源。你可以使用功能

_dHandle上的

get_resource_type()然后依赖于资源类型使用适当的函数来读取它。

如果它是一个流然后你可以使用fopen,fread等,如果它是mysql然后使用mysql函数,如果它是xml然后使用xml读取函数等。

更改您的代码

这是糟糕的代码更改

$stdin = fopen('php://stdin', 'r');
$res = stream_get_contents($stdin, -1, 10);`

$stream = fopen($serial->_dHandle, 'r');
echo stream_get_contents($stream, -1, 10);
fclose($stream);

如果$ stream为false则无法打开,如果它有指针则表示连接已打开。然后,如果stream_get_contents()没有返回数据,则表示它不可用或尚未发送。