PDA

View Full Version : سوال: گرفتن یک فایل با چند اتصال با multi-curl



generalhak
دوشنبه 28 مرداد 1392, 15:36 عصر
سلام
میخوام با curl
از آدرس مثلا www.example.com/file.zip این فایل رو
با مثلا 2 تا کانکشن همزمان با multi_curl بگیرم و فرض کنید حجم فایل 2 مگابایت هست
یعنی هر کدوم از اون کانکشن ها 1 مگابایت رو باید بگیرن (یک رنج باید تعریف بشه)
و میخوام هر کدوم از اون 1 مگابایت ها داخل متغیر ذخیره بشند
ممنون میشم کد درستش رو بدید...
اگر بتونید این قضیه رو به این کلاس (http://barnamenevis.org/showthread.php?386354-%DA%A9%D9%84%D8%A7%D8%B3-%D9%82%D8%AF%D8%B1%D8%AA%D9%85%D9%86%D8%AF-CURL-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A2%D8%B3%D8%A7%D9%86) اضافه کنید خیلی عالی میشه
یعنی با این کلاس بشه بگیم اگر multi_curl تعریف شد رنج دانلود هر فرمان رو بگیر و تعداد کانکشن ها رو هم بگیر و فایل رو بگیر
با تشکر

pejman_view
دوشنبه 28 مرداد 1392, 17:39 عصر
سلام

curl_multi_exec به شما این امکان رو می ده که چندین درخواست همزمان داشته باشید.
و همینطور آپشن های مختلفی وجود دارد مانند : CURLOPT_RANGE ، CURLOPT_READFUNCTION و در آخر CURLOPT_WRITEFUNCTION این 3 تا آپشن عملیات دانلود و آپلود رو می توانند بصورت پارت پارت بکنند.
به کمک آپشن ها فایل ها را قسمت بندی کنید یکبار با curl_multi_exec تمام عملیات را اجرا می کنید. و سپس تمامی پارت ها را append یا همان rebuild می کنید.

فکر کنم با این کار یک IDM بتوانید تحت PHP بنویسید.:افسرده:

با آرزوی موفقیت
پژمان قاسمی

generalhak
دوشنبه 28 مرداد 1392, 18:17 عصر
سلام

curl_multi_exec به شما این امکان رو می ده که چندین درخواست همزمان داشته باشید.
و همینطور آپشن های مختلفی وجود دارد مانند : CURLOPT_RANGE ، CURLOPT_READFUNCTION و در آخر CURLOPT_WRITEFUNCTION این 3 تا آپشن عملیات دانلود و آپلود رو می توانند بصورت پارت پارت بکنند.
به کمک آپشن ها فایل ها را قسمت بندی کنید یکبار با curl_multi_exec تمام عملیات را اجرا می کنید. و سپس تمامی پارت ها را append یا همان rebuild می کنید.

فکر کنم با این کار یک IDM بتوانید تحت PHP بنویسید.:افسرده:

با آرزوی موفقیت
پژمان قاسمی
ممنون عزیز ولی منم اینا رو میدونم ! کدشو میخواستم که بدون مشکل کار کنه چون معمولا کد هایی که من با curl مینویسم کار نمیکنه !!

generalhak
دوشنبه 28 مرداد 1392, 19:55 عصر
برای مثال :
این کد برای من در خروجی چیزی چاپ نمیکنه !
چرا ؟!


// with curl_multi, you only have to wait for the longest-running request

// build the individual requests as above, but do not execute them
$ch_1 = curl_init('http://webservice.one.com/');
$ch_2 = curl_init('http://webservice.two.com/');
curl_setopt($ch_1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch_2, CURLOPT_RETURNTRANSFER, true);

// build the multi-curl handle, adding both $ch
$mh = curl_multi_init();
curl_multi_add_handle($mh, $ch_1);
curl_multi_add_handle($mh, $ch_2);

// execute all queries simultaneously, and continue when all are complete
$running = null;
do {
curl_multi_exec($mh, $running);
} while ($running);

// all of our requests are done, we can now access the results
$response_1 = curl_multi_getcontent($ch_1);
$response_2 = curl_multi_getcontent($ch_2);
echo "$response_1 $response_2"; // same output as first example