stream_wrapper_register
(PHP 4 >= 4.3.2, PHP 5, PHP 7, PHP 8)
stream_wrapper_register — 注册一个用 PHP 类实现的 URL 封装协议
说明
参数
protocol-
待注册的封装的名字。有效的协议名字必须只包含字母数字、点(.)、加号(+)、连字符(-)。
class-
实现了
protocol的类名。 flags-
如果
protocol是一个 URL 协议,应该设置为STREAM_IS_URL。默认为 0,本地流。
示例
示例 #1 如何注册一个 stream wrapper
<?php
$existed = in_array("var", stream_get_wrappers());
if ($existed) {
stream_wrapper_unregister("var");
}
stream_wrapper_register("var", "VariableStream");
$myvar = "";
$fp = fopen("var://myvar", "r+");
fwrite($fp, "line1\n");
fwrite($fp, "line2\n");
fwrite($fp, "line3\n");
rewind($fp);
while (!feof($fp)) {
echo fgets($fp);
}
fclose($fp);
var_dump($myvar);
if ($existed) {
stream_wrapper_restore("var");
}
?>以上示例会输出:
line1 line2 line3 string(18) "line1 line2 line3 "
参见
- streamWrapper原型类
- 示例类注册为流封装器
- stream_wrapper_unregister() - Unregister a URL wrapper
- stream_wrapper_restore() - Restores a previously unregistered built-in wrapper
- stream_get_wrappers() - 获取已注册的流类型
+添加备注
用户贡献的备注 2 notes
cellog at php dot net ¶
19 years ago
If you plan to use your wrapper in a require_once you need to define stream_stat(). If you plan to allow any other tests like is_file()/is_dir(), you have to define url_stat().
stream_stat() must define the size of the file, or it will never be included. url_stat() must define mode, or is_file()/is_dir()/is_executable(), and any of those functions affected by clearstatcache() simply won't work.
It's not documented, but directories must be a mode like 040777 (octal), and files a mode like 0100666. If you wish the file to be executable, use 7s instead of 6s. The last 3 digits are exactly the same thing as what you pass to chmod. 040000 defines a directory, and 0100000 defines a file. It would be really helpful to add this to the official manual!
jhannus at php dot net ¶
19 years ago
It is worth noting that if your wrapper supports stream_flush() then when you flcose() your stream this function will be called prior to closing the stream.备份地址:http://www.lvesu.com/blog/php/function.stream-wrapper-register.php