«

stream_filter_register的用法

时间:2024-2-20 11:34     作者:韩俊     分类: PHP


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

标签: php php教程

热门推荐