curl_mamulti_add_handle သည် PHP တွင်တစ်ပြိုင်နက်တည်း http တောင်းဆိုမှုများကိုကိုင်တွယ်သောအခါ curl multi interface တွင်အဓိကလုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ ၎င်းသည်ကျွန်ုပ်တို့အားလက်ကိုင် session တစ်ခုသို့တစ်ခုတည်းသော ဆံပင်ကောက် ကောက်လက်ကိုင်တစ်ခုနှင့်ပူးပေါင်းရန်ခွင့်ပြုသည်။ ဤယန္တရားသည် Punked upload အတွက်အလွန်အသုံးဝင်သည်။
ပိတ်ပင်တားဆီးမှုတင်ခြင်း၏အခြေခံအယူအဆမှာဖိုင်ကြီးကြီးများကိုသေးငယ်သောအပိုင်းပိုင်းခွဲရန်, ထို့နောက်တစ်ပြိုင်နက်တည်းဤသေးငယ်သောအပိုင်းအစများကိုတင်ပါ။ curl_multi_add_handle ကိုအသုံးပြုပြီး upload စွမ်းဆောင်ရည်ကိုသိသိသာသာတိုးတက်စေနိုင်သည်။
ကြီးမားသောဖိုင်များကိုဖိုင်ငယ်များသို့ခွဲထားသည့်ဖိုင်ငယ်များအဖြစ်ခွဲထား (လက်ဖြင့် မောင်းနှင်ခြင်း () ) ဖြင့်လက်ဖြင့်ကိုင်ထားနိုင်သည်) ။
ပိတ်ပင်တားဆီးမှုတစ်ခုစီအတွက်လွတ်လပ်သော curl တောင်းဆိုမှုကိုဖန်တီးပါ။
curl_multi_init မှဖန်တီးထားသော Multi-Handle Multay Multier Manager သို့ဤတောင်းဆိုမှုလက်ကိုင်များကိုထည့်ပါ။
Upload တောင်းဆိုမှုများအားလုံးကိုတစ်ပြိုင်နက်တည်းကွပ်မျက်ခံရရန် curl_multi_exec () ကို သုံးပါ။
<span><span><span class="hljs-variable">$multiHandle</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_multi_init</span></span><span>();
</span><span><span class="hljs-variable">$chunkFiles</span></span><span> = [</span><span><span class="hljs-string">'chunk1.bin'</span></span><span>, </span><span><span class="hljs-string">'chunk2.bin'</span></span><span>, </span><span><span class="hljs-string">'chunk3.bin'</span></span><span>]; </span><span><span class="hljs-comment">// နမူနာပိတ်ပင်တားဆီးမှုဖိုင်</span></span><span>
</span><span><span class="hljs-variable">$curlHandles</span></span><span> = [];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$chunkFiles</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$index</span></span><span> => </span><span><span class="hljs-variable">$file</span></span><span>) {
</span><span><span class="hljs-variable">$ch</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_init</span></span><span>(</span><span><span class="hljs-string">'https://example.com/upload_chunk'</span></span><span>);
</span><span><span class="hljs-variable">$fileData</span></span><span> = </span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_setopt</span></span><span>(</span><span><span class="hljs-variable">$ch</span></span><span>, CURLOPT_RETURNTRANSFER, </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_setopt</span></span><span>(</span><span><span class="hljs-variable">$ch</span></span><span>, CURLOPT_POSTFIELDS, </span><span><span class="hljs-variable">$fileData</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_setopt</span></span><span>(</span><span><span class="hljs-variable">$ch</span></span><span>, CURLOPT_HTTPHEADER, [
</span><span><span class="hljs-string">'Content-Type: application/octet-stream'</span></span><span>,
</span><span><span class="hljs-string">'Content-Length: '</span></span><span> . </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$fileData</span></span><span>),
</span><span><span class="hljs-string">'X-Chunk-Index: '</span></span><span> . </span><span><span class="hljs-variable">$index</span></span><span>
]);
</span><span><span class="hljs-title function_ invoke__">curl_multi_add_handle</span></span><span>(</span><span><span class="hljs-variable">$multiHandle</span></span><span>, </span><span><span class="hljs-variable">$ch</span></span><span>);
</span><span><span class="hljs-variable">$curlHandles</span></span><span>[] = </span><span><span class="hljs-variable">$ch</span></span><span>;
}
</span><span><span class="hljs-comment">// အားလုံး upload တာဝန်များကိုလုပ်ဆောင်ပါ</span></span><span>
</span><span><span class="hljs-variable">$running</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>;
</span><span><span class="hljs-keyword">do</span></span><span> {
</span><span><span class="hljs-title function_ invoke__">curl_multi_exec</span></span><span>(</span><span><span class="hljs-variable">$multiHandle</span></span><span>, </span><span><span class="hljs-variable">$running</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_multi_select</span></span><span>(</span><span><span class="hljs-variable">$multiHandle</span></span><span>);
} </span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$running</span></span><span> > </span><span><span class="hljs-number">0</span></span><span>);
</span><span><span class="hljs-comment">// အရင်းအမြစ်များကိုသန့်ရှင်းရေး</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$curlHandles</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$ch</span></span><span>) {
</span><span><span class="hljs-title function_ invoke__">curl_multi_remove_handle</span></span><span>(</span><span><span class="hljs-variable">$multiHandle</span></span><span>, </span><span><span class="hljs-variable">$ch</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_close</span></span><span>(</span><span><span class="hljs-variable">$ch</span></span><span>);
}
</span><span><span class="hljs-title function_ invoke__">curl_multi_close</span></span><span>(</span><span><span class="hljs-variable">$multiHandle</span></span><span>);
</span></span>
Block downloads အတွက်, တူညီတဲ့ယန္တရားကိုသက်ဆိုင်သည်။ Range header ကိုသတ်မှတ်ခြင်းဖြင့်ဖိုင်တစ်ခုလုံး၏တိကျသော byte ကြားကာလကိုကျွန်ုပ်တို့တောင်းဆိုနိုင်သည်။
ပစ်မှတ်ဖိုင်၏စုစုပေါင်းအရွယ်အစားရရှိသွားတဲ့။
၎င်းကိုအစိတ်အပိုင်းများစွာခွဲခြားပါ, ဥပမာအနည်းဆုံး 1MB ။
အပိုင်းတစ်ခုစီအတွက် အကွာအဝေး ခေါင်းစီးနှင့်အတူ curl တောင်းဆိုမှုကိုတည်ဆောက်ပါ။
curl_multi_add_handle ကို curl_multi_add_handle ကိုတစ်ပြိုင်တည်း download ပြုလုပ်ရန်။
ဒေါင်းလုပ်ရလဒ်များကိုနိုင်ရန်အတွက်ပေါင်းစည်းပါ။
<span><span><span class="hljs-variable">$url</span></span><span> = </span><span><span class="hljs-string">'https://example.com/largefile.zip'</span></span><span>;
</span><span><span class="hljs-variable">$fileSize</span></span><span> = </span><span><span class="hljs-number">10000000</span></span><span>; </span><span><span class="hljs-comment">// ဖိုင်အရွယ်အစားလို့ယူဆတယ်10MB</span></span><span>
</span><span><span class="hljs-variable">$chunkSize</span></span><span> = </span><span><span class="hljs-number">1000000</span></span><span>; </span><span><span class="hljs-comment">// တစ်ခုချင်းစီကိုအပိုင်းအစ1MB</span></span><span>
</span><span><span class="hljs-variable">$multiHandle</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_multi_init</span></span><span>();
</span><span><span class="hljs-variable">$curlHandles</span></span><span> = [];
</span><span><span class="hljs-variable">$results</span></span><span> = [];
</span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$start</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$start</span></span><span> < </span><span><span class="hljs-variable">$fileSize</span></span><span>; </span><span><span class="hljs-variable">$start</span></span><span> += </span><span><span class="hljs-variable">$chunkSize</span></span><span>) {
</span><span><span class="hljs-variable">$end</span></span><span> = </span><span><span class="hljs-title function_ invoke__">min</span></span><span>(</span><span><span class="hljs-variable">$start</span></span><span> + </span><span><span class="hljs-variable">$chunkSize</span></span><span> - </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-variable">$fileSize</span></span><span> - </span><span><span class="hljs-number">1</span></span><span>);
</span><span><span class="hljs-variable">$ch</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_init</span></span><span>(</span><span><span class="hljs-variable">$url</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_setopt</span></span><span>(</span><span><span class="hljs-variable">$ch</span></span><span>, CURLOPT_RETURNTRANSFER, </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_setopt</span></span><span>(</span><span><span class="hljs-variable">$ch</span></span><span>, CURLOPT_RANGE, </span><span><span class="hljs-string">"<span class="hljs-subst">$start</span></span></span><span>-</span><span><span class="hljs-subst">$end</span></span><span>");
</span><span><span class="hljs-title function_ invoke__">curl_multi_add_handle</span></span><span>(</span><span><span class="hljs-variable">$multiHandle</span></span><span>, </span><span><span class="hljs-variable">$ch</span></span><span>);
</span><span><span class="hljs-variable">$curlHandles</span></span><span>[] = </span><span><span class="hljs-variable">$ch</span></span><span>;
}
</span><span><span class="hljs-comment">// အားလုံး download လုပ်ရပ်များလုပ်ဆောင်ပါ</span></span><span>
</span><span><span class="hljs-variable">$running</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>;
</span><span><span class="hljs-keyword">do</span></span><span> {
</span><span><span class="hljs-title function_ invoke__">curl_multi_exec</span></span><span>(</span><span><span class="hljs-variable">$multiHandle</span></span><span>, </span><span><span class="hljs-variable">$running</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_multi_select</span></span><span>(</span><span><span class="hljs-variable">$multiHandle</span></span><span>);
} </span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$running</span></span><span> > </span><span><span class="hljs-number">0</span></span><span>);
</span><span><span class="hljs-comment">// ရလဒ်များကိုစုဆောင်းနှင့်ပေါင်းစည်း</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$curlHandles</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$ch</span></span><span>) {
</span><span><span class="hljs-variable">$results</span></span><span>[] = </span><span><span class="hljs-title function_ invoke__">curl_multi_getcontent</span></span><span>(</span><span><span class="hljs-variable">$ch</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_multi_remove_handle</span></span><span>(</span><span><span class="hljs-variable">$multiHandle</span></span><span>, </span><span><span class="hljs-variable">$ch</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_close</span></span><span>(</span><span><span class="hljs-variable">$ch</span></span><span>);
}
</span><span><span class="hljs-title function_ invoke__">curl_multi_close</span></span><span>(</span><span><span class="hljs-variable">$multiHandle</span></span><span>);
</span><span><span class="hljs-comment">// ဖိုင်အပြည့်အစုံကိုရေးပါ</span></span><span>
</span><span><span class="hljs-title function_ invoke__">file_put_contents</span></span><span>(</span><span><span class="hljs-string">'merged_file.zip'</span></span><span>, </span><span><span class="hljs-title function_ invoke__">implode</span></span><span>(</span><span><span class="hljs-string">''</span></span><span>, </span><span><span class="hljs-variable">$results</span></span><span>));
</span></span>
ဆက်သွယ်မှုကိုကန့်သတ်ချက်များ - တစ်ပြိုင်နက်တည်းက connections ကိုငြင်းဆန်ရန်ဆာဗာကိုဖြစ်ပေါ်စေနိုင်သည်။ (တစ်ပြိုင်နက်တည်းလုပ်ဆောင်ခြင်း) ကိုတစ်ပြိုင်နက်တည်းလုပ်ဆောင်ခြင်းအရေအတွက်ကိုထိန်းချုပ်ရန်အကြံပြုသည်။
အမှားကိုင်တွယ်ခြင်း - curl_Error () နှင့် curl_multi_info_read () ကို သုံးပါ။ တောင်းတစ်ခုစီ၏အခြေအနေကိုစစ်ဆေးရန်။
အချိန်ကုန်ခံချိန်ညှိ ခြင်း
curl_multi_add_handle သည်တစ်ပြိုင်နက်တည်း http တောင်းဆိုမှုများကိုတည်ဆောက်ရန်အဓိကကိရိယာတစ်ခုဖြစ်သည်။ ၎င်းမှတစ်ဆင့် chunking striesgeties များကိုပေါင်းစပ်ခြင်း, ကြီးမားသောဖိုင်များ၏လုပ်ငန်းများကိုတင်ခြင်းနှင့်ကူးယူခြင်းတို့ကိုထိရောက်စွာကိုင်တွယ်နိုင်သည်။ အကျိုးသင့်အကြောင်းသင့်ရှိသောတောင်းဆိုမှုများ, တစ်ပြိုင်နက်တည်းထိန်းချုပ်မှုနှင့်အမှားကိုင်တွယ်မှုနှင့်အမှားကိုင်တွယ်ခြင်းများသည်လက်တွေ့ကျသောအပလီကေးရှင်းများတွင်ထည့်သွင်းစဉ်းစားရမည့်အရေးကြီးသောအချက်များဖြစ်သည်။ PHP ကွန်ယက်ဆက်သွယ်မှု၏စွမ်းဆောင်ရည်နှင့်ယုံကြည်စိတ်ချရမှုကိုများစွာတိုးတက်စေနိုင်သည်။