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