(PHP 5, PHP 7)
stream_filter_register — Kullanıcı tanımlı bir akım süzgecini etkin kılar
$süzgeç
   , string $sınıf
   )stream_filter_register() işlevi dosya sistemi işlevleriyle (fopen(), fread() gibi) kullanılmak üzere kendi süzgecinizi tanımlamanıza izin verir.
süzgeçSüzgecin ismi.
sınıfBir süzgeci gerçeklemek için, php_user_filter'in bir uzantısı olarak, aşağıda belirtilen üye işlevlerle bir sınıf tanımlamanız gerekir. Süzgecinizin ekli olduğu akım üzerinde okuma ve yazma işlemleri yaparken, PHP tüm veriyi süzgecinizden (ve akıma ekli diğer süzgeçlerden) geçirerek verinin istendiği gibi değiştirilmesini sağlar. Yöntemleri tamamen aşağıda belirtildiği gibi gerçeklemeniz gerekir. Başka türlü yaparsanız süzgecin ne yapacağı belli olmaz.
$in
       , resource $out
       , int &$consumed
       , bool $closing
       )
       Bu yöntem, süzgecin ekli olduğu akım üzerinde yapılan her okuma veya
       yazma (fread() veya fwrite()
       gibi) işleminde çağrılır.
       in değiştirgesi, süzülecek verinin içerdiği bir
       veya daha fazla sayıda biriktirici nesneden oluşan
       biriktirici kümesi'ni gösteren bir özkaynaktır.
       out değiştirgesi, değiştirilen biriktiricilerin
       konulduğu biriktirici kümesi'ni gösteren bir
       özkaynaktır.
       consumed değiştirgesi, süzgecinizce okunan ve
       değiştirilen veri uzunluğu kadar artmalı ve göreli olarak
       aktarılmalıdır. Çoğu durumda consumed değeri her
       $biriktirici için
       $biriktirici->datalen kadar arttılırılır. Eğer akım
       kapama sürecindeyse (dolayısıyla bu, süzgeç zincirindeki son geçiştir)
       closing değiştirgesine TRUE atanmalıdır.
       filter() yöntemi işini bitirdiğinde şu üç
       değerden birini döndürmelidir:
       
| Dönüş Değeri | Anlamı | 
|---|---|
PSFS_PASS_ON | 
           
            Süzgeç veriyi başarıyla işleyip biriktirici
            kümesi'ni out değiştirgesine
            yerleştirdi.
            | 
          
PSFS_FEED_ME | 
           Süzgeç işini tamamladı ancak, döndürülecek bir veri yok. Akımdan veya önceki süzgeçten daha fazla veri gerekiyor. | 
PSFS_ERR_FATAL (öntanımlı) | 
           Süzgeç kurtarılamayacak bir hata tespit etti; devam edilemiyor. | 
TRUE aksi
       takdirde FALSE döndürmelidir
      
      
       Süzgeciniz ilk örneklendiğinde ve
       süzgeciniz->onCreate() çağrıldığında, aşağıdaki
       tabloda gösterilen özellikler kullanılabilir olmalıdır:
      
      
| Özellik | İçeriği | 
|---|---|
| süzgeciniz->filtername | Örneklenen süzgecin ismini içeren dizge. Süzgeçler farklı isimlerle veya dosya ismi kalıplarıyla kayıt altına alınabilirler. Bu özellik kullanılacak ismi belirlemek için kullanılır. | 
| süzgeciniz->params | 
            params değiştirgesinin içeriği
            stream_filter_append() veya
            stream_filter_prepend() işlevine aktarılır.
            | 
          
| süzgeciniz->stream | 
            Süzülecek akım özkaynağı. Sadece closing
            değiştirgesine FALSE atanmışken yapılan
            filter() çağrılarında kullanılabilir.
            | 
          
Bu yöntem süzgeç kapanırken çağrılır (genellikle, akım da bu sırada kapanır) ve flush yöntem çağrısından sonra çalıştırılır. onCreate() çağrısı ile oluşturulan veya ayrılan özkaynaklar varsa bunların elden çıkarılacağı veya serbest bırakılacağı yer burasıdır.
   Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.
  
   süzgeç zaten tanımlı bir süzgeçse FALSE döner.
  
Örnek 1 - foo-bar.txt akımında büyük harfe dönüşüm süzgeci
Aşağıdaki örnekte, foo-bar.txt akımında okunup yazılan tüm harfleri büyük harfe çeviren strtoupper isimli bir süzgeç gerçeklenmektedir.
<?php
/* Kendi süzgecimizi tanımlayalım */
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;
  }
}
/* Süzgecimizi PHP'ye tanıtalım */
stream_filter_register("strtoupper", "strtoupper_filter")
    or die("Süzgecin tanıtımı başarısız oldu");
$fp = fopen("foo-bar.txt", "w");
/* Süzgeci açık akıma ekleyelim  */
stream_filter_append($fp, "strtoupper");
fwrite($fp, "Line1\n");
fwrite($fp, "Word - 2\n");
fwrite($fp, "Easy As 123\n");
fclose($fp);
/* İçeriği tekrar okuyalım */
readfile("foo-bar.txt");
?>
Yukarıdaki örneğin çıktısı:
LINE1 WORD - 2 EASY AS 123
Örnek 2 - Çok sayıda süzgeç ismiyle eşleşen soysal bir süzgeç sınıfının tanıtımı
<?php
/* Kendi süzgeç sınıfımızı tanımlayalım */
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 {
      /* PHP'nin başka str.* süzgeçlerine bakması için
         başarısızlığı raporluyoruz */
      return false;
    }
    return true;
  }
}
/*Süzgecimizi PHP'ye tanıtalım */
stream_filter_register("str.*", "string_filter")
    or die("Süzgeç tanıtılamadı");
$fp = fopen("foo-bar.txt", "w");
/* Süzgeci açık akıma ekleyelim.
   Burada str.tolower süzgecini de ekleyebilirdik. */
stream_filter_append($fp, "str.toupper");
fwrite($fp, "Line1\n");
fwrite($fp, "Word - 2\n");
fwrite($fp, "Easy As 123\n");
fclose($fp);
/* İçeriği tekrar okuyalım */
readfile("foo-bar.txt");
?>
Yukarıdaki örneğin çıktısı:
LINE1 WORD - 2 EASY AS 123