
যারা PHP দিয়ে Complex Network Operations বা Multiple HTTP Request একবারে Handle করেন, তাদের জন্য Curl Extension একটি অপরিহার্য Tool। এটি Asynchronous Request পাঠানোর একটি শক্তিশালী উপায়, যা Web Scraper, API Client এবং Microservices Communication-এর জন্য খুবই কার্যকর। PHP 8.5 সেই Tool-কে আরও শক্তিশালী করছে নতুন Function curl_multi_get_handles দিয়ে।
curl_multi_get_handles Function
এই Function-টি একটি CurlMultiHandle Object-এর সাথে যুক্ত সমস্ত CurlHandle Objects-এর একটি Array Return করে।
আগে, যখন আপনি curl_multi_add_handle() দিয়ে একটি CurlMultiHandle-এ একাধিক CurlHandle যোগ করতেন, তখন কোন CurlHandle-গুলো বর্তমানে multi_handle-এর সাথে যুক্ত আছে তা জানার কোনো সহজ উপায় ছিল না। ডেভেলপারদের সাধারণত একটি আলাদা Array বা WeakMap (যদি PHP 8.0+ ব্যবহার করেন) ব্যবহার করে তাদের CurlHandle Objects-এর List নিজেদেরই বজায় রাখতে হতো। এটি ছিল অতিরিক্ত Code, সম্ভাব্য Memory Leak (যদি WeakMap ব্যবহার না করা হয়) এবং Potential Bug-এর কারণ। curl_multi_get_handles() এই Manual Tracking-এর প্রয়োজনীয়তা দূর করে, আপনার Code-কে Simplified করে তোলে এবং এর Robustness বাড়ায়। WeakMap এখানে বিশেষভাবে উপযোগী কারণ এটি CurlHandle Objects-কে reference হিসাবে ধরে রাখে না, ফলে Object-টি প্রয়োজন না থাকলে স্বয়ংক্রিয়ভাবে Destroy হতে পারে, কিন্তু নতুন Function-টি আরও সরাসরি এবং Built-In উপায় প্রদান করে।
$cm = curl_multi_init(); // একটি নতুন CurlMultiHandle তৈরি করা হলো
print_r(curl_multi_get_handles($cm)); // শুরুতে Empty Array দেখাবে, কারণ কোনো Handle যোগ করা হয়নি।
$ch1 = curl_init('https://example.com/foo'); // প্রথম CurlHandle তৈরি করা হলো
$ch2 = curl_init('https://example.com/bar'); // দ্বিতীয় CurlHandle তৈরি করা হলো
curl_multi_add_handle($cm, $ch1); // Handle গুলি MultiHandle এ যোগ করা হলো
curl_multi_add_handle($cm, $ch2);
print_r(curl_multi_get_handles($cm)); // এখন [$ch1, $ch2] এর মতো একটি Array দেখাবে, যেখানে যুক্ত Handle গুলো আছে।
function curl_multi_get_handles(CurlMultiHandle $multi_handle): array {}
এই Function-টি Global Namespace-এ Declared এবং যদি CurlMultiHandle-এ কোনো CurlHandle Object যুক্ত না থাকে, তবে একটি Empty Array Return করে।
এটি একটি সম্পূর্ণ নতুন সংযোজন, তাই আপনার Application-এ যদি ইতিমধ্যেই curl_multi_get_handles নামে কোনো User-Defined Function না থাকে, তবে কোনো Backward Compatibility Issue হবে না। libcurl 8.4 বা পরের Versions-এ একই নামের একটি C Function থাকলেও, PHP-এর Implementation সরাসরি সেই libcurl Function-এর উপর নির্ভরশীল নয়। এটি PHP-এর নিজস্ব Implementation। যদিও User-Land PHP ব্যবহার করে এটিকে সম্পূর্ণরূপে Polyfill করা কঠিন, WeakMap বা Array ব্যবহার করে এর কার্যকারিতা Mimic করা সম্ভব।
এই পর্বে আমরা আলোচনা করলাম PHP এর নতুন পাইপ curl_multi_get_handles Function, আগামী পর্বে PHP 8.5 এর আরেকটি নতুন ফিচার নিয়ে আলোচনা করবো।
আমি সোহানুর রহমান। সুপ্রিম টিউনার, টেকটিউনস, ঢাকা। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 12 বছর 2 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 675 টি টিউন ও 200 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 123 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।
কখনো কখনো প্রজাপতির ডানা ঝাপটানোর মত ঘটনা পুরো পৃথিবী বদলে দিতে পারে।