လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> ကြီးမားသောဖိုင်များအတွက် stream filter ကိုရွေးချယ်ရန် Stream_get_Filters ကိုအသုံးပြုနည်း။

ကြီးမားသောဖိုင်များအတွက် stream filter ကိုရွေးချယ်ရန် Stream_get_Filters ကိုအသုံးပြုနည်း။

gitbox 2025-05-20

PHP တွင် stream filter များသည် compression, encryption, encoding သို့မဟုတ်အကြောင်းအရာအစားထိုးခြင်းစသည့်စာဖတ်ခြင်း, ကျွန်ုပ်တို့သည်ကြီးမားသောဖိုင်များနှင့်အလုပ်လုပ်သောအခါမှန်ကန်သော stream filter ကိုအသုံးပြုခြင်းသည် Memory စားသုံးမှုကိုလျှော့ချရုံသာမကထုတ်လုပ်မှုစွမ်းရည်ကိုလည်းတိုးတက်စေသည်။

ဤဆောင်းပါးသည် System ရှိရရှိနိုင်သည့် stream filter များကိုစာရင်းပြုစုရန် stream_get_filters function ကိုမည်သို့အသုံးပြုရမည်ကိုရှင်းပြပါလိမ့်မည်။

1 ?? Stream_get_Filters ဆိုတာဘာလဲ

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

2 ?? ကြီးမားသောဖိုင်များအတွက်သင့်တော်သော filter ကိုရွေးချယ်နည်း

ကြီးမားသောဖိုင်အမျိုးအစားအတွက်ကျွန်ုပ်တို့သည်များသောအားဖြင့်စစ်ထုတ်စက်နှစ်မျိုးကိုသာအာရုံစိုက်လေ့ရှိသည်။
? 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 ကိုသုံးတယ်။

3 ?? stream_filter_append နှင့်ပေါင်းစပ်။ dynonicy appers

တခါတရံသင်ဟာ 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 လုပ်ရန်အထူးဒီဇိုင်းပြုလုပ်ထားသောစစ်ထုတ်ကိရိယာများအတွက်အထူး ဦး စားပေးရန်အကြံပြုသည်။

4 ?? စာရင်းနှင့် filter များကိုစာရင်းပြုစုပါ

မည်သည့်စစ်ထုတ်ကိရိယာများရရှိနိုင်ကြောင်းသင်မသေချာပါက၎င်းကိုသင်ရှာဖွေနိုင်သည်။

 $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";
}