PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : محدود کردن دانلود



Mohsen
February 11th, 2010, 15:48
من میخوام دانلود فایل‌هایی که رو که به صورت لینک مستقیم میزارم محدود کنم، طوری که مثلا برای یه فایل خاص بیش از یه حدی پهنای باند مصرف نشه و مثلا اگه 2000 نفر خواستند اون فایل رو بگیرند اون پهنای باند بین اونا تقسیم بشه! و همه با سرعت خیلی پایین به گرفتن ادامه بدند ولی نه سرور به مشکل بخوره (یعنی دریافت این فایل برای دریافت فایل‌های دیگه تو همون لحظه مشکل ایجاد نکنه)و نه کسی در گرفتن فایل خطا بگیره! فایل ها هم حتما باید لینک مستقیم باشه(مگه اینکه این طوری نشه!) کسی می‌دونه باید چیکار کنم؟

اصلا یه جور دیگه سوال کنم! برای گذاشتن لینک مستقیم بهترین حالت چی هست؟!؟ ببینید مثلا 2000 تا فایل لینک مستقیم شما گذاشتین و میخواین با همین محدودیت های سخت افزار و پهنای باندی که دارین این 2000 تا فایل به طور مساوی از امکانات بهره‌مند بشند! چیکار باید کرد؟

1eng.ir
February 26th, 2010, 11:31
کسی نبـــــــــــــــــــــــ ــود ؟!
ما هم نیازمندیم :d

Rezash
February 26th, 2010, 11:36
نمي دونم اين روش من فايده داره يا نه!فكر كنم فقط منابع سخت افزاري رو بيشتر بخوره و سرعت كاربران رو در عوض كمتر كنه!به هر حال ايده هستش :d
فايلي رو كه كاربر ميخواد دانلود كنه خط به خط با php بخون و بفرست به خروجي...
با توجه به پهناي باند و تعداد آنلاين ها بين خوندن خط هاي بعدي delay بذار!

1eng.ir
February 26th, 2010, 11:49
نمي دونم اين روش من فايده داره يا نه!فكر كنم فقط منابع سخت افزاري رو بيشتر بخوره و سرعت كاربران رو در عوض كمتر كنه!به هر حال ايده هستش :d
فايلي رو كه كاربر ميخواد دانلود كنه خط به خط با php بخون و بفرست به خروجي...
با توجه به پهناي باند و تعداد آنلاين ها بين خوندن خط هاي بعدي delay بذار!
چی چی ؟!
کامل توضیح بده بینم دنیا دست کیه :d

irlogo
February 26th, 2010, 12:40
در کل، لینک دانلود رو کسی نبینه

Rezash
February 26th, 2010, 14:43
ببين من فايلي رو كه ميخوام بدم دست كاربر دانلود كنه لينك مستقيم مي دم بهش ولي لينك مستقيم مستقيم نسيت!
مثلا فايل رو با نام jusdghfjsdh.zip ذخيره كردم بعد به كاربر لينك اينجوري مي دم
url/dl/test.zip
كه با htaccess اون وصل مي كنم به يك فايل php و با اون php خط به خط اطلاعات فايل رو مي خونم و به خروجي مي فرستم و كاربر هم دانلود مي كنه
منظورم هم از اين كار اينه كه بتونم آي پي تمام كاربراني كه فايل رو دانلود مي كنند و تعداد دفعات دانلود كامل فايل رو داشته باشم.
كه تا اينجا تاثيري تو سرع دانلود كاربر نداره
ولي حالا مي گم بين خوندن خط ها يكجوري تاخير زماني ايجاد بشه تا سرعت دريافت فايل پايين بياد (ميزان تاخير بايد با يك رابطه منطقي ايجاد بشه تا سرعت و ... بين يوزرها تقسيم بشه)
البته روش رو دارم تئوري ميگم و امتحانش نكردم كه ببينم كار مي كنه يا فقط منابع سخت افزاري بيشتري مي خوره!
ولي اگر بخوايد بخشي كه باهاش فايل رو مي خونم رو مي تونم بذارم تا ببينيد هر چند يك حلقه سادست...

irlogo
February 26th, 2010, 19:41
اسکریپت های دانلود زیاد هستند

shafiei7
February 26th, 2010, 19:44
اسکریپت داونلود دیدم که همین طور بوده تعیین میکنید که فلان فایل با چه سرعتی حداکثر داونلود بشه؛ از پی سی ول یادمه گرفته بودم.

Talahost.Com
February 27th, 2010, 16:31
شاید بهترین راه محدود کردن تعداد کانکشن های هر آی پی باشه

irlogo
February 28th, 2010, 08:53
اینجوری شما باید 24 ساعته پای سرور باشید

be099
February 28th, 2010, 09:26
اینو میگید ؟




<?php
// local file that should be send to the client
$local_file = 'test-file.zip';
// filename that the user gets as default
$download_file = 'your-download-name.zip';

// set the download rate limit (=> 20,5 kb/s)
$download_rate = 20.5;
if(file_exists($local_file) && is_file($local_file)) {
// send headers
header('Cache-control: private');
header('Content-Type: application/octet-stream');
header('Content-Length: '.filesize($local_file));
header('Content-Disposition: filename='.$download_file);

// flush content
flush();
// open file stream
$file = fopen($local_file, "r");
while(!feof($file)) {

// send the current file part to the browser
print fread($file, round($download_rate * 1024));

// flush the content to the browser
flush();

// sleep one second
sleep(1);
}

// close file stream
fclose($file);}
else {
die('Error: The file '.$local_file.' does not exist!');
}
?>


منبع : PHP File download with speed limit (http://www.jonasjohn.de/snippets/php/dl-speed-limit.htm)

تستم کردم خیلی باحاله سرعتو با $download_rate میتونید تنظیم کنید ولی لینک مستقیم نیست ،
منظورتون از لینک مستقیم همون داشتن resume هست ؟

1eng.ir
February 28th, 2010, 09:32
منظورتون از لینک مستقیم همون داشتن resume هست ؟
آره
اینم داشته باشه محشره :d

be099
February 28th, 2010, 10:14
مدل resume دار (لینک مستقیم)
با اندکی دخل و تصرف (رفع خطا) از
Free PHP Scripts - Download file with resume, stream and speed options (http://www.awesomephp.com/?Tutorials*16/Download-file-with-resume,-stream-and-speed-options.html)



<?php

/* Tutorial by AwesomePHP.com -> www.AwesomePHP.com */
/* Function: download with resume/speed/stream options */

/*
Parametrs: downloadFile(File Location, File Name,
max speed, is streaming
If streaming - movies will show as movies, images as images
instead of download prompt
*/

function downloadFile($fileLocation,$fileName,$maxSpeed = 13,$doStream =
false){
if (connection_status()!=0) return(false);
$extension = strtolower(end(explode('.',$fileName)));

/* List of File Types */
$fileTypes['swf'] = 'application/x-shockwave-flash';
$fileTypes['pdf'] = 'application/pdf';
$fileTypes['exe'] = 'application/octet-stream';
$fileTypes['zip'] = 'application/zip';
$fileTypes['doc'] = 'application/msword';
$fileTypes['xls'] = 'application/vnd.ms-excel';
$fileTypes['ppt'] = 'application/vnd.ms-powerpoint';
$fileTypes['gif'] = 'image/gif';
$fileTypes['png'] = 'image/png';
$fileTypes['jpeg'] = 'image/jpg';
$fileTypes['jpg'] = 'image/jpg';
$fileTypes['rar'] = 'application/rar';

$fileTypes['ra'] = 'audio/x-pn-realaudio';
$fileTypes['ram'] = 'audio/x-pn-realaudio';
$fileTypes['ogg'] = 'audio/x-pn-realaudio';

$fileTypes['wav'] = 'video/x-msvideo';
$fileTypes['wmv'] = 'video/x-msvideo';
$fileTypes['avi'] = 'video/x-msvideo';
$fileTypes['asf'] = 'video/x-msvideo';
$fileTypes['divx'] = 'video/x-msvideo';

$fileTypes['mp3'] = 'audio/mpeg';
$fileTypes['mp4'] = 'audio/mpeg';
$fileTypes['mpeg'] = 'video/mpeg';
$fileTypes['mpg'] = 'video/mpeg';
$fileTypes['mpe'] = 'video/mpeg';
$fileTypes['mov'] = 'video/quicktime';
$fileTypes['swf'] = 'video/quicktime';
$fileTypes['3gp'] = 'video/quicktime';
$fileTypes['m4a'] = 'video/quicktime';
$fileTypes['aac'] = 'video/quicktime';
$fileTypes['m3u'] = 'video/quicktime';

$contentType = $fileTypes[$extension];


header("Cache-Control: public");
header("Content-Transfer-Encoding: binary\n");
header("Content-Type: $contentType");

$contentDisposition = 'attachment';

if($doStream == true){
/* extensions to stream */
$array_listen = array('mp3','m3u','m4a','mid','ogg','ra','ram','wm ',
'wav','wma','aac','3gp','avi','mov','mp4','mpeg',' mpg','swf','wmv','divx','asf');
if(in_array($extension,$array_listen)){
$contentDisposition = 'inline';
}
}

if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) {
$fileName= preg_replace('/\./', '%2e', $fileName,
substr_count($fileName, '.') - 1);
header("Content-Disposition: $contentDisposition; filename=".$fileName);
} else {
header("Content-Disposition: $contentDisposition; filename=".$fileName);
}

header("Accept-Ranges: bytes");
$range = 0;
$size = filesize($fileLocation);

if(isset($_SERVER['HTTP_RANGE'])) {
list($a, $range)=explode("=",$_SERVER['HTTP_RANGE']);
str_replace($range, "-", $range);
$size2=$size-1;
$new_length=$size-$range;
header("HTTP/1.1 206 Partial Content");
header("Content-Length: $new_length");
header("Content-Range: bytes $range$size2/$size");
} else {
$size2=$size-1;
header("Content-Range: bytes 0-$size2/$size");
header("Content-Length: ".$size);
}

if ($size == 0 ) { die('Zero byte file! Aborting download');}
set_magic_quotes_runtime(0);
$fp=fopen("$fileLocation","rb");

fseek($fp,$range);

while(!feof($fp) and (connection_status()==0))
{
set_time_limit(0);
print(fread($fp,1024*$maxSpeed));
flush();
ob_flush();
sleep(1);
}
fclose($fp);

return((connection_status()==0) and !connection_aborted());
}

/* Implementation */
downloadFile('fileLocation','fileName.ext',900,fal se);

?>

فقط اینکه وب سرویستون باید بتونه HTTP_RANGE بفرسته من روی لوکال تست کردم نداشت ولی روی سرورم تست کردم جواب داد

zoghal
March 3rd, 2010, 10:13
با سلام من این سیستم رو برای سایت p30film پیاده سازی کردم با این امکانات

لینک غیر مستقیم و رندم با قابلیت resume
محدود کردن پهنای باند روزانه هر کاربر بر اساس پلن انتخابی (مثلا در هر روز فقط 10 گیگ میتونه دانلود کنه)
کنترل سرعت کاربر بر اساس kb
سیستم مدیریت کاربران و نمایش مصرف کاربر در کنترل پنل کاربریش

متاسفانه این سایت فیلتر شده. به همین خاطر صاحبانش این سایت را برای مدتی دان کردن تا تغییرات کلی توش ایجاد کنند.فکر کنم تا 2-3 روز دیگه بالا بیاد

irlogo
December 7th, 2010, 11:48
این رو در قالب چه فایلی و کجا باید قرار بدیم؟

Rezash
December 7th, 2010, 11:59
این رو در قالب چه فایلی و کجا باید قرار بدیم؟
زياد مهم نيست كجا باشه
يك نمونه از استفادش در آخر فايل اومده


downloadFile('fileLocation','fileName.ext',900,fal se);

filelocation : آدرس پوشه اي كه فايل هاي شما هستند.
fileName.ext : نام فايل :: ميتونيد از طريق متد GET يا ... نام فايل رو بگيريد اما دقت كنيد كه نام فايل حتما بررسي و فـيلتر سازي بشه
900 : حداثكر سرعت مجاز دانلود براي كاربر

delta
December 7th, 2010, 13:41
به جای این کار کاش یک طرحی میدادید که مثل رپیشیر باشه! مثلا وقتی یک کاربر دانلود میکنه تا 15 دقیقه نتونه دیگه دانلود کنه و بعدش یک لینک دیگر آزاد بشه! اینطوری میشه پریمیوم دارش کرد! کسی داره این اسکریپت یا کدش رو؟

Rezash
December 7th, 2010, 18:14
به جای این کار کاش یک طرحی میدادید که مثل رپیشیر باشه! مثلا وقتی یک کاربر دانلود میکنه تا 15 دقیقه نتونه دیگه دانلود کنه و بعدش یک لینک دیگر آزاد بشه! اینطوری میشه پریمیوم دارش کرد! کسی داره این اسکریپت یا کدش رو؟
اسكريپت هاي آماده كه زياد هست و ميتونيد جستجو كنيد.
اما در مورد نحوه نوشتن اصلا كار سختي نيست ، كافيه ip كاربر رو دريافت كنيد و زمان آخرين درخواست بهمراه آي پي رو در يك جدول در db ذخيره كنيد.
هنگام ارسال درخواست جديد از سوي كاربر بررسي كنيد اگر زمان كنوني با زمان ذخيره شده در ديتابيس كمتر از 15*60 ثانيه اختلاف داشت ، اجازه دانلود به كاربر نديد.در واقع نياز به يك جدول و چند شرط داريم.

---
December 7th, 2010, 18:27
How-To - Bandwidth Limiter For Apache2 (mod_bw) - DirectAdmin Forums (http://www.directadmin.com/forum/showthread.php?t=14782)
Webserver Bandwidth Limiting in Apache (http://www.whoopis.com/howtos/web-bandwidth-limit.html)
http://bwmod.sourceforge.net/
Bandwidth Limiting HOWTO (http://www.faqs.org/docs/Linux-HOWTO/Bandwidth-Limiting-HOWTO.html#AEN22)
mod_limitipconn.c (http://dominia.org/djao/limitipconn.html)
بجز سومی بقیه رو خودم تست کردم و جواب داده اما اگه بخواید خودم انجام بدم که هزینه داره

delta
December 7th, 2010, 19:48
اسكريپت هاي آماده كه زياد هست و ميتونيد جستجو كنيد.
اما در مورد نحوه نوشتن اصلا كار سختي نيست ، كافيه ip كاربر رو دريافت كنيد و زمان آخرين درخواست بهمراه آي پي رو در يك جدول در db ذخيره كنيد.
هنگام ارسال درخواست جديد از سوي كاربر بررسي كنيد اگر زمان كنوني با زمان ذخيره شده در ديتابيس كمتر از 15*60 ثانيه اختلاف داشت ، اجازه دانلود به كاربر نديد.در واقع نياز به يك جدول و چند شرط داريم.

مطمعنید با اینترنت ایران میشه این کار رو کرد؟من خودم وقتی یکبار کانکشنم قطع میشه و وصل میشم آیپیم چنج میشه! آی پی استاتیک نیست که.. ولی این سایتهایی مثل رپیدشیر و ... با وجود تعویض آی پی هم انگار یکجورایی میفهمه و جلوگیری میکنه! مگر اینکه آی پی کشوری عوض بشه نفهمه!


How-To - Bandwidth Limiter For Apache2 (mod_bw) - DirectAdmin Forums (http://www.directadmin.com/forum/showthread.php?t=14782)
Webserver Bandwidth Limiting in Apache (http://www.whoopis.com/howtos/web-bandwidth-limit.html)
http://bwmod.sourceforge.net/
Bandwidth Limiting HOWTO (http://www.faqs.org/docs/Linux-HOWTO/Bandwidth-Limiting-HOWTO.html#AEN22)
mod_limitipconn.c (http://dominia.org/djao/limitipconn.html)
بجز سومی بقیه رو خودم تست کردم و جواب داده اما اگه بخواید خودم انجام بدم که هزینه داره

تو هم که هر جا گیرت میاد هزینه میخوای!

Rezash
December 7th, 2010, 21:26
مطمعنید با اینترنت ایران میشه این کار رو کرد؟من خودم وقتی یکبار کانکشنم قطع میشه و وصل میشم آیپیم چنج میشه! آی پی استاتیک نیست که.. ولی این سایتهایی مثل رپیدشیر و ... با وجود تعویض آی پی هم انگار یکجورایی میفهمه و جلوگیری میکنه! مگر اینکه آی پی کشوری عوض بشه نفهمه!

از دست رپيد شير هم كاري بر نمياد !
دقيقا اگه مودم رو ريست كنيد رپيد هم نميتونه تشخصي بده (قبلا كه تست كردم اينجوري بود و حتي نياز به پاك كردن كوكي ها هم نبود ، فقط آي پي ملاك بود)
الان هم نهايتا ممكنه در نسخه جديد كوكي ها رو هم چك كنه، كه پاك كردن كوكي هم كار 5 ثانيه هست !
البته گاهي پيغام no free slots ميده رپيد كه ربطي به آي پي و محدوديت دانلود فردي نداره
البته تقريبا اكثر افراد براي هر دانلود حاضر نيستند مودم رو ريست كنند ولي افرادي كه حاضر هستند رو هم نميشه كاري كرد!
بهترين كار تقسيم منابع سخت افزاري براي كاربران پرميموم و اختصاص ما بقي منابع به كاربران رايگان هست ، كاري كه در سيستم هايي مثل رپيد شير انجام ميشه

hoka
December 7th, 2010, 22:18
حالا جدا از اینا یه دیتابیس که این پارامتر هارو داشته باشه کجا میتونم پیدا کنم به صورت نوشته شده و آماده و چطور میتونم نصب کنم
آی پی افرادی که دانلود کردن + ساعت و تاریخ + تعداد کانکشن + زمان کانکشن + فایلی که دانلود شده + جایی که دانلود شروع شده .
Lighttpd lxadmin