(PHP 5, PHP 7, PHP 8)
stream_filter_register — Kullanıcı tanımlı bir akım süzgecini etkin kılar
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ıf
Bir süzgeci gerçeklemek için, php_user_filter'a bir eklenti olarak, ü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 php_user_filter sınıfında açıklandığı gibi gerçeklemeniz gerekir. -- Başka türlü yaparsanız süzgecin ne yapacağı belli olmaz.
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($giriş, $çıkış, &$tüketilen, $kapanış)
{
while ($bakla = stream_bucket_make_writeable($giriş)) {
$bakla->data = strtoupper($bakla->data);
$tüketilen += $bakla->datalen;
stream_bucket_append($çıkış, $bakla);
}
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($giriş, $çıkış, &$tüketilen, $kapanış)
{
while ($bakla = stream_bucket_make_writeable($giriş)) {
if ($this->mode == 1) {
$bakla->data = strtoupper($bakla->data);
} elseif ($this->mode == 0) {
$bakla->data = strtolower($bakla->data);
}
$tüketilen += $bakla->datalen;
stream_bucket_append($çıkış, $bakla);
}
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