Stream Data ကိုပြုပြင်သည့်အခါ PHP သည်အစွမ်းထက်သောကိရိယာတစ်ခုပေးသည်။ Stream_get_Filters () ၎င်းသည်ချုံ့ခြင်း, စာဝှက်ခြင်း, encoding စသည့်အချက်အလက်များကိုပြုလုပ်နိုင်သည့်စနစ်သို့ရရှိနိုင်သည့် stream filter များကိုလည်းစာရင်းပြုစုနိုင်သည်။ သို့သော် developer များစွာသည် streaming data parsivity ၏ခွဲခြမ်းစိတ်ဖြာမှုစွမ်းဆောင်နိုင်မှုကိုပိုမိုကောင်းမွန်စေရန်ဤကိရိယာများကိုအပြည့်အဝအသုံးချခြင်းမပြုပါ။
ဤဆောင်းပါးသည် stream_get_filters () နှင့်၎င်း၏ဆက်စပ်သောယန္တရားများကိုမည်သို့ပေါင်းစပ်ညှိနှိုင်းနိုင်ကြောင်းမိတ်ဆက်ပေးလိမ့်မည်။
stream_get_filters () function ကို function ကိုရရှိနိုင်သည့် filter name အားလုံးပါ 0 င်သည့်ခင်းကျင်းမှုတစ်ခုသို့ပြန်ပို့သည်။
$filters = stream_get_filters();
print_r($filters);
output သည်ဤကဲ့သို့သောပုံကိုကြည့်ကောင်းနိုင်သည်။
Array
(
[0] => zlib.*
[1] => string.rot13
[2] => convert.*
[3] => dechunk
)
ဤစစ်ထုတ်စက်များကို stream_filter_append () သို့မဟုတ် stream_filter_propend () သို့မဟုတ် stream_filter_promef reach () သို့မဟုတ် stream_filter_proilter_proilter_proilter_proilter_proilte) တွင်အသုံးပြုနိုင်သည်။
များသောအားဖြင့်ကျွန်ုပ်တို့သည်ဖိုင်များသို့မဟုတ်ကွန်ယက်စီးဆင်းမှုအချက်အလက်များကိုလုပ်ဆောင်သောအခါ code သည် fread_get_contents () သို့မဟုတ် stream_get_contents () ပါ 0 င ် သည့်အကြောင်းအရာတစ်ခုလုံးကိုတိုက်ရိုက်ဖတ်ရှုနိုင်သည် ။ ဤနည်းလမ်းသည်အဆင့်မြင့်မှတ်ဉာဏ်အသုံးပြုမှုနှင့် CPU အချိန်ကိုတိုးမြှင့်ပေးလိမ့်မည်။
သင့်လျော်သော stream filter ကို သုံး. data stream ကိုဖတ်နေစဉ်, အလယ်အလတ်ကိန်းဂဏန်းများနှင့်မှတ်ဉာဏ် overhead ကိုလျှော့ချနေစဉ်သင်ဖတ်ရှုခြင်းနှင့်လုပ်ဆောင်နိုင်သည်။
ဥပမာ - Zlib.inflate ကို သုံးပါ ။
$fp = fopen('https://gitbox.net/sample.gz', 'rb');
if ($fp) {
stream_filter_append($fp, 'zlib.inflate', STREAM_FILTER_READ);
while (!feof($fp)) {
$chunk = fread($fp, 8192);
// ဤတွင်ကျွန်ုပ်တို့သည် decompressed data block ကိုတိုက်ရိုက်ရရှိသည်
process_chunk($chunk);
}
fclose($fp);
}
function process_chunk($data) {
// အဆိုပါ decompressed ဒေတာဖြစ်စဉ်ကို
echo $data;
}
လက်စွဲ decompression နှင့်နှိုင်းယှဉ်ပါကဤနည်းလမ်းသည် Memory Peaks ကိုသိသိသာသာလျော့နည်းစေသည်။
filter သည်အစွမ်းထက်သော်လည်း stacking အလွန်အကျွံ stacking စွမ်းဆောင်ရည်ပျက်စီးခြင်းသို့ ဦး တည်နိုင်ပါတယ်။ လက်ရှိရရှိနိုင်သည့် filter များကို stream_get_filters () မှတစ်ဆင့်စာရင်းပြုစုပါ။
ဥပမာအားဖြင့်, utf8_encode () ကို ပထမ ဦး ဆုံးအသုံးပြုမည့်အစား encoding ပြောင်းလဲခြင်းကိုပြုလုပ်ရန်လိုအပ်ပါက mb_convert_encoding ကို သုံး. Convert.ICONV ကိုတိုက်ရိုက်သုံးနိုင်သည်။ * filter: filter:
$fp = fopen('https://gitbox.net/input.txt', 'rb');
if ($fp) {
stream_filter_append($fp, 'convert.iconv.UTF-8/ISO-8859-1', STREAM_FILTER_READ);
while (!feof($fp)) {
$chunk = fread($fp, 8192);
process_chunk($chunk);
}
fclose($fp);
}
အကယ်. သင်တူညီသောပုံစံဖြင့် stream ဖိုင်များအားထုတ်လုပ်ရန်လိုအပ်ပါကသင် / o ကုန်ကျစရိတ်ကိုလျှော့ချရန်နှင့်ကုန်ကျစရိတ်များကိုလျှော့ချရန်ရှောင်ရှားရန်သင်ဘုံဖတ်သည့် function တစ်ခုကိုဒီဇိုင်းဆွဲနိုင်သည်။
function read_with_filter($url, $filter) {
$fp = fopen($url, 'rb');
if ($fp) {
stream_filter_append($fp, $filter, STREAM_FILTER_READ);
while (!feof($fp)) {
$chunk = fread($fp, 8192);
process_chunk($chunk);
}
fclose($fp);
}
}
// Call ဥပမာ
$urls = [
'https://gitbox.net/file1.gz',
'https://gitbox.net/file2.gz'
];
foreach ($urls as $url) {
read_with_filter($url, 'zlib.inflate');
}