PHP Conference Japan 2024

stream_wrapper_register

(PHP 4 >= 4.3.2, PHP 5, PHP 7, PHP 8)

stream_wrapper_register注册作为 PHP 类实现的 URL 封装器

描述

stream_wrapper_register(字符串 $protocol, 字符串 $class, 整数 $flags = 0): 布尔值

允许您实现自己的协议处理程序和流,以便与所有其他文件系统函数(例如 fopen()fread() 等)一起使用。

参数

protocol

要注册的封装器名称。有效的协议名称只能包含字母数字、点 (.)、加号 (+) 或连字符 (-)。

class

实现 protocol 的类名。

flags

如果 protocol 是 URL 协议,则应设置为 STREAM_IS_URL。默认值为 0,本地流。

返回值

成功时返回 true,失败时返回 false

stream_wrapper_register() 如果 protocol 已经存在处理程序,则将返回 false

示例

示例 #1 如何注册流封装器

<?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
"

参见

添加注释

用户贡献的注释 2 个注释

10
cellog at php dot net
19 年前
如果您计划在 require_once 中使用您的封装器,则需要定义 stream_stat()。如果您计划允许任何其他测试(如 is_file()/is_dir()),则必须定义 url_stat()。

stream_stat() 必须定义文件的大小,否则它将永远不会被包含。url_stat() 必须定义模式,否则 is_file()/is_dir()/is_executable() 以及受 clearstatcache() 影响的任何这些函数将无法正常工作。

这没有记录,但目录必须是类似 040777(八进制)的模式,而文件必须是类似 0100666 的模式。如果您希望文件可执行,请使用 7s 代替 6s。最后 3 位数字与传递给 chmod 的内容完全相同。040000 定义目录,0100000 定义文件。将此添加到官方手册中将非常有帮助!
2
jhannus at php dot net
19 年前
值得注意的是,如果您的封装器支持 stream_flush(),那么当您关闭流时,此函数将在关闭流之前被调用。
To Top