我正在编写一个自定义流包装器,以用作使用内置http://
流包装器的 HTTP 客户端类的单元测试中的存根。
具体来说,我需要'wrapper_data'
通过调用stream_get_meta_data
自定义流包装器创建的流来控制键中返回的值。不幸的是,关于自定义流包装器的文档很糟糕,而且 API 似乎不直观。
自定义包装器中的什么方法控制元wrapper_data
响应?
var_dump(stream_get_meta_data($stream));
使用底部的类,当我在使用自定义包装器创建的流上时,我只能得到以下结果......
array(10) {
'wrapper_data' =>
class CustomHttpStreamWrapper#5 (3) {
public $context =>
resource(13) of type (stream-context)
public $position =>
int(0)
public $bodyData =>
string(14) "test body data"
}
...
但是我需要诱使包装器在元数据检索中产生类似以下内容,以便我可以测试客户端类对真实http://
流包装器返回的数据的解析......
array(10) {
'wrapper_data' => Array(
[0] => HTTP/1.1 200 OK
[1] => Content-Length: 438
)
...
这是我目前用于自定义包装器的代码:
class CustomHttpStreamWrapper {
public $context;
public $position = 0;
public $bodyData = 'test body data';
public function stream_open($path, $mode, $options, &$opened_path) {
return true;
}
public function stream_read($count) {
$this->position += strlen($this->bodyData);
if ($this->position > strlen($this->bodyData)) {
return false;
}
return $this->bodyData;
}
public function stream_eof() {
return $this->position >= strlen($this->bodyData);
}
public function stream_stat() {
return array('wrapper_data' => array('test'));
}
public function stream_tell() {
return $this->position;
}
}