我在使用內置的http://
流封裝器的HTTP客戶機類的單元測試中編寫自定義流封裝器作爲存根。使用自定義流封裝器作爲PHP的http://流封裝器的測試存根
具體而言,我需要通過調用stream_get_meta_data
來控制在'wrapper_data'
密鑰中返回的值,該值由自定義流包裝器創建。不幸的是,定製流包裝器上的文檔是可悲的,而且API看起來不直觀。
自定義包裝中的什麼方法控制meta 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;
}
}
怎麼樣'streamWrapper :: stream_metadata'?可能會幫助,但[docs](http://www.php.net/manual/en/streamwrapper.stream-metadata.php)似乎是另有說明。 – Christian 2012-07-31 07:33:14
我很榮幸你的好意! – hakre 2012-07-31 14:03:25