Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : Stream Functions : stream_filter_register

stream_filter_register

Register a stream filter implemented as a PHP class derived from php_user_filter (PHP 5)
bool stream_filter_register ( string filtername, string classname )
int filter ( resource in, resource out, int &consumed, bool closing )
bool onCreate ( )
void onClose ( )

Example 2375. Filter for capitalizing characters on foo-bar.txt stream

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

?>

The above example will output:

LINE1
WORD - 2
EASY AS 123

Example 2376. Registering a generic filter class to match multiple filter names.

<?php

/* Define our filter class */
class string_filter extends php_user_filter {
 var
$mode;

 function
filter($in, $out, &$consumed, $closing)
 {
   while (
$bucket = stream_bucket_make_writeable($in)) {
     if (
$this->mode == 1) {
       
$bucket->data = strtoupper($bucket->data);
     } elseif (
$this->mode == 0) {
       
$bucket->data = strtolower($bucket->data);
     }

     
$consumed += $bucket->datalen;
     
stream_bucket_append($out, $bucket);
   }
   return
PSFS_PASS_ON;
 }

 function
onCreate()
 {
   if (
$this->filtername == 'str.toupper') {
     
$this->mode = 1;
   } elseif (
$this->filtername == 'str.tolower') {
     
$this->mode = 0;
   } else {
     
/* Some other str.* filter was asked for,
        report failure so that PHP will keep looking */
     
return false;
   }

   return
true;
 }
}

/* Register our filter with PHP */
stream_filter_register("str.*", "string_filter")
   or die(
"Failed to register filter");

$fp = fopen("foo-bar.txt", "w");

/* Attach the registered filter to the stream just opened
  We could alternately bind to str.tolower here */
stream_filter_append($fp, "str.toupper");

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

The above example will output:

LINE1
WORD - 2
EASY AS 123

Change Language


Follow Navioo On Twitter
stream_bucket_append
stream_bucket_make_writeable
stream_bucket_new
stream_bucket_prepend
stream_context_create
stream_context_get_default
stream_context_get_options
stream_context_set_option
stream_context_set_params
stream_copy_to_stream
stream_encoding
stream_filter_append
stream_filter_prepend
stream_filter_register
stream_filter_remove
stream_get_contents
stream_get_filters
stream_get_line
stream_get_meta_data
stream_get_transports
stream_get_wrappers
stream_register_wrapper
stream_resolve_include_path
stream_select
stream_set_blocking
stream_set_timeout
stream_set_write_buffer
stream_socket_accept
stream_socket_client
stream_socket_enable_crypto
stream_socket_get_name
stream_socket_pair
stream_socket_recvfrom
stream_socket_sendto
stream_socket_server
stream_socket_shutdown
stream_wrapper_register
stream_wrapper_restore
stream_wrapper_unregister
eXTReMe Tracker