Nov
13
2021
stream_filter_register的用法
stream_filter_register
版本支持(PHP 5、PHP 7、PHP 8)
stream_filter_register —注册用户定义的流过滤器
说明
stream_filter_register ( string $filter_name , string $class ): bool
stream_filter_register()允许您在与所有其他文件系统函数(例如fopen()、 fread()等)一起使用的任何注册流上实现您自己的过滤器。
参数
filter_name
要注册的过滤器名称。
class
要实现过滤器,您需要定义一个类作为具有多个成员函数的php_user_filter的扩展 。当对过滤器附加到的流执行读/写操作时,PHP 将通过您的过滤器(以及附加到该流的任何其他过滤器)传递数据,以便可以根据需要修改数据。您必须完全按照 php_user_filter 中的描述实现方法- 否则将导致未定义的行为。
返回值
成功时返回 true, 或者在失败时返回 false。
false如果 filter_name 已经定义, stream_filter_register() 将返回。
示例
#1 过滤 foo-bar.txt 流中的大写字符
下面的示例实现了一个 strtoupper 在 foo-bar.txt 流上命名的过滤器,它将大写写入/读取该流的所有字母字符。
<?php
/* Define our filter class */
class strtoupper_filter extends php_user_filter {
function filter($in, $out, &$consumed, $closing) {
while ($bucket = stream_bucket_make_writeable($in)) {
$bucket->data = strtoupper($bucket->data);
$consumed += $bucket->datalen;
stream_bucket_append($out, $bucket);
}
return PSFS_PASS_ON;
}
}
/* Register our filter with PHP */
stream_filter_register("strtoupper", "strtoupper_filter")
or die("Failed to register filter");
$fp = fopen("foo-bar.txt", "w");
/* Attach the registered filter to the stream just opened */
stream_filter_append($fp, "strtoupper");
fwrite($fp, "Line1\n");
fwrite($fp, "Word - 2\n");
fwrite($fp, "Easy As 123\n");
fclose($fp);
/* Read the contents back out
*/
readfile("foo-bar.txt");
以上例程会输出:
LINE1
WORD – 2
EASY AS 123
微信扫一扫,打赏作者吧~