PDA

View Full Version : ایجاد لینک دانلود متفاوت در هربار



mr.javad15
پنج شنبه 19 آذر 1394, 13:38 عصر
سلام
یه سوال در مورد تغییر لینک دانلود در هر بار داشتم


سایت های فیلم ، یک بار خود فیلم رو روی سروشون اپلود میکنن
و مثلا ادرس دانلود فیلم این هستش
http://www.srvdl.com/index.php?server=8&file=/Film/2015/Pan/Pan-2015-720p-HD_iMovie-DL.Com.mkv


هر بار که روی دانلود کلیک کنیم یه ادرس متفاوت برای دانلود تولید میشه
مثلا یه بار اینجوریه
http://2578.dl8.srvdl.com/premium/25197139d8ee4b96904f398d6a70a79d/566942ff/Film/2015/Pan/Pan-2015-720p-HD_iMovie-DL.Com.mkv (http://2578.dl8.srvdl.com/premium/25197139d8ee4b96904f398d6a70a79d/566942ff/Film/2015/Pan/Pan-2015-720p-HD_iMovie-DL.Com.mkv)
یه بار هم اینجوری میشه
http://2578.dl8.srvdl.com/premium/2eea10eff5ebff708849ae1a26cbd45f/5669430b/Film/2015/Pan/Pan-2015-720p-HD_iMovie-DL.Com.mkv (http://2578.dl8.srvdl.com/premium/2eea10eff5ebff708849ae1a26cbd45f/5669430b/Film/2015/Pan/Pan-2015-720p-HD_iMovie-DL.Com.mkv)




25197139d8ee4b96904f398d6a70a79d/566942ff/
و
2eea10eff5ebff708849ae1a26cbd45f/5669430b/
اینها تغییر میکنه توی لینک دانلود


چطوری این عمل صورت میگیره؟
و هر دو لینک دانلود هم کار میکنن؟
یعنی اینها میان هر بار که ما روی فیلم رو میخوایم دانلود کنیم توی یه ادرس دیگه فیلم رو کپی میکنه و لینک رو به ما تحویل میده؟
و یه بار دیگه هم خواستیم دانلود کنیم دوباره میره فیلم رو ته یه ادرس دیگه کپی میکنه و میذاره ما دانلود کنیم؟
به چه صورت هست؟

blue.web9
پنج شنبه 19 آذر 1394, 14:11 عصر
با استفاده از این کد اعتبار سنجی انجام میشه.
یکبار فیلم آپلود یا ریموت میشه رو سرور.بعد هر کار که تقاضای لینک میکنه این کد براش تولید میشه.
فرض کنید نام کاری (test) به صورت md5 یا هر روش دیگه ای hash یا رمزنگاری میشه.بعد تو هر درخواست چک میکنن که این hash که نام کاربری هست معتبر هست یا نه.
تو بعضی سایت ها که میبینید براساس زمان مثلا ۴۸ ساعت لینک عوض میشه به خاظر همینه و اونجا زمان hash یا رمزنگاری میشه.
و بعد فایل با header مورد نظر ارسال میکنن تا حتی لینک مستقیم فایل هم مشخص نباشه.

elshe software
پنج شنبه 19 آذر 1394, 14:12 عصر
شما میتونید مثلا هر بار بیاین و تاریخ اون روز رو timestamp کنید و قاطی لینک آدرس بدید و جایی که دارید لینک میگیرید این تاریخ بگیرید و با تاریخ امروز مقایسه کنید اگر تاریخ امروز بود بره و دانلود کنه.
راه واسه اینکار به نظرم زیاده. شاید درست نباشه این کار. ولی چیزیه که به ذهنم اومد.

mr.javad15
پنج شنبه 19 آذر 1394, 14:27 عصر
خب ببنید این سایت ها نمیان ادرس مستقیم فایل رو بدن
و میان لینک دانلود رو هرسری که ما درخواست دانلود میدم یه لینک جدید تولید میکنن و به ما میدن

حالا ابن لینک دانلود جدید مثلا اینها هستن

http://2578.dl8.srvdl.com/premium/25197139d8ee4b96904f398d6a70a79d/566942ff/Film/2015/Pan/Pan-2015-720p-HD_iMovie-DL.Com.mkv (http://2578.dl8.srvdl.com/premium/25197139d8ee4b96904f398d6a70a79d/566942ff/Film/2015/Pan/Pan-2015-720p-HD_iMovie-DL.Com.mkv)
http://2578.dl8.srvdl.com/premium/2eea10eff5ebff708849ae1a26cbd45f/5669430b/Film/2015/Pan/Pan-2015-720p-HD_iMovie-DL.Com.mkvگ

(http://2578.dl8.srvdl.com/premium/2eea10eff5ebff708849ae1a26cbd45f/5669430b/Film/2015/Pan/Pan-2015-720p-HD_iMovie-DL.Com.mkv)

حالا من چطوری این کار رو انجام بدم؟

فرض کنید ادرس مستقیم فایل من این هست
www.site.com/dl/Pan-2015-720p.mkv

من چطور ادرس متفاوت تولید کنم وبه کاربرا مثلا اینو بدم؟

www.site.com/dl/434fhfhtt/Pan-2015-720p.mkv
www.site.com/dl/54561sdw/Pan-2015-720p.mkv

blue.web9
پنج شنبه 19 آذر 1394, 23:05 عصر
در حقیقت لینک فایل به یک صفحه میره ، صفحه زیر در نظر بگیرید :


www.site.com/dl.php?id=25&hash=test&name=pan.2015.mkv


فرض کنید فایل تو این مسیر هست


www.site.com/dl/username/2015/12/10/pan.2015.mkv

مسیر دخیره فایل داخل دیتابیس یا فایل ذخیره میکنیم ، البته دیتابیس گزینه مناسب تری هست.
حالا داخل صفحه (dl.php) بعد از بررسیhash و با استفاده id مسیر فایل از دیتابیس میگیرم و با کد زیر کاربر شروع به دانلود میکنه.


$file = 'dl/username/2015/12/10/pan.2015.mkv';

if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
}

در آخر میان با استفاده از دستوارت .htaccess این لینک :


www.site.com/dl.php?id=25&hash=test&name=pan.2015.mkv

به این تبدیل میکنن :


www.site.com/dl/25/test/pan.2015.mkv

که به نظر لینک مستقیم میاد.

+ ببخشید در مورد دستورات htaccess تسلط نداشتم توضیح ندادم.
+ میتونید فایل با نام دیگه ذخیره کنید ولی با نام دیگه ایی برای دانلود ارسال کنید.کافیه filename تغییر بدید.
+ در مورد هدر مناسب هر فایل تحقیق کنید و متناسب با فایل هدر فایل قرار بدید.

mr.javad15
جمعه 20 آذر 1394, 19:33 عصر
ممنون عزیز اما تو این روش نمیشه فایل رو متوقف کرد
یعنی باید فایل رو یه سره دانلود کرد و توقفی در کار نیست


ولی یکی از دوستان میگفت با header ها میشه کاری کرد که فقط ادرس فایل رو تغییر داد و فایل رو هم میشه توقف کرد
اگر کسی میدونه . توضیح بده.

blue.web9
جمعه 20 آذر 1394, 22:58 عصر
این کد با قابلیت resume هست.اگه هر کدوم از توابع متوجه نشدید کافیه فقط در مورد اون تابع یه سرچ کوچیک انجام بدید.


$file = 'dl/username/2015/12/10/pan.2015.mkv';
if( file_exists($file) )
{
$size = filesize($file);
$time = date('r', filemtime($file));
$fileOpen = @fopen($file, 'rb');

if( !$fileOpen )
{
header ("HTTP/1.1 505 Internal server error");
return FALSE;
}

$begin = 0;
$end = $size - 1;

if( isset( $_SERVER['HTTP_RANGE'] ) )
{
if(preg_match('/bytes=\h*(\d+)-(\d*)[\D.*]?/i', $_SERVER['HTTP_RANGE'], $matches))
{
$begin = intval( $matches[1] );
if( !empty( $matches[2] ) )
{
$end = intval( $matches[2] );
}
}
}

if( isset($_SERVER['HTTP_RANGE']) )
{
header('HTTP/1.1 206 Partial Content');
}
else
{
header('HTTP/1.1 200 OK');
}

header("Content-Type: application/octet-stream");
header('Cache-Control: public, must-revalidate, max-age=0');
header('Pragma: no-cache');
header('Accept-Ranges: bytes');
header('Content-Length:' . (($end - $begin) + 1));
if (isset($_SERVER['HTTP_RANGE']))
{
header("Content-Range: bytes $begin-$end/$size");
}
header("Content-Disposition: attachment; filename=\"".basename($file)."\"");
header("Content-Transfer-Encoding: binary");
header("Last-Modified: $time");

$cur = $begin;
fseek($fileOpen, $begin, 0);

while(!feof($fileOpen) && $cur <= $end && (connection_status() == 0))
{
print fread($fileOpen, min(1024 * 16, ($end - $cur) + 1));
$cur += 1024 * 16;
}
}

mr.javad15
شنبه 21 آذر 1394, 00:05 صبح
ممنون عزیز
توی این روش فایل داخل رم ذخیره میشه و به کاربر داده میشه؟


اگر تعداد دانلود ها زیاد بشه مشکلی پیش نمیاد؟