PDA

View Full Version : توی دانلود فایل بزرگ (بالای 100 مگ) با php مشکل دارم



newby guy
یک شنبه 05 آبان 1398, 18:14 عصر
من می خوام با کدم فایلهای مختلف دانلود کنم ولی متاسفانه وقتی اندازه فایل بزرگ میشه نمی دونم چرا برنامه قطع میشه.فایلهای چند مگابایتی مث آهنگ رو بدون مشکل دانلود می کنه.ینی حجم تا 5 مگ رو تست کردم درسته ولی بالای 100 که می زنم قطع میشه. انگار یه تایمی بیشتر کار نمی کنه. تایم curl رو زیاد کردم ولی بازم قطع میشه. نمی دونم چرا. این کدمه


ini_set('max_execution_time', '300000');
ini_set('display_errors', 1);
ini_set('memory_limit','500M');
error_reporting(E_ALL);
//$url = $_POST['url'];

$url = 'http://s3.dlserver.info/serial/Vikings/01-480p.x264/Vikings.S01E03.480p.mkv';

if(fileDownloader($url))
echo 'DOWNLOAD SUCCESSFUL';
else
echo 'DOWNLOAD FAILED';

function fileDownloader($url){

$ch = curl_init($url);

$dir = '/var/www/html/orangePi/panel/files/';

$file_name = basename($url);

$save_file_loc = $dir.$file_name;

$fp = fopen($save_file_loc, 'w+');

curl_setopt($ch, CURLOPT_FILE, $fp);
//curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 5000);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

$res = curl_exec($ch);

curl_close($ch);
fclose($fp);

if($res)
return true;
else
return false;

}


لینک به یه فایل بزرگ توش گذاشتم واسه تست. اگه لینک یه فایل اندازه یه آهنگ بذارید دانلود می کنه.همیشه هم یه تایم ثابتی اجرا میشه. مثلا نزدیک 15 ثانیه. نمی دونم چرا
کسی می تونه کمک کنه؟

ali_sed
دوشنبه 06 آبان 1398, 16:49 عصر
سلام

برای من بسته نشد و دانلود کرد. اگر بعد از زمان مشخصی دانلود متوقف می شود, احتمال زیاد مشکل از محدودیت زمان یا حافظه می باشد.(بعید هست مشکل حافظه داشته باشید چون curl همزمان دانلود و ذخیره فایل را انجام میدهد) در بسیاری از سرورهای اشتراکی دستور ini_set غیرفعال است. برای تنظیم زمان از دستور set_time_limit استفاده کنید.

حداقل لینک فصل جدید را قرار میدادید :ناراحت:

newby guy
پنج شنبه 09 آبان 1398, 11:34 صبح
سلام

برای من بسته نشد و دانلود کرد. اگر بعد از زمان مشخصی دانلود متوقف می شود, احتمال زیاد مشکل از محدودیت زمان یا حافظه می باشد.(بعید هست مشکل حافظه داشته باشید چون curl همزمان دانلود و ذخیره فایل را انجام میدهد) در بسیاری از سرورهای اشتراکی دستور ini_set غیرفعال است. برای تنظیم زمان از دستور set_time_limit استفاده کنید.

حداقل لینک فصل جدید را قرار میدادید :ناراحت:

من روی یه vps دارم این کد رو تست می کنم. حدود یه گیگ رم داره. همین کدی که گذاشتم رو هم می زنم. بازم یه تایمی کار می کنه باز متوقف میشه.دیگه تنظیمات خاصی تو php.ini و اینا هم ندادم که محدودیت درست کرده باشم اگر هم باشه با همین کانفیگ هایی که ست کردم اول کدم دیگه اوکی باید باشه. نمی دونم واقعا چشه. شما هم همین کد رو تست کردید یا خودتون نوشتید؟

newby guy
پنج شنبه 09 آبان 1398, 12:33 عصر
من روی یه vps دارم این کد رو تست می کنم. حدود یه گیگ رم داره. همین کدی که گذاشتم رو هم می زنم. بازم یه تایمی کار می کنه باز متوقف میشه.دیگه تنظیمات خاصی تو php.ini و اینا هم ندادم که محدودیت درست کرده باشم اگر هم باشه با همین کانفیگ هایی که ست کردم اول کدم دیگه اوکی باید باشه. نمی دونم واقعا چشه. شما هم همین کد رو تست کردید یا خودتون نوشتید؟

الان روی یه سرور دیگه هم تست کردم که 4 گیگ رم داره. روی اونم جواب نداد. فک نکنم بخاطر رم باشه. کد هم که شما می گید مشکل نداره.بنظر شما کجای کار مشکل داره؟

ali_sed
جمعه 10 آبان 1398, 09:29 صبح
از این دستور استفاده کردید؟ set_time_limit

محدودیت حافظه منظورم تنظیمات php هست.

MiladWorkShop
چهارشنبه 15 آبان 1398, 12:42 عصر
سلام

این نوع استفاده بمنظور تغییر دامنه فشار زیادی رو به منابع PHP وارد میکنه, کد اجرا بشه در صورتی که تعداد دانلود های همزمان بیشتر بشه, مثلاً 4 یا 5 دانلود ( بیشتر یا کمتر ) میتونه باعث down شدن PHP یا حتی هنگ کردن وب سرور بشه

البته در وب سرورهایی مثل Nginx قابلیتی بنام proxy وجود داره که اگه روی اون وقت بگذارید شاید به نتیجه برسید