2

'd http ストリームstream_selectで実行しようとしています。fopen()ただし、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