在这段之后的代码片段中,我使用Test_Stream对象创建了一个名为test的流包装器。我试图使用流上下文与它,并有几个问题。首先是代码:
<?php
class Test_Stream {
public $context;
public function __construct()
{
print_r(stream_context_get_options($this->context));
exit;
}
}
$context = array(
'test' => array('key' => 'value'),
'otherwrapper' => array('key' =>'value')
);
$context = stream_context_create($context);
stream_wrapper_register('test', 'Test_Stream');
$fp = fopen('test://www.domain.tld/whatever', 'r', false, $context);
所以现在,在那个代码片段中,Test_Stream被注册到'test'流包装器,但是…如果我事先不知道包装器的名称是什么,或者如果我想让开发人员来决定怎么办?您如何知道类中的包装器名称?似乎你必须提前知道它来获得适当的上下文选项(除非你只是假设第一个上下文选项数组是正确的),但如果你不打算提前知道它呢?
你知道打开哪个协议被调用,所以,在那里使用你的上下文:
<?php
class Test_Stream {
public $context;
public function stream_open($path, $mode, $options, &$opened_path ){
var_dump(parse_url($path, PHP_URL_SCHEME));
exit;
}
}
$context = array(
'test' => array('key' => 'value'),
'otherwrapper' => array('key' =>'value')
);
$context = stream_context_create($context);
stream_wrapper_register('test', 'Test_Stream');
$fp = fopen('test://www.domain.tld/whatever', 'r', false, $context);
string(4) "test"