PHP တွင် stream filter များသည် compression, encryption, encoding သို့မဟုတ်အကြောင်းအရာအစားထိုးခြင်းစသည့်စာဖတ်ခြင်း, ကျွန်ုပ်တို့သည်ကြီးမားသောဖိုင်များနှင့်အလုပ်လုပ်သောအခါမှန်ကန်သော stream filter ကိုအသုံးပြုခြင်းသည် Memory စားသုံးမှုကိုလျှော့ချရုံသာမကထုတ်လုပ်မှုစွမ်းရည်ကိုလည်းတိုးတက်စေသည်။
ဤဆောင်းပါးသည် System ရှိရရှိနိုင်သည့် stream filter များကိုစာရင်းပြုစုရန် stream_get_filters function ကိုမည်သို့အသုံးပြုရမည်ကိုရှင်းပြပါလိမ့်မည်။
Stream_get_Filters () သည် Built-in function တစ်ခုဖြစ်ပြီးလက်ရှိ PHP ပတ်ဝန်းကျင်တွင်မှတ်ပုံတင်ထားသော stream form များကိုရရှိသော built-in function တစ်ခုဖြစ်သည်။ ၎င်း၏ခေါ်ဆိုမှုသည်အလွန်ရိုးရှင်းပါသည်။
$filters = stream_get_filters();
print_r($filters);
ဥပမာ - ရရှိနိုင်သည့်စစ်ထုတ်ကိရိယာများစာရင်းကိုပြန်လည်ထည့်သွင်းထားသည်။
Array
(
[0] => zlib.inflate
[1] => zlib.deflate
[2] => string.rot13
[3] => string.toupper
[4] => string.tolower
[5] => convert.iconv.*
)
အတွက်
zlib.inflate / zlib.deflate → compression and decompery (ကြီးမားသော File Compression Transfer အတွက်သင့်လျော်သော) ။
Convert.ICONV ။ * →အက်ခရာ encoding ပြောင်းလဲခြင်းအတွက်။
String
ကြီးမားသောဖိုင်အမျိုးအစားအတွက်ကျွန်ုပ်တို့သည်များသောအားဖြင့်စစ်ထုတ်စက်နှစ်မျိုးကိုသာအာရုံစိုက်လေ့ရှိသည်။
? compression class (zlib) - disk ကိုဖတ်ပြီးအသံအတိုးအကျယ်ကိုလျှော့ချနိုင်သည်။
? encoding changing class (iCONV) : streaming chroxt spression encoding, streaming charge character encoding, ကြီးမားသောစာသားဖိုင်များအတွက်သင့်လျော်သည်။
ဥပမာ - ဖိုင်အိတ်ကြီးတစ်ခုချုံ့ခြင်းနှင့်ဖိုင်အသစ်တစ်ခုရေးပါ
$source = 'large_input.txt';
$destination = 'large_output.gz';
// ပွင့်လင်းအရင်းအမြစ်ဖိုင်
$in = fopen($source, 'rb');
// ပစ်မှတ်ဖိုင်ကိုဖွင့်ပြီးပူးတွဲပါ zlib.deflate compression filter
$out = fopen('compress.zlib://' . $destination, 'wb');
if (!$in || !$out) {
die('ဖိုင်ကိုဖွင့ ်. မရပါ');
}
while (!feof($in)) {
$buffer = fread($in, 8192);
fwrite($out, $buffer);
}
fclose($in);
fclose($out);
echo "ဖိုင်ကို compressed နှင့်သိမ်းဆည်းထားသည် $destination\n";
compress.zlib: // protocol ကိုသတိပြုပါ။ တကယ်တော့နောက်ခံအလွှာက zlib.deflate filter ကိုသုံးတယ်။
တခါတရံသင်ဟာ propoCol wrapper ကိုမသုံးချင်ပေမဲ့ရှိပြီးသားချောင်းတွေဆီကို dynamly filter တွေကို ထပ်တူထပ်မျှ ထည့်လို့ရတယ်။
$fp = fopen('output.txt', 'wb');
$filter = stream_filter_append($fp, 'string.toupper', STREAM_FILTER_WRITE);
fwrite($fp, 'Hello gitbox.net!');
fclose($fp);
// output.txt ဒုဗိုလ်ချုပ်ကြီးအထွေထွေရေးသားသည် HELLO GITBOX.NET!
ကြီးမားသောဖိုင်များအတွက် strings စီးရီးစစ်ထုတ်စက်များစွာကိုရှောင်ကြဉ်ပါ။ ZLIB , BZip2 , ICOV ကဲ့သို့သော streaming processing လုပ်ရန်အထူးဒီဇိုင်းပြုလုပ်ထားသောစစ်ထုတ်ကိရိယာများအတွက်အထူး ဦး စားပေးရန်အကြံပြုသည်။
မည်သည့်စစ်ထုတ်ကိရိယာများရရှိနိုင်ကြောင်းသင်မသေချာပါက၎င်းကိုသင်ရှာဖွေနိုင်သည်။
$availableFilters = stream_get_filters();
$needed = ['zlib.deflate', 'convert.iconv.utf-8/cp1251'];
foreach ($needed as $filter) {
$found = false;
foreach ($availableFilters as $available) {
if (stripos($available, $filter) !== false) {
$found = true;
break;
}
}
echo $filter . ': ' . ($found ? 'အသုံးပြုနိုင်' : '不အသုံးပြုနိုင်') . "\n";
}