PHP တွင် Stream_copy_to_stream သည်အလွန်လက်တွေ့ကျသောလုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ ဤလုပ်ဆောင်မှုကိုများသောအားဖြင့် file operation, data transmission နှင့်အခြားအခြေအနေများတွင်အသုံးပြုလေ့ရှိသည်။ သို့သော် developer များက stream_copy_to_stream ကို အသုံးပြုသောအခါသူတို့သည်မပြည့်စုံသောကူးယူခြင်းအကြောင်းအရာများကိုမကြာခဏကြုံတွေ့ရလေ့ရှိပြီးကူးယူထားသောဖိုင်များသို့မဟုတ်အချက်အလက်များ၏အကျင့်ပျက်ခြစားမှုသို့မဟုတ်ဆုံးရှုံးမှုများဆုံးရှုံးခြင်းကိုမကြာခဏကြုံတွေ့ရသည်။ ဤဆောင်းပါးသည်များသောအားဖြင့်ဖြစ်ရပ်များနှင့်ဤပြ problems နာများကိုမည်သို့ဖြေရှင်းရမည်ကိုဆန်းစစ်ပါလိမ့်မည်။
stream_copy_to_stream function ၏ရှေ့ပြေးပုံစံသည်အောက်ပါအတိုင်းဖြစ်သည် -
<span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-title function_ invoke__">stream_copy_to_stream</span></span><span> ( resource </span><span><span class="hljs-variable">$source</span></span><span>, resource </span><span><span class="hljs-variable">$dest</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$maxlength</span></span><span> = -</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$offset</span></span><span> = </span><span><span class="hljs-number">0</span></span><span> )
</span></span>$ ရင်းမြစ် - အရင်းအမြစ်များစီးသွန်အရင်းအမြစ်များဖြစ်သောအကြောင်းအရာများသည်အကြောင်းအရာများကိုကူးယူရန်လိုအပ်သည့်စမ်းချောင်းများဖြစ်သည်။
$ dipt : Target Stream Stream Resour Customer သည်အကြောင်းအရာကိုကူးယူမည့်စီးဆင်းမှုဖြစ်သည်။
$ Maxlength - ကူးယူရန် Bytes အများဆုံးအရေအတွက်ကိုကူးယူထားသည့်အမြင့်ဆုံးတန်ဖိုးမှာအကန့်အသတ်မရှိကြောင်းညွှန်ပြသည်။
$ Offset : Offset သည်အရင်းအမြစ်ချောင်းမှကူးယူထားသော offset ကိုကူးယူထားသည့်ပုံသေတန်ဖိုးသည် 0 ဖြစ်သည်။
ဤလုပ်ဆောင်မှုသည်အချက်အလက်များမပြည့်မီသည်အထိသို့မဟုတ်အများဆုံး bytes အရေအတွက်ကိုရောက်ရှိသည်အထိဤလုပ်ဆောင်မှုသည် source stream မှအချက်အလက်များကိုပစ်မှတ်လွှင့်ဌာနသို့ကူးယူထားသည်။ တစ်ခုခုမှားယွင်းသွားရင်ကူးယူထားတဲ့အကြောင်းအရာတွေမပြည့်စုံဘူး။
Target Stream သယံယံဂျက် သ အရင်းအမြစ် ($ dipt) ကိုမအောင်မြင်ပါက, ဤကိစ္စတွင်ကူးယူထားသောအကြောင်းအရာများကိုသဘာဝကျကျမပြီးဆုံးပါ။
ဖြေရှင်းချက် - ပစ်မှတ်စီးဆင်းမှုအရင်းအမြစ်ကိုရေးစနစ်ဖြင့်ဖွင့်ထားကြောင်းသေချာအောင်လုပ်ပါ။ ဥပမာအားဖြင့်ဖိုင်တစ်ခုရေးသည့်အခါ, 'W' သို့မဟုတ် 'a' ' mode တွင် file stream ကိုဖွင့်ရန် fopen ကို သုံးနိုင်သည်။
<span><span><span class="hljs-variable">$source</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'source.txt'</span></span><span>, </span><span><span class="hljs-string">'r'</span></span><span>);
</span><span><span class="hljs-variable">$dest</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'dest.txt'</span></span><span>, </span><span><span class="hljs-string">'w'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">stream_copy_to_stream</span></span><span>(</span><span><span class="hljs-variable">$source</span></span><span>, </span><span><span class="hljs-variable">$dest</span></span><span>);
</span></span>အကယ်. အရင်းအမြစ်စီးမြှင့်တင်ရေးအရင်းအမြစ် ($ source) ကိုမှန်ကန်စွာမဖတ်ပါက stream_copy_to_stream လည်းမပြည့်စုံသောမိတ္တူကူးခြင်းတို့ပါ 0 င်မည်ဖြစ်သည်။ အထူးသဖြင့်ပိုကြီးတဲ့ဖိုင်တွေ (သို့) ဒေတာစီးဆင်းမှုတွေအတွက် source stream ကိုဖတ်နေစဉ်အမှားတစ်ခုဖြစ်ပေါ်ပါကပွားခြင်းအတွက်အနှောက်အယှက်ဖြစ်စေနိုင်သည်။
ဖြေရှင်းချက် - အရင်းအမြစ်စီးဆင်းမှုကိုအောင်မြင်စွာဖွင့်ပြီးဖတ်နိုင်မလားစစ်ဆေးပါ။ feof () ဖိုင်ကိုအဆုံးအထိဖတ်ရန်သို့မဟုတ်ဖိုင်ဖတ်ခြင်းရှိမရှိစစ်ဆေးရန်သို့မဟုတ်ဖိုင်ဖတ်ရန် function ကိုပြန်ပို့ ခြင်း ရှိမရှိစစ်ဆေးနိုင်သည်။
<span><span><span class="hljs-variable">$source</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'source.txt'</span></span><span>, </span><span><span class="hljs-string">'r'</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$source</span></span><span>) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">'Failed to open source file'</span></span><span>);
}
</span><span><span class="hljs-variable">$dest</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'dest.txt'</span></span><span>, </span><span><span class="hljs-string">'w'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">stream_copy_to_stream</span></span><span>(</span><span><span class="hljs-variable">$source</span></span><span>, </span><span><span class="hljs-variable">$dest</span></span><span>);
</span></span>Steam_Copy_to_to_Stream ကို ကူးယူရန် Bytes အများဆုံးအရေအတွက်ကိုကန့်သတ်ရန် Maxlength Parameter ကိုသတ်မှတ်ရန်အထောက်အပံ့ပေးသည်။ ပစ်မှတ်လွှင့်ဌာနမှကူးယူထားသောအချက်အလက်များသည်သတ်မှတ်ထားသော bytes အရေအတွက်ထက်ကျော်လွန်ပါကကူးယူခြင်းကိုစောစောစီးစီးရပ်တန့်သွားလိမ့်မည်။
WomeRound - Maxlength သို့လွှဲပြောင်းထားသောတန်ဖိုးသည်ကြီးမားသည်ကိုသေချာအောင်လုပ်ပါ။ သို့မဟုတ် -1 သည်ကန့်သတ်ချက်မရှိပါ။
<span><span><span class="hljs-title function_ invoke__">stream_copy_to_stream</span></span><span>(</span><span><span class="hljs-variable">$source</span></span><span>, </span><span><span class="hljs-variable">$dest</span></span><span>, -</span><span><span class="hljs-number">1</span></span><span>);
</span></span>ဖိုင်တစ်ခုကိုကူးယူသောအခါ Stream Pointer ၏တည်နေရာသည်မိတ္တူ၏ရလဒ်ကိုအကျိုးသက်ရောက်နိုင်သည်။ အထူးသဖြင့် offset parameter ကိုသတ်မှတ်ထားသည့်အခါအရင်းအမြစ်စီး၏ pointer အနေအထားသည်ဖိုင်၏အစကိုညွှန်ပြရန်မဖြစ်နိုင်ပါ။
ဖြေရှင်းချက် - စီးဆင်းမှု pointer ကိုမှန်ကန်သောအနေအထားတွင်သေချာအောင်လုပ်ပါ။ Source Stream Pointer ၏အနေအထားကို fseek () မှတဆင့်ချိန်ညှိနိုင်သည်။
</span><span><span class="hljs-title function_ invoke__">stream_copy_to_stream</span></span><span>(</span><span><span class="hljs-variable">$source</span></span><span>, </span><span><span class="hljs-variable">$dest</span></span><span>);
</span></span>အကယ်. stream_copy_to_stream ကို ကွန်ယက်စီးဆင်းမှုသို့မဟုတ်ဝေးလံခေါင်သီသောဖိုင်များကိုပွားရန်အသုံးပြုသည်ဆိုပါကကွန်ရက်မတည်ငြိမ်မှုသို့မဟုတ်ဆာဗာစွမ်းဆောင်ရည်ဆိုင်ရာပြ issues နာများကြောင့်ပုံတူပွားပြတ်လပ်မှုဖြစ်ပေါ်နိုင်သည်။
ဖြေရှင်းချက် - ဤကိစ္စတွင်အမှား ကိုင်တွယ် ခြင်းနှင့်ပြန်လည်ပြုပြင်ခြင်းယန္တရားများကိုထည့်သွင်းစဉ်းစားပါ,
<span><span><span class="hljs-variable">$source</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'http://example.com/file'</span></span><span>, </span><span><span class="hljs-string">'r'</span></span><span>);
</span><span><span class="hljs-variable">$dest</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'localfile.txt'</span></span><span>, </span><span><span class="hljs-string">'w'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">stream_copy_to_stream</span></span><span>(</span><span><span class="hljs-variable">$source</span></span><span>, </span><span><span class="hljs-variable">$dest</span></span><span>);
</span></span>ဖိုင် (သို့) ဒေတာစီးဆင်းမှုသည်အလွန်ကြီးမားသည့်အခါ stream_copy_to_stream ကိုကူးယူသည့်အခါ PHP Memory ကန့်သတ်ချက်များကြောင့်သက်ရောက်မှုရှိနိုင်သည်။ မှတ်ဉာဏ်မလုံလောက်ပါကကူးယူခြင်းသည်အချိန်မတန်မီသတ်မှတ်ခြင်းဖြစ်နိုင်သည်။
ဖြေရှင်းချက် - Memory_Limit Settings ကို php.ini တွင် memory_limit settings ကိုပြုပြင်ခြင်းသို့မဟုတ်သင်၏ကုဒ်အတွင်း ini_set ကို အသုံးပြု. Memory Limit ကိုသင် dynamally ညှိနိုင်သည်။
<span><span><span class="hljs-title function_ invoke__">ini_set</span></span><span>(</span><span><span class="hljs-string">'memory_limit'</span></span><span>, </span><span><span class="hljs-string">'512M'</span></span><span>); </span><span><span class="hljs-comment">// မှတ်ဉာဏ်ကန့်သတ်တိုးမြှင့်</span></span><span>
</span><span><span class="hljs-variable">$source</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'largefile.txt'</span></span><span>, </span><span><span class="hljs-string">'r'</span></span><span>);
</span><span><span class="hljs-variable">$dest</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'dest.txt'</span></span><span>, </span><span><span class="hljs-string">'w'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">stream_copy_to_stream</span></span><span>(</span><span><span class="hljs-variable">$source</span></span><span>, </span><span><span class="hljs-variable">$dest</span></span><span>);
</span></span>steam_copy_to_stream သည် အရင်းအမြစ်နှင့်ပစ်မှတ်စီးဆင်းမှုများကိုခိုင်လုံသောအရင်းအမြစ်များဖြစ်ရန်လိုအပ်သည်။ အကယ်. stream အမျိုးအစားများသည်မကိုက်ညီပါက (ဥပမာအားဖြင့်အရင်းအမြစ်သည် string stream သည် string stream တစ်ခုဖြစ်ပြီး Target Stream သည် file stream ဖြစ်သည်။ မိတ္တူကူးခြင်းလည်းမပြည့်စုံပေ။
ဖြေရှင်းချက် - အရင်းအမြစ်နှင့် ဦး တည်ရာ stream အမျိုးအစားများကိုက်ညီမှုနှင့်နှစ် ဦး စလုံးမှန်ကန်စွာဖွင့်လှစ်ထားသည့်အရင်းအမြစ်များကိုမှန်ကန်စွာဖွင့်လှစ်ထားကြောင်းသေချာပါစေ။
<span><span><span class="hljs-variable">$source</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'source.txt'</span></span><span>, </span><span><span class="hljs-string">'r'</span></span><span>);
</span><span><span class="hljs-variable">$dest</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'dest.txt'</span></span><span>, </span><span><span class="hljs-string">'w'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">stream_copy_to_stream</span></span><span>(</span><span><span class="hljs-variable">$source</span></span><span>, </span><span><span class="hljs-variable">$dest</span></span><span>);
</span></span>stream_copy_to_stream သည် PHP တွင်အလွန်အစွမ်းထက်သောလုပ်ဆောင်မှုတစ်ခုဖြစ်သည်။ သို့သော်အသုံးပြုသူများသည်မိတ္တူကူးစစ်ဆင်ရေး၏ချောမွေ့မှုများကိုသေချာစေရန်အချက်များစွာကိုဂရုပြုရန်လိုအပ်သည်။ Target Stream ၏အရေးအခင်းကိုစစ်ဆေးခြင်းအားဖြင့်အရင်းအမြစ်စီးဆင်းမှုကိုစစ်ဆေးခြင်းအားဖြင့်အများဆုံး bytes အရေအတွက်, စီးပွါးရေးအမှတ်အသားနေရာ, ကွန်ယက်တည်ငြိမ်မှုနှင့်မှတ်ဥာဏ်အကန့်အသတ်ရှိသည်။
ဤအပင်များနှင့်ဖြေရှင်းနည်းများကိုကျွမ်းကျင်မှုများကဖွံ့ဖြိုးမှုစွမ်းရည်ကိုများစွာတိုးတက်စေပြီးမပြည့်စုံသောမိတ္တူကူးခြင်းကြောင့်ဖြစ်ပေါ်လာသောအမှားများနှင့်ဆုံးရှုံးမှုများကိုများစွာတိုးတက်စေနိုင်သည်။