လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> stream_copy_to_stream ကိုအသုံးပြုပြီး Offset ကြောင့်ဖြစ်ရတဲ့အချက်အလက်ရှုပ်ထွေးမှုပြ problem နာကိုလျစ်လျူရှုတယ်

stream_copy_to_stream ကိုအသုံးပြုပြီး Offset ကြောင့်ဖြစ်ရတဲ့အချက်အလက်ရှုပ်ထွေးမှုပြ problem နာကိုလျစ်လျူရှုတယ်

gitbox 2025-05-29

stream_copy_to_to_stream () သည် PHP ကိုလွှင့်ထုတ်သည့်လုပ်ငန်းများအတွက် PHP ကိုအသုံးပြုသောအခါဘုံနှင့်လက်တွေ့လုပ်ဆောင်မှုတစ်ခုဖြစ်သည်။ ၎င်းကိုစမ်းချောင်းတစ်ခုမှဒေတာများကိုအခြားတစ်ခုသို့ကူးယူရန်အသုံးပြုသည်။ အခြေခံ Syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -

 int stream_copy_to_stream(
    resource $from,
    resource $to,
    ?int $length = null,
    int $offset = 0
)

ဤလုပ်ဆောင်ချက်၏နောက်ဆုံး parameter $ offset ကို $ Offset သည်အချက်အလက်များကိုမည်သည့် byte ကို byte ကိုရှာဖွေရန်အသုံးပြုသည်။ မှန်ကန်စွာသတ်မှတ်ထားပါက၎င်းသည်မိတ္တူကူးခြင်း၏ start ကိုတိကျစွာထိန်းချုပ်ရန်ကျွန်ုပ်တို့ကိုကူညီနိုင်သည်။ သို့သော်ချိန်ညှိချက်များမမှန်ကန်ပါကအချက်အလက်ရှုပ်ထွေးမှုများကိုဖြစ်ပေါ်စေပြီးအချက်အလက်များဆုံးရှုံးခြင်းသို့မဟုတ်ဖိုင်ဖွဲ့စည်းပုံသို့မဟုတ်ဖိုင်တည်ဆောက်ပုံပျက်ခြင်းကိုဖြစ်ပေါ်စေသည်။

ဤဆောင်းပါးသည် offset parameter ၏အမှားအယွင်းများ၏အမှားအယွင်းများ၏ဖြစ်နိုင်ချေရှိသောအကျိုးဆက်များကိုနက်နက်နဲနဲလေ့လာသုံးသပ်ပြီးပြ the နာဖြစ်သည့်အခြေအနေများကိုသရုပ်ဖော်ရန်လက်တွေ့ကျသောဥပမာများကိုပြုလုပ်မည်။

ပြ problems နာများဖြစ်ပေါ်စေနိုင်သော offset ကိုမှားယွင်းစွာသတ်မှတ်ထားသည်

1 ။ ဒေတာများကိုကူးယူခြင်းမပြုပါနှင့်, မပြည့်စုံသောသို့မဟုတ်ရှုပ်ထွေးသောအကြောင်းအရာများကိုဖြစ်ပေါ်စေသည်

ကျွန်ုပ်တို့တွင်အောက်ပါအကြောင်းအရာများပါ 0 င်သော JSON ဖိုင်ရှိသည်ဆိုပါစို့။

 {"id":123,"name":"Alice","email":"[email protected]"}

ဖိုင်မှ "name" အကွက်နှင့်စသောအကြောင်းအရာကိုဖတ်ရန်နှင့်အခြားစီးသို့ကူးယူပါ။ အကယ်. offset ကိုမှားယွင်းစွာသတ်မှတ်ထားပါက၎င်းအားအမှားဖြင့်သတ်မှတ်ခြင်းကဲ့သို့ (နှင့်အမှန်တကယ် 9 ဖြစ်သင့်သည်) ကိုဖတ်ပါ။

 123,"name":"Alice","email":"[email protected]"}

သိသာထင်ရှားတဲ့ဒီတော့ဒါကငါတို့လိုချင်တာမဟုတ်ဘူး, ဒေတာဖွဲ့စည်းပုံလည်းယိုယွင်းပျက်စီးသွားတယ်။

2 ။ အရှည်နှင့်အတူပေါင်းစပ်သောအခါကြားဖြတ်အကွာအဝေးမျှော်လင့်ချက်များထက်ကျော်လွန်လိမ့်မည်

ဥပမာအားဖြင့်,

 stream_copy_to_stream($src, $dest, 20, 10);

သင်မူလက 10 ကြိမ်မြောက် byte မှ 20 bytes များကိုကူးယူနေသည်ဟုယူဆရသည်

ပိုဆိုးသည်မှာ destination stream ကို ငွေဖြည့် သည့်အချိန်တွင်မထိန်းသိမ်းသင့်သည့်ဒေတာအချို့အစိတ်အပိုင်းအချို့ကိုသင် overwrite လုပ်သည်။

3 ။ အရင်းအမြစ်စီးဆင်းမှု၏တည်နေရာတည်ရှိမှုသည် offset ဖြင့်ပ conflict ိပက်ခပြုလုပ်နိုင်သည်

အတွင်းပိုင်း stream_copy_to_stream () သည် $ Offset မှသတ်မှတ်ထားသောတည်နေရာကိုရှာဖွေရန်ကြိုးစားလိမ့်မည်။ အကယ်. အရင်းအမြစ်စီးဆင်းမှုသည်မရှာဖွေနိုင်သောစီးဆင်းမှုမရှိသေးပါက (ဤသို့သောပတ်ရစ်ပုတ်ပါသို့မဟုတ်အချို့သော HTTP Stream ကဲ့သို့) အကယ်. Offset Non-0 ကိုသတ်မှတ်ခြင်းသည်တိုက်ရိုက်ကျရှုံးခြင်း,

 PHP Warning: stream_copy_to_stream(): stream does not support seeking in ...

ထို့ကြောင့် offset ကိုအသုံးပြုခြင်းသည်အရင်းအမြစ်ချောင်းအမျိုးအစားကိုနားလည်မှုအပေါ်အခြေခံရမည်။

လက်တွေ့ကျသောဥပမာများ

ပြ the နာကိုတိကျတဲ့ဥပမာတစ်ခုဖြင့်ကြည့်ကြစို့။

 $src = fopen('data.json', 'r');
$dest = fopen('php://temp', 'w+');

stream_copy_to_stream($src, $dest, null, 50);

rewind($dest);
echo stream_get_contents($dest);

Data.json ၏စုစုပေါင်းအရွယ်အစားကိုယူဆသည်မှာ 48 bytes ဖြစ်သည်ဟုယူဆသော်လည်းသင် 50 ကိုအပြီးသတ်သတ်မှတ်မည်။ ရလဒ်ကားအဘယ်နည်း။

output ကိုဗလာ။ Offset 50 ကတည်းကအရင်းအမြစ်စီးသည်ကူးယူရန်အချက်အလက်များမရှိပါ။

အပြန်အလှန်အားဖြင့်, offset သည်သေးငယ်လွန်းပါက 0 0 င် 0 င်ပါက 0 မ်းသာသည်,

Offset Eriting အမှားများကိုမည်သို့ရှောင်ရှားရမည်နည်း။

  1. ဒေတာဖွဲ့စည်းပုံကိုတိကျသောတိုင်းတာခြင်း - ftell () နှင့် fseek) နှင့် fseek () fseek () fseek ()) ကိုအသုံးပြုပါ။

  2. အသုံးပြုမှုရည်မှန်းချက်ကိုဖော်ထုတ်ပါ။

  3. stream အမျိုးအစားများကိုသတိထားပါ။ PHP Stream Wrappers (ဥပမာ PHP: // input ) အချို့ကိုရှာဖွေခြင်းကိုမထောက်ခံပါ။

  4. အမှားစစ်ဆေးခြင်း - မိတ္တူတစ်စောင်စီသည်မိတ္တူကူးယူပြီးနောက်ပြန်လည်ရောက်ရှိလာခြင်းရှိမရှိစစ်ဆေးပါ။

အကျဉ်းချုပ်

steam_copy_to_stream () သည်အစွမ်းထက်သော်လည်းအလွယ်တကူအလွယ်တကူအလွယ်တကူလုပ်ဆောင်သောလုပ်ဆောင်ချက်ဖြစ်သည်။ အထူးသဖြင့်၎င်းသည်မှားယွင်းစွာ သတ်မှတ်ထား ပါက၎င်းသည်မှားယွင်းစွာသတ်မှတ်ထားပါကအချက်အလက်များကိုမှားယွင်းသောအနေအထားမှစတင်ရန်,

ဤဆောင်းပါး၏နိဒါန်းမှတစ်ဆင့်သင်သည် Offset Setting Errors ၏ဖြစ်နိုင်ချေရှိသောအကျိုးသက်ရောက်မှုကိုရှင်းလင်းစွာနားလည်သဘောပေါက်ရန်ကျွန်ုပ်ယုံကြည်သည်။ အရေးအသားကုဒ်ရေးရာကုဒ်ကိုရှောင်ရှားရန်သော့ချက်ဖြစ်သောဒေတာအဆောက်အအုံများကိုအထိခိုက်မခံသော,