လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Stream_copy_to_stream နှင့်အတူ stream_get_filters ကိုအသုံးပြု။ အကောင်းဆုံးအလေ့အကျင့်

Stream_copy_to_stream နှင့်အတူ stream_get_filters ကိုအသုံးပြု။ အကောင်းဆုံးအလေ့အကျင့်

gitbox 2025-05-29

PHP တွင်များစွာသောအချက်အလက်များကိုကိုင်တွယ်ရန်အတွက်စီးဆင်းမှုသည်အစွမ်းထက်သောကိရိယာတစ်ခုဖြစ်သည်။ ချောင်းများသည်အချက်အလက်များကိုအချက်အလက်တစ်ခုလုံးကိုမှတ်ဉာဏ်ထဲသို့မတင်ဘဲ 0 ယ်လိုအားနှင့်စာဖတ်ခြင်းနှင့်ရေးသားရန်ခွင့်ပြုသည်။ အသုံးအများဆုံးစီးပွါးရေးလည်ပတ်မှုလုပ်ဆောင်ချက်များသည် stream_get_filters နှင့် stream_copy_to_stream များ ဖြစ်သည်။ ၎င်းသည် stream filter များရရှိရန်နှင့်အချက်အလက်များကိုအသီးသီးကူးယူရန်အသုံးပြုသည်။ အထူးသဖြင့်ဖိုင်ကြီးများသို့မဟုတ်ကွန်ယက်အချက်အလက်များကိုကိုင်တွယ်ရာတွင်ထိရောက်သော streaming လုပ်ငန်းများအောင်မြင်ရန်ဤလုပ်ငန်းဆောင်တာနှစ်ခုကိုမည်သို့အသုံးပြုရမည်ကိုဤဆောင်းပါးကရှင်းပြပါမည်။

1 ။ stream_get_filters function ကိုမိတ်ဆက်

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 လုပ်ငန်းများတွင်အသုံးပြုနိုင်သည်။

2 ။ stream_copy_to_stream function ကိုမိတ်ဆက်

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 သို့ကူးယူပါ။ ၎င်းသည်ဖိုင်တစ်ခုလုံးကိုမှတ်ဉာဏ်ထဲသို့တင်ရန်မလိုအပ်သည့်အတွက်ဤလုပ်ငန်းစဉ်သည်ထိရောက်စေသည်။

3 ။ stream_get_filters နှင့် stream_copy_to_to_tream ကိုအသုံးပြုပါ။

ပိုမိုရှုပ်ထွေးသော stream လုပ်ငန်းများကိုအကောင်အထည်ဖော်ရန် stream_get_get_filts_to_tram ကို သင် ပေါင်းစပ်နိုင်သည်။ ဥပမာအားဖြင့်, သင်သည်အချက်အလက်များကိုကူးယူနေစဉ် Stream ကိုစစ်ထုတ်လိုပါကသို့မဟုတ် compress လုပ်ခြင်းကိုကူးယူခြင်းမပြုမီသက်ဆိုင်ရာ stream filter ကိုသုံးနိုင်သည်။

နမူနာကုဒ်: ချုံ့အတွက် 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 ကို အသုံးပြုသည်။