လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> curlfulti_add_handle function ကို chunked upload နှင့်လုပ်ငန်းများကို download လုပ်ခြင်းကိုမည်သို့အသုံးပြုသည်ကိုကိုင်တွယ်ခြင်းနည်းလမ်းကဘာလဲ။

curlfulti_add_handle function ကို chunked upload နှင့်လုပ်ငန်းများကို download လုပ်ခြင်းကိုမည်သို့အသုံးပြုသည်ကိုကိုင်တွယ်ခြင်းနည်းလမ်းကဘာလဲ။

M66 2025-06-22

curlfulti_add_handle function ကို chunked upload နှင့်လုပ်ငန်းများကို download လုပ်ခြင်းကိုမည်သို့အသုံးပြုသည်ကိုကိုင်တွယ်ခြင်းနည်းလမ်းကဘာလဲ။

curl_mamulti_add_handle သည် PHP တွင်တစ်ပြိုင်နက်တည်း http တောင်းဆိုမှုများကိုကိုင်တွယ်သောအခါ curl multi interface တွင်အဓိကလုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ ၎င်းသည်ကျွန်ုပ်တို့အားလက်ကိုင် session တစ်ခုသို့တစ်ခုတည်းသော ဆံပင်ကောက် ကောက်လက်ကိုင်တစ်ခုနှင့်ပူးပေါင်းရန်ခွင့်ပြုသည်။ ဤယန္တရားသည် Punked upload အတွက်အလွန်အသုံးဝင်သည်။

1 ။ အတုံးများတွင်အလုပ်များကိုတင်ခြင်းအတွက်လုပ်ဆောင်ခြင်းနည်းလမ်း

ပိတ်ပင်တားဆီးမှုတင်ခြင်း၏အခြေခံအယူအဆမှာဖိုင်ကြီးကြီးများကိုသေးငယ်သောအပိုင်းပိုင်းခွဲရန်, ထို့နောက်တစ်ပြိုင်နက်တည်းဤသေးငယ်သောအပိုင်းအစများကိုတင်ပါ။ curl_multi_add_handle ကိုအသုံးပြုပြီး upload စွမ်းဆောင်ရည်ကိုသိသိသာသာတိုးတက်စေနိုင်သည်။

နမူနာစီးဆင်းမှု

  1. ကြီးမားသောဖိုင်များကိုဖိုင်ငယ်များသို့ခွဲထားသည့်ဖိုင်ငယ်များအဖြစ်ခွဲထား (လက်ဖြင့် မောင်းနှင်ခြင်း () ) ဖြင့်လက်ဖြင့်ကိုင်ထားနိုင်သည်) ။

  2. ပိတ်ပင်တားဆီးမှုတစ်ခုစီအတွက်လွတ်လပ်သော curl တောင်းဆိုမှုကိုဖန်တီးပါ။

  3. curl_multi_init မှဖန်တီးထားသော Multi-Handle Multay Multier Manager သို့ဤတောင်းဆိုမှုလက်ကိုင်များကိုထည့်ပါ။

  4. 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> =&gt; </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> &gt; </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>

2 ။ ပိတ်ပင်တားဆီးမှုကိုကိုင်တွယ်ဖြေရှင်းနည်းအလုပ်များ

Block downloads အတွက်, တူညီတဲ့ယန္တရားကိုသက်ဆိုင်သည်။ Range header ကိုသတ်မှတ်ခြင်းဖြင့်ဖိုင်တစ်ခုလုံး၏တိကျသော byte ကြားကာလကိုကျွန်ုပ်တို့တောင်းဆိုနိုင်သည်။

အဆင့်ဆင့် -

  1. ပစ်မှတ်ဖိုင်၏စုစုပေါင်းအရွယ်အစားရရှိသွားတဲ့။

  2. ၎င်းကိုအစိတ်အပိုင်းများစွာခွဲခြားပါ, ဥပမာအနည်းဆုံး 1MB ။

  3. အပိုင်းတစ်ခုစီအတွက် အကွာအဝေး ခေါင်းစီးနှင့်အတူ curl တောင်းဆိုမှုကိုတည်ဆောက်ပါ။

  4. curl_multi_add_handle ကို curl_multi_add_handle ကိုတစ်ပြိုင်တည်း download ပြုလုပ်ရန်။

  5. ဒေါင်းလုပ်ရလဒ်များကိုနိုင်ရန်အတွက်ပေါင်းစည်းပါ။

အတိုချုပ်ကုဒ်ဥပမာ:

 <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> &lt; </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> &gt; </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>

3 ။ မှတ်စုဖို့အရာ

  1. ဆက်သွယ်မှုကိုကန့်သတ်ချက်များ - တစ်ပြိုင်နက်တည်းက connections ကိုငြင်းဆန်ရန်ဆာဗာကိုဖြစ်ပေါ်စေနိုင်သည်။ (တစ်ပြိုင်နက်တည်းလုပ်ဆောင်ခြင်း) ကိုတစ်ပြိုင်နက်တည်းလုပ်ဆောင်ခြင်းအရေအတွက်ကိုထိန်းချုပ်ရန်အကြံပြုသည်။

  2. အမှားကိုင်တွယ်ခြင်း - curl_Error () နှင့် curl_multi_info_read () ကို သုံးပါ။ တောင်းတစ်ခုစီ၏အခြေအနေကိုစစ်ဆေးရန်။

  3. အချိန်ကုန်ခံချိန်ညှိ ခြင်း

အကျဉ်းချုပ်

curl_multi_add_handle သည်တစ်ပြိုင်နက်တည်း http တောင်းဆိုမှုများကိုတည်ဆောက်ရန်အဓိကကိရိယာတစ်ခုဖြစ်သည်။ ၎င်းမှတစ်ဆင့် chunking striesgeties များကိုပေါင်းစပ်ခြင်း, ကြီးမားသောဖိုင်များ၏လုပ်ငန်းများကိုတင်ခြင်းနှင့်ကူးယူခြင်းတို့ကိုထိရောက်စွာကိုင်တွယ်နိုင်သည်။ အကျိုးသင့်အကြောင်းသင့်ရှိသောတောင်းဆိုမှုများ, တစ်ပြိုင်နက်တည်းထိန်းချုပ်မှုနှင့်အမှားကိုင်တွယ်မှုနှင့်အမှားကိုင်တွယ်ခြင်းများသည်လက်တွေ့ကျသောအပလီကေးရှင်းများတွင်ထည့်သွင်းစဉ်းစားရမည့်အရေးကြီးသောအချက်များဖြစ်သည်။ PHP ကွန်ယက်ဆက်သွယ်မှု၏စွမ်းဆောင်ရည်နှင့်ယုံကြည်စိတ်ချရမှုကိုများစွာတိုးတက်စေနိုင်သည်။