我正在尝试stream_select
在fopen()
'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)
}