2

我正在尝试stream_selectfopen()'d http 流上做一个。但是,stream_select不断给我这些错误并且选择失败。

Warning: stream_select(): cannot cast a filtered stream on this system
Warning: stream_select(): cannot cast a filtered stream on this system
Warning: stream_select(): cannot cast a filtered stream on this system
Warning: stream_select(): No stream arrays were passed

流是这样创建的:

$ctx = array(..) // valid context, data is returned ok.
$fh = fopen($url,'r',NULL,$ctx);
// Result: resource(70) of type (stream)

那么,究竟什么是过滤流,为什么认为 http 流是这样的,有什么办法可以绕过它?的文档stream_select说“无法选择某些流,例如zlib”,但没有提及http。

编辑:在与 Google 和 PHP 文档交谈后,我尝试从流中查询元数据以查看是否指定了任何过滤器,答案是否定filters的:元数据中没有索引表明该流是无过滤的。

array(10) {
  ["wrapper_data"]=>
  array(10) {
    [0]=>
    string(28) "HTTP/1.1 200 Content Follows"
    [1]=>
    string(35) "Date: Wed, 03 Oct 2012 16:14:01 GMT"
    ...
    [9]=>
    string(38) "Content-Type: text/html; charset=utf-8"
  }
  ["wrapper_type"]=>
  string(4) "http"
  ["stream_type"]=>
  string(14) "tcp_socket/ssl"
  ["mode"]=>
  string(1) "r"
  ["unread_bytes"]=>
  int(2447)
  ["seekable"]=>
  bool(false)
  ["uri"]=>
  string(17) "http://domain.tld/"
  ["timed_out"]=>
  bool(false)
  ["blocked"]=>
  bool(true)
  ["eof"]=>
  bool(false)
}
4

0 回答 0