PDA

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



python2015
پنج شنبه 23 مهر 1394, 21:56 عصر
سلام....
من یک سوال مهم داشتم...ممنون می شم یک جواب کامل بگیرم.واقعیت فرصت کم دارم و نمی تونم با آزمون و خطا به جواب برسم...من یک سایت دارم فرضا، کاربرا عضو می شن، من می خوام تنها کاربرانی بتونن فایلی رو دانلود کنن که عضو سایت باشن.یعنی مثلا لینک دانلود برای هرکاربری قابل استفاده نباشه...حتی اون کاربر عضو هم اگر از عضویت در اومد دیگه نتونه فایل رو دانلود کنه...بعد باید این امکان باشه که مثلا، کاربر فایلی رو دانلود می کنه، بعد اون رو پایسش کنه و بعد در زمانی دیگر ادامه دانلود رو بره...فکر کنم باید از نرم افزار دانلود منیجر استفاده کنه...خوب خلاصه، یک سایت دارم که تنها لینک ها برای کاربران عضو کاربردیه و اگر هم کاربر از عضویت در اومد دیگه اون لینک دانلود به دردش نخوره....ممنونم پاسخ بدید.

mojooriass
پنج شنبه 23 مهر 1394, 23:52 عصر
اول با php بررسی های لازم برای ورود کاربر انجام بدید بعد هم با این تابع لینک دانلود دیجیتال تولید کنید که هم می توانید قابلیت resume و سرعت دانلود بهش بدید



<?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);
$array = explode('.', $fileName);
$extension = strtolower(end($array));

/* 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;

$fileLocation = $fileLocation . $fileName;

$size = filesize($fileLocation);

if (isset($_SERVER['HTTP_RANGE'])) {
list ($a, $range) = explode("=", $_SERVER['HTTP_RANGE']);

$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');
}
if(get_magic_quotes_runtime()){
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('file/', 'test.zip', 900, false);

python2015
جمعه 24 مهر 1394, 16:55 عصر
مرسی...خیلی چیزها برام روشن...فقط یک مشکل اینکه قابلیت
resume اش تنها مدتی جوابگوئه...مثلا یک فایل رو که دانلود کردم و پایسش می کنم تا یکی دو دقیقمه قایبلیت resume داره و مشکلی نیست ولی پس از چندین دقیقه دیگه resume نمی شه و دانلود قطع می شه...البته من هنوز نشده که این کد رو در شبکه اینترنت تست کنم و فقط در سیستم خودم و مجازی تست کردم و مشکل دیگه اینه که دانلود منیجر هم اصلا فایل رو دانلود نمی کنه با این کد که البته فکر می کنم، این از مجازی بودن تست هست..نمی دونم...بازم ممنون می شم اگر نکته دیگری هست اشاره کنید..من در سایت های دیگه هم چیز خاصی ندیدم دیگه...اکثرا همین کدای بالا رو معرفی کرده بودن برای اینکار..

python2015
جمعه 24 مهر 1394, 21:37 عصر
سلام مجدد...من اون اسکریپت رو اینبار در سرور قرار دادم و تست کردم...همه چیز خوب و عالی، تنها مشکل اینه که دانلود منیجر درست و حسابی باهاش نمی سازه...اولا که کمی کند تره!!و دیگه اینکه، دانلود منیجر بر خلاف مرورگر به هیچ وجه قابلیت
resume نداره.و وقتی می خوام resume کنم، پیغام می ده که این فایل امکان resume نداره....مشکل از کجاست ؟چرا دانلود منیجر بازی در می آره...ممکه از سرور باشه.؟هاست رایگانه...برای تست.ممکنه این رایگان بودنه، بازی در می آره؟؟کسی کدی که خودش تست کرده باشه نداره؟ببخشید...ممنونم :چشمک:

tsonade
جمعه 24 مهر 1394, 21:54 عصر
خب با سیشن کاری کن وقتی لاگین شدن لینک دانلود نمایش داده شود

python2015
جمعه 24 مهر 1394, 22:10 عصر
خب با سیشن کاری کن وقتی لاگین شدن لینک دانلود نمایش داده شود
مرسی، گرفتن، باید چیکار کنم...الان..مشکل تنها اینه که با دانلود منیجر، دانلود قابلیت
resume نداره...کدی که دوستمون گذاشتن، با مرورگر مشکلی نداره، resume هم می شه به خوبی...فقط با دانلود منیجر resume نمی شه...