PHP တွင်များစွာသောအချက်အလက်များကိုကိုင်တွယ်ရန်အတွက်စီးဆင်းမှုသည်အစွမ်းထက်သောကိရိယာတစ်ခုဖြစ်သည်။ ချောင်းများသည်အချက်အလက်များကိုအချက်အလက်တစ်ခုလုံးကိုမှတ်ဉာဏ်ထဲသို့မတင်ဘဲ 0 ယ်လိုအားနှင့်စာဖတ်ခြင်းနှင့်ရေးသားရန်ခွင့်ပြုသည်။ အသုံးအများဆုံးစီးပွါးရေးလည်ပတ်မှုလုပ်ဆောင်ချက်များသည် stream_get_filters နှင့် stream_copy_to_stream များ ဖြစ်သည်။ ၎င်းသည် stream filter များရရှိရန်နှင့်အချက်အလက်များကိုအသီးသီးကူးယူရန်အသုံးပြုသည်။ အထူးသဖြင့်ဖိုင်ကြီးများသို့မဟုတ်ကွန်ယက်အချက်အလက်များကိုကိုင်တွယ်ရာတွင်ထိရောက်သော streaming လုပ်ငန်းများအောင်မြင်ရန်ဤလုပ်ငန်းဆောင်တာနှစ်ခုကိုမည်သို့အသုံးပြုရမည်ကိုဤဆောင်းပါးကရှင်းပြပါမည်။
stream_get_filters function ကိုမှတ်ပုံတင်ထားသော stream filter များအားလုံးရရှိရန်အသုံးပြုသည်။ ဤစစ်ထုတ်ခြင်းများသည် compression, encryption စသဖြင့် data များပြုလုပ်နိုင်သည်။ ဤစစ်ထုတ်မှုများသည်ပိုမိုပြောင်းလွယ်ပြင်လွယ်သောစီးဆင်းမှုများကိုအောင်မြင်ရန်သို့မဟုတ်စာဖတ်ခြင်းပုံစံကိုပြောင်းလဲရန်သို့မဟုတ်ရေးသားရန်ရေးသားထားသော filter များကိုသုံးနိုင်သည်။
<?php
// အားလုံးမှတ်ပုံတင် stream filter များကိုရယူပါ
$filters = stream_get_filters();
// အားလုံး stream filter တွေကို output
echo "မှတ်ပုံတင်ထားသော stream filter:\n";
foreach ($filters as $filter) {
echo $filter . "\n";
}
?>
အထက်ပါကုဒ်ကိုဖွင့်ပြီးစနစ်တွင်မှတ်ပုံတင်ထားသော stream film များစာရင်းအားလုံးကိုသင်တွေ့လိမ့်မည်။ ဤစစ်ထုတ်ခြင်းများကို decompression, encryption နှင့်အခြားအပြောင်းအလဲများကဲ့သို့သော stream လုပ်ငန်းများတွင်အသုံးပြုနိုင်သည်။
stream_copy_to_to_stream function ကိုတ ဦး တည်းစီးမှအခြားစီးသို့ကူးယူရန်အသုံးပြုသည်။ ဤလုပ်ဆောင်မှုသည်အထူးသဖြင့်ဖိုင်စစ်ဆင်ရေးသို့မဟုတ်ကွန်ယက်တောင်းဆိုမှုများအတွက်အထူးသင့်တော်သည်။ အချက်အလက်များကိုထိရောက်စွာကူးယူရန်လိုအပ်သည့်အခါအလွန်အသုံးဝင်သည်။ ၎င်းသည်ကြီးမားသောဖိုင်များကိုကူးယူခြင်းသို့မဟုတ်ကွန်ယက်စီးဆင်းမှုများမှဒေတာများကို local files များသို့ကူးယူသည်။
<?php
// ပွင့်လင်းအရင်းအမြစ်နှင့်ပစ်မှတ်ဖိုင်များ
$source = fopen('http://gitbox.net/sample.txt', 'r'); // ဒီဟာကကွန်ယက်စီးဆင်းမှုတစ်ခုလို့ယူဆတယ်
$destination = fopen('local_copy.txt', 'w'); // ပစ်မှတ်ဖိုင်
if ($source && $destination) {
// 复制数据到ပစ်မှတ်ဖိုင်
$bytesCopied = stream_copy_to_stream($source, $destination);
echo "အောင်မြင်စွာကူးယူပါ $bytesCopied byte ဒေတာ。\n";
// စီးကိုပိတ်ပါ
fclose($source);
fclose($destination);
} else {
echo "无法打开源文件或ပစ်မှတ်ဖိုင်。\n";
}
?>
ဤဥပမာတွင်ကွန်ယက်စီးဆင်းမှု ( http://gitbox.net/swlownet/sampxtxt ) မှအချက်အလက်များကို local_copy.txt untoTor သို့ကူးယူထားသော local_copy.txt သို့ကူးယူပါ။ ၎င်းသည်ဖိုင်တစ်ခုလုံးကိုမှတ်ဉာဏ်ထဲသို့တင်ရန်မလိုအပ်သည့်အတွက်ဤလုပ်ငန်းစဉ်သည်ထိရောက်စေသည်။
ပိုမိုရှုပ်ထွေးသော stream လုပ်ငန်းများကိုအကောင်အထည်ဖော်ရန် stream_get_get_filts_to_tram ကို သင် ပေါင်းစပ်နိုင်သည်။ ဥပမာအားဖြင့်, သင်သည်အချက်အလက်များကိုကူးယူနေစဉ် Stream ကိုစစ်ထုတ်လိုပါကသို့မဟုတ် compress လုပ်ခြင်းကိုကူးယူခြင်းမပြုမီသက်ဆိုင်ရာ stream filter ကိုသုံးနိုင်သည်။
<?php
// ပွင့်လင်းအရင်းအမြစ်နှင့်ပစ်မှတ်ဖိုင်များ
$source = fopen('http://gitbox.net/largefile.txt', 'r');
$destination = fopen('compressed_copy.txt', 'w');
// 检查源文件和ပစ်မှတ်ဖိုင်是否打开成功
if ($source && $destination) {
// compressed flow filter ကိုရယူပါ
$filter = stream_get_filters();
// ရှိ, ရှိမရှိစစ်ဆေးပါ zlib compression filter
if (in_array('zlib.deflate', $filter)) {
// အရင်းအမြစ်စီးပေါ်တွင်လျှောက်ထားပါ zlib compression filter
stream_filter_append($source, 'zlib.deflate');
}
// 复制流数据并应用compression filter
$bytesCopied = stream_copy_to_stream($source, $destination);
echo "အောင်မြင်စွာချုံ့ခြင်းနှင့်ကူးယူ $bytesCopied byte ဒေတာ。\n";
// စီးကိုပိတ်ပါ
fclose($source);
fclose($destination);
} else {
echo "无法打开源文件或ပစ်မှတ်ဖိုင်。\n";
}
?>
ဒီဥပမာမှာ Zlib.deflate Stream filter ကိုမှတ်ပုံတင်ထားတယ်ဆိုတာကို ဦး စွာစစ်ဆေးပြီးတည်ရှိနိုင်မလားဆိုတာကို ဦး စွာစစ်ဆေးပါ။ ထို့နောက်ကျွန်ုပ်တို့သည် compressed data ကိုပစ်မှတ်ဖိုင်သို့ကူးယူရန် stream_copy_to_stream ကို အသုံးပြုသည်။