parsgreen.com
article

محدود کردن لینک دانلود مستقیم فایل ها با PHP و htaccess

php-htaccess-download

همان طور که می دانیم، لینک دانلود یک فایل در وب به طور کلی به دو دسته مستقیم و غیر مستقیم تقسیم می شود، منظور از لینک های مستقیم مواردی هستند که عموما به فرمت فایل مورد نظر (به فرض zip.) ختم شده و با کلیک بر روی آنها یا وارد کردن آدرس در مرورگر، بلافاصله برای دانلود ارائه می شوند، قاعدتا تعریف و استفاده از این نوع لینک ها خیلی سخت و پیچیده نیست، اما مشکل اکثر مدیران سایت های مختلف که عمدتا نیاز به محدود کردن دانلود فایل ها یا دانلود با پرداخت هزینه و... دارند، ایجاد و مدیریت نوع دوم از لینک ها یعنی لینک های دانلود غیر مستقیم است، در این حالت کاربر با وارد کردن آدرس لینک در مرورگر (در پس زمینه و در سرور) به صفحه دیگری ارجاع داده شده و به طور مثال ابتدا وضعیت عضویت یا پرداخت هزینه دانلود لینک بررسی و سپس مجوز دسترسی (یا عدم دسترسی) به او داده می شود، از این رو در این مطلب قصد داریم نحوه انجام این کار را با استفاده از PHP و htaccess آموزش دهیم، به این امید که مفید واقع شود.

دستور htaccess برای جلوگیری از دانلود مستقیم


اگر با فایل htaccess. آشنا باشید، می دانید که با استفاده از آن می توان تنظیمات متفاوتی در سرورهای لینوکس و ویندوز (در صورت پیکره بندی مناسب) اعمال کرد که یکی از این تنظیمات، بررسی لینک درخواستی و محدود کردن حالت دانلود مستقیم آن است، در این شیوه در مرحله اول دستوری در htaccess، با استفاده از الگوی عبارات با قاعده فرمت فایل درخواستی را بررسی کرده، اگر فرمت مورد نظر جزء مواردی باشد که نمی خواهیم به صورت مستقیم دریافت شوند، آن را به صورت پارامتر به یک فایل PHP ارسال می کنیم (این کار در سرور و بدون اطلاع کاربر انجام می شود)، به نمونه زیر توجه کنید.
RewriteEngine on
RewriteRule ^file/([^/]+)(\.zip|\.pdf|\.jpg)$ /limit-direct-access/file/download.php?file=$1$2 [NC,L]
در این مثال ساده، در ریشه یا همان root سایت دایرکتوری با نام فرضی limit-direct-access ساخته ایم که درون آن یک فایل htaccess. با دستورات بالا قرار دارد، همچنین یک فولدر با نام file که درون آن فایل download.php به همراه سایر فایل های آماده برای دانلود جای گرفته اند (با دقت به قسمت دوم دستور RewriteRule، درک ترتیب قرار گرفتن فولدرها ساده می شود)، لذا در حالت عادی کاربر برای دانلود فایل فرضی test.zip از دایرکتوری file باید نمونه لینک زیر را از سرور درخواست کند:
http://localhost/limit-direct-access/file/test.zip
اما با توجه به دستور RewriteRule نوشته شده، کاربر بدون اینکه متوجه شود، لینک زیر را از سرور درخواست خواهد کرد:
http://localhost/limit-direct-access/file/download.php?file=test.zip
در واقع لینک اصلی برای سرور مفهوم لینک Rewrite شده را دارد.

بررسی مجوزها و ارسال فایل برای دانلود با PHP


قسمت اول کار که تغییر مسیر لینک کاربر از حالت مستقیم به غیر مستقیم بود به درستی انجام شد! حال نوبت PHP است که کار بررسی مجوزهای ورود، پرداخت و... را انجام دهد و در صورتی که شرایط باب طبع ما باشد، فایل را به مرورگر جهت دانلود ارسال کند، به نمونه زیر توجه کنید.
<?php
@$file_name = $_GET['file'];
//echo $file_name;

//بررسی مجوزهای کاربر
//تعیین نحوه بررسی مجوزها با توجه به برنامه و هدف شما می تواند متفاوت باشد، به طور مثال ممکن است هنگامی که کاربر مبلغ لینک را پرداخت کرده و تراکنش موفقیت آمیز باشد، ضمن نگهداری اطلاعات در دیتابیس جهت استفاده های بعدی، یک سشن آی دی تنظیم کنید، اکنون در هنگام دانلود می توان آن سشن آی دی را بررسی کرد و اگر تنظیم شده باشد، اجازه دسترسی به کاربر داد، یا برای کاربران وارد شده به سایت از همین شیوه می توان استفاده نمود.
$user_access = TRUE;

//کاربر مجاز به دانلود است
if($user_access == TRUE){
    //تابع برای بدست آوردن پسوند فایل
    function getExtension($file){
        preg_match('/\.[^\.]+$/i', $file, $ext);
        return $ext[0];
    }
    
    //نوع فایل    
    $file_type = NULL;
    switch(getExtension($file_name)){
        case 'zip':
        $file_type = 'application/zip';
        break;
        case 'pdf':
        $file_type = 'application/pdf';
        break;
        case 'jpg':
        $file_type = 'image/jpeg';
        break;                
    }
    
    //ارسال فایل به مرورگر برای دانلود
    ob_start();
    header('Content-Description: File Transfer');
    //header('Content-Type: application/octet-stream');    
    header('Content-Type: '.$file_type);
    header('Content-Disposition: attachment; filename='.$file_name);
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: '.filesize("$file_name"));
    ob_clean();
    flush();
    readfile("$file_name");
    exit;
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>وبگو | محدود کردن دسترسی مستقیم به لینک دانلود</title>
<!-- http://webgoo.ir -->
</head>
<body>
<?php
//کاربر مجاز به دانلود نیست
if($user_access == FALSE){
    echo 'Error!';    
}
?>
</body>
</html>
توضیح:
- همان طور که گفتیم نام فایل به صورت یک پارامتر و از طریق متد GET به فایل PHP ارسال می شود، بنابراین در خط اول متغیر file_name را با این روش مقداردهی می کنیم (که برابر با مقادیر دریافتی از پارامتر file است).
- در گام بعدی نیاز به بررسی مجوز دانلود کاربر است، نحوه انجام این مرحله کاملا دلخواه بوده و بستگی به هدف شما دارد، آنچه برای ما اهمیت دارد، مقداردهی متغیر user_access به صورت TRUE یا FALSE است، به طور مثال می توانید برای کاربرانی که تراکنش آنها موفقیت آمیز باشد، یک سشن آی دی تنظیم کنید یا فیلدی را در دیتابیس به صورت حالت پرداخت تعریف کرده و با تطبیق اطلاعات (نام کاربری و کلمه عبور)، وضعیت مجوز دانلود کاربر را بررسی کنید، در هر صورت از هر روشی که استفاده کنید نهایتا باید به نتیجه TRUE یا FALSE ختم شود، لطفا به جهت مفصل بودن این مبحث، در این رابطه به آموزش های سشن و نحوه ایجاد سیستم ورود و خروج سایت مراجعه کنید.
- پس از تعیین حالت TRUE یا FALSE برای متغیر user_access، در صورتی که مقدار TRUE باشد، یعنی کاربر مجاز به دانلود بوده و لذا باید فایل را به مرورگر ارسال کنیم، بدین منظور هم می توانید از دستور زیر برای تعیین نوع MIME فایل استفاده کنید.
header('Content-Type: application/octet-stream');
این دستور به صورت کلی است و برای اکثر فایل ها کاربرد دارد، هم می توانید به صورت اختصاصی نوع MIME فایل ها را با تابع getExtension و دستور switch مشخص کنید (این کار در نمونه کد آموزش حاضر انجام شده است).
نکته: MIME یک استاندارد تعریف شده در وب برای تعیین فایل های مختلف از نظر نوع است که می توانید لیستی از آنها را در لینک زیر مشاهده کنید.
لیست فرمت ها و معادل آنها در استاندارد MIME
- دستورات header که در ادامه تنظیم شده اند برای ارسال صحیح فایل به مرورگر و رعایت استانداردهای HTTP لازم هستند.
- تابع ob_clean و flush برای مدیریت بهتر نقل و انتقال اطلاعات و پاک کردن موارد اضافی از سرور است (ضروری نیست).
- در نهایت نیز تابع readfile فایل مورد نظر را به مرورگر ارسال کرده و دستور exit باعث پایان اجرای کدها می شود.
نکته 1: در صورتی که مقدار متغیر user_access برابر FALSE باشد، بخش دوم دستورات اجرا شده و پیغام Error نمایش داده می شود.
نکته 2: دقت کنید که به دلیل استفاده شدن از توابع header در کد، نباید قبل از اجرای این توابع هیچ نوع خروجی به مرورگر ارسال شود، این خروجی می تواند شامل BOM یا Byte Order Mark نیز شود، لذا باید مطمئن شوید که فایل PHP شما بدون BOM است که بدین منظور می توانید از برنامه Adobe Dreamweaver یا ++Notepad استفاده کرده و BOM را با ذخیره مجدد فایل حذف کنید (در نرم افزار ++Notepad باید از منوی Encoding و امکان Convert to UTF-8 without BOM استفاده کنید).

دانلود نمونه فایل های آموزش


دانلود نمونه فایل های آموزش محدود کردن  لینک دانلود مستقیم فایل ها با PHP و htaccess
sectionدسته بندی: آموزش کاربردی » PHP
related مطالب بیشتر:
» ساخت منوی هوشمند با php و css!
» ارسال ایمیل با php و کلاس phpmailer
» نمایش آمار بازدیدها با PHP بدون استفاده از دیتابیس
» ساخت فید خوان آر اس اس (RSS Feed Reader) با php
» نمایش قسمتی از متن و پاراگراف با php
commentنظرات (۸۷ یادداشت برای این مطلب ارسال شده است)
نویسنده: adicom
زمان: ۰۹:۴۵:۱۳ - تاریخ: ۱۳۹۴/۱۱/۱۱
عالی بود
مرسی
نویسنده: مهدی
زمان: ۰۶:۴۲:۴۶ - تاریخ: ۱۳۹۴/۱۱/۱۳
سلام خیلی عالی بود ولی من یه مشکلی دارم
من یک سری فایل های صوتی برای دانلود دارم ولی میخوام مستقیم دانلود بشن ( ولی وقتی لینک دانلودش کلیک میکنم میره توی قسمت پلیر مرورگر و پخش میکن) یعنی برای سیو و دانلود حتما باید روی لینک راست کلیک کرد و بعد گزینه save as زد تا دانلود بشه من نمیخوام که این مراحل طی بشه و میخوام با زدن روی لینک مستقیم دانلود بشه
کد مربوط به این در htaccess چیست؟
تشکر
پاسخ: 
سلام
می توانید در فایل htaccess. درون دایرکتوری که آهنگ ها وجود دارند، یکی از دستورات زیر را قرار دهید:
<FilesMatch "\.(mov|mp3|jpg|pdf|mp4|avi|wmv)$">
ForceType application/octet-stream
Header set Content-Disposition attachment
</FilesMatch>
نکته: پسوندهایی که نیازی به آنها ندارید را می توانید از دستور حذف کنید.
و همچنین این شیوه:
AddType application/octet-stream .mp3
دقت کنید که (در حالت معمول) دیگر از این فایل ها نمی توانید برای پخش آنلاین استفاده کنید (در صورت نیاز، برای پخش آنلاین دایرکتوری و فایل های مجزا در نظر بگیرید).
نویسنده: قویدل
زمان: ۰۶:۳۸:۲۱ - تاریخ: ۱۳۹۴/۱۱/۱۶
برادر گرامی سلام
بسیار ممنون از اطلاعاتی که در اختیار ما میگذارید .
هم کاربردی و هم آموزشی هستند ممنون به خاطر تمام زحمات شما
نویسنده: محمد
زمان: ۰۹:۰۷:۵۱ - تاریخ: ۱۳۹۴/۱۱/۱۷
سلام
من به یه مشکلی برخوردم اونم اینکه:
تو htaccess. یه دستوری مانع اجرا صحیح کد زیر میشه :
RewriteRule ^upload/file/(.*)$ f.php?root=$1 [L]
اگر دستور بالا به تنهایی باشه بدون مشکل اجرا میشه ولی وقتی دستور زیر اضافه میشه دیگه کد بالا اجرا نمی شه:
RewriteRule ^(.*)$ /index.php?urlckeck=$1 [L]
من به هر دو دستور نیاز دارم
راهی نیست که این دو دستور در کنار هم کاری کنن بدون مشکل؟ مثلا می خوام یه شرط تعریف بشه بگه اگر آدرس به صورت upload/file شروع شده بود اطلاعات به فایل f.php ارسال بشه (منطور از اطلاعات همون URL هست) اگر نبود که فایل index.php رو لود کنه
امکانش هست؟
ممنون
پاسخ: 
سلام
دستورات htaccess به ترتیب از بالا به پائین خوانده می شوند و اگر یک دستور اجرا و نماد L داشته باشد، یعنی Last و آخرین دستور و لذا نوبت به دستورات بعدی نمی رسد، لذا با توجه به توضیحات باید دستور مربوط به دایرکتوری آپلود، در ابتدا درج شود تا تنها اگر این حالت برقرار نبود، نوبت به حالت کلی و پیش فرض برسد!
نویسنده: علی مرادیان
زمان: ۱۰:۰۵:۱۷ - تاریخ: ۱۳۹۴/۱۱/۲۳
سلام. احسنت به شما. واقعا عالی
نویسنده: محمد
زمان: ۱۱:۵۹:۴۴ - تاریخ: ۱۳۹۵/۰۱/۰۸
سلام عذر میخوام میشه کمکم کنید من یه سایت دانلود فیلم دارم و میخوام دسترسی به فیلم ها رو محدود کنم از کدهای که دادید استفاده کردم ولی هنگام دانلود راحت دانلود میشه در صورتی که باید کاربر انتقال داده بشه به صفحه دانلود دات پی اچ پی از کدهای زیر هم استفاده کردم ولی متاسفانه فقط پوشه ها رو قفل میکنه و هنگام وارد شدن به پوشه ها یوزر و پسورد میخواد ولی وقتی آدرس فایلی رو که تو همون پوشه ها هست میزنی راحت دانلود میشه و یوزر پس نمیخواد این هم کدهایی رو که استفاده کردم
AuthName "Restricted Area" 
AuthType Basic
AuthUserFile /home/admin/domains/tanzdl.ir/public_html/dl/dl/.htpasswd
AuthGroupFile /dev/null
require valid-user
از اینم استفاده کردم نشد
<FilesMatch "\\.(zip|rar)$">
AuthUserFile /home/admin/domains/tanzdl.ir/public_html/dl/dl/.htpasswd
AuthName EnterPassword
AuthType Basic
require valid-user
</FilesMatch>
<files ".htaccess">
order allow,deny
deny from all
</files>
پاسخ: 
استفاده از کدهای آماده بدون اینکه دقیقا بدانید چه کاربردی دارند نمی تواند مشکل را حل کند، در واقع راه حل گفته شده در آموزش در صورتی که به درستی در سرور و برنامه شما استفاده شود اصولا برای محدود کردن دسترسی به فایل ها با پسوند مشخص کافی است، اینکه کد عمل نمی کند قاعدتا دلیل منطقی دارد که باید بررسی و رفع شود و این کار هم صرفا با دسترسی و تست آنلاین ممکن است!
نویسنده: هومن
زمان: ۰۶:۱۲:۳۰ - تاریخ: ۱۳۹۵/۰۱/۱۷
سلام
واقعا آموزش های شما کاربردی است میشه لطف کنید در مورد authentication و authorization در php (به طور مستقل و بدون استفاده از فرم ورک ها) هم یک منبع فارسی اعم عنوان نمایید (به دلیل فوریت) و نیز خودتان هم یک آموزش در سایت قرار دهید یعنی آموزش این دو مبحث را به همین شکل مثال کاربردی و یا به صورت پروژه محور ارائه دهید.
با تشکر از شما
پاسخ: 
در رابطه با authentication می توانید از آموزش هایی که برای ایجاد سیستم ورود و خروج در وب وجود دارد الگوبرداری کنید، بحث authorization یا ارائه مجوز در سطح های مختلف به کاربران نیاز به آموزش جداگانه دارد که متاسفانه در کوتاه مدت میسر نیست، تا آنجا که اطلاع داریم منبع فارسی خاصی که به طور اختصاصی به این موضوع پرداخته باشد نیز در دسترس نیست (شاید در منابع داخلی و خارجی، به صورت پراکنده مطالبی وجود داشته باشد که باید آنها را جمع بندی و شخصی سازی کنید!).
نویسنده: سعید
زمان: ۲۳:۵۲:۳۵ - تاریخ: ۱۳۹۵/۰۱/۱۷
<?php
if(isset($_GET['code']))
{
$cod=$_GET['code'];
$dnl_chk_qry=mysql_query("select cnt_fre,cnt_atr_nam,cnt_fnd,cnt_lnk from tbl_cnt where cnt_enb=true and cnt_cod=$cod") or die(mysql_error());
$dnl_chk_cnt = mysql_num_rows($dnl_chk_qry);
if($dnl_chk_cnt)
{
while ($dnl_chk_row = mysql_fetch_array($dnl_chk_qry))
{
$cnt_atr_nam=$dnl_chk_row['cnt_atr_nam'];
$cnt_fnd=$dnl_chk_row['cnt_fnd'];
$cnt_lnk=$dnl_chk_row['cnt_lnk'];
$cnt_fre=$dnl_chk_row['cnt_fre'];
}
if($cnt_fre)
{
//start download
}
else
{
if(isset($_SESSION['pvt_usr']))
{
$pvt_usr=$_SESSION['pvt_usr'];
$dnl_chk_qry=mysql_query("select lnk_cd from tbl_lnk where lnk_cnt_cod=$cod and lnk_usr_nam='$pvt_usr'") or die(mysql_error());
$dnl_chk_cnt = mysql_num_rows($dnl_chk_qry);
if($dnl_chk_cnt)
{
//start download
}
else//buy
{
$dnl_usr_fnd_qry=mysql_query("select usr_fnd from tbl_usr where usr_nam='$pvt_usr'") or die(mysql_error());
while ($dnl_usr_fnd_row = mysql_fetch_array($dnl_usr_fnd_qry))
{
$usr_fnd=$dnl_usr_fnd_row['usr_fnd'];
}
if($usr_fnd>=$cnt_fnd)
{
$dnl_lnk_cod_qry = mysql_query("SELECT lnk_cod FROM tbl_lnk order by lnk_cod desc limit 1") or die(mysql_error());
$dnl_lnk_cod_cnt = mysql_num_rows($dnl_lnk_cod_qry);
if(!$dnl_lnk_cod_cnt)
{
$lnk_cod=1;
}
else
{
while ($dnl_lnk_cod_row = mysql_fetch_array($dnl_lnk_cod_qry))
{
$lnk_cod= $dnl_lnk_cod_row['lnk_cod'];
$lnk_cod++;
}
}
include"core/dt.php";
mysql_query("INSERT INTO tbl_lnk (lnk_cod,lnk_cnt_cod,lnk_atr_nam,lnk_usr_nam,lnk_fnd,lnk_cd) VALUES($lnk_cod,$cod,'$cnt_atr_nam','$pvt_usr',$cnt_fnd,'$my_date') ") or die(mysql_error());
//factor
//start download
}
else
{
echo "موجودی برای خرید این محتوا کافی نیست. لطفاً از طریق اینجا نسبت به افزایش اعتبار خود اقدام نمایید.";
}
}
}
else
{
echo"لطفاً وارد حساب کاربری خود شوید یا اگر به ما نپیوسته اید به ما بپیوندید.";
}
}
}
else
{
echo"error 404";
}
}
else
{
echo"error 404";
}
?>
سلام
خسته نباشید
من کدی مشابه کد بالا دارم. برای خرید محتواها این کد رو دارم استفاده می کنم. به این صورت که اول چک می شود که آیا همچین محتوایی وجود داره بعد اگر وجود داره آیا رایگان هستش cnt_fre اگر رایگان بود cnt_fre=true که دانلود آغاز شود در غیر اینصورت بررسی شود که آیا کاربر وارد سایت شده است اگر وارد سایت شده بود بررسی می شود که آیا کاربر قبلاً این لینک را خریداری کرده است یا خیر این بررسی از جدول tbl_lnk انجام میشه اگر خرید انجام شده بود که دانلود شروع میشه وگرنه باید خرید را انجام دهد که اگر موجودی اش کافی بود خرید انجام خواهد شد و فاکتور نمایش داده می شود و دانلود آغاز می شود البته کسر پول از حساب مشتری و حساب نویسنده رو هنوز بهش اضافه نکرده ام.
این کدی که نوشتم خیلی شبیه پست فعلی شما می باشد. خوب همه ی کاربرها که نمی یان از طریق این اسکریپت خرید رو انجام نمیدن شاید یکی لینک دانلود رو به صورت مستقیم وارد کرد که باید جلوگیری بشه و این قسمت از پست
RewriteEngine on
RewriteRule ^file/([^/]+)(\.zip|\.pdf|\.jpg)$ /limit-direct-access/file/download.php?file=$1$2 [NC,L]
فکر می کنم همون چیزی باشه که من می خوام.
منتهی آدرس من به صورت زیر هستش
index.php?switch=download&code=15
عدد 15 رو همین جوری زدم فرضاً کد محتوای ما 15 بوده.
اگر این کد دقیقا کار من رو راه می اندازه خواهشاً مطلعم کنید فقط گفتن بلی کافیست.
و دیگه اینکه برای دانلود
//start download
هم می تونم از قسمت انتهایی پست استفاده کنم دیگه؟
حالا اگر قبل از شروع دانلود بخوام اول فاکتور فروش نمایش داده بشه و بعد دانلود شروع بشه مشکلی که پیش نمیاد.
منظور اینه که بعد از نمایش فاکتور اگه دستور header بیاد صفحه پاک نمیشه سفید نمیشه چون با header معمولا تو یه صفجه دیگه می تونیم بریم. تا حالا برای دانلود فایل ازش استفاده نکردم.
در کل از زحمات شما متشکرم.
مدت هاست که وب سایت شما رو دنبال می کنم و کماکان نه از محتوای جدید خبری هستش نه سیستم جدید. البته من قبلا هم به شما کامنت داده بودم و در این مورد با شما موافق بودم که کیفیت از همه مهم تر است اما خواهشاً زودتر راه اندازیش کنید به شخصه خیلی چیزها از این وب سایت یاد گرفتم و واقعاً مدیون این سایت هستم چون شیوه ی آموزشی کاملاً متفاوتی داره و جامعه ی ما به همچین وب سایت هایی نیازمنده.
بازم تشکر
بدرود
پاسخ: 
تشکر از نظر لطف شما، حق با شما است، روند پیشرفت کار کمی کند است! به هر حال جای نگرانی نیست، هرچند فعالیت سایت تا مدتی همچنان محدود به پاسخگویی به سوالات کاربران باقی خواهد ماند.
در مورد سوالات مطرح شده، بهتر است مشکلات را به صورت موردی مطرح نمائید، این شیوه طرح سوال به جهت کلی بودن، پاسخگویی را سخت می کند، در هر صورت نکته اول اینکه بهتر است به جای اکستنشن mysql که دیگر قدیمی شده، از mysqli استفاده کنید (در ظاهر فرق چندانی ندارند و با کمی مطالعه با روند کار آشنا می شوید)، همچنین بحث ایمن سازی داده ها قبل از استفاده در پرس و جوهای دیتابیس را ظاهرا رعایت نکرده اید، از اینها گذشته دستورات header باید قبل از چاپ خروجی به مرورگر ارسال شوند، لذا باید در ابتدای دستورات باشند (یا در هنگام چاپ خروجی، در ابتدا ارسال شوند)، برای موارد دیگری که گفته اید می توانید از نمونه کدها استفاده کنید در واقع اینها دستورات مستقلی هستند و الزاما برای هدف خاص استفاده نمی شوند، منتها باید بدانید که هر دستور چه ساختار و کارکردی دارد تا بتوانید از آنها به صورت سفارشی و متناسب با کدنویسی پروژه خود استفاده نمائید.
نویسنده: سعید
زمان: ۱۵:۵۳:۰۲ - تاریخ: ۱۳۹۵/۰۱/۱۸
با سلامی دوباره
RewriteEngine on
RewriteRule ^file/([^/]+)(\.zip|\.pdf|\.jpg)$ /limit-direct-access/file/download.php?file=$1$2 [NC,L]
منظورم این بود که کد بالا که در htaccess نوشته می شود رو می تونم برای خودم سفارشی کنم و مثلاً محدود شود به فایل های از نوع فقط zip و اینکه به جای آدرس
download.php?file=1
می تونم از
index.php?switch=download&code=1
استفاده کنم دیگه. حالا یه سری تغییراتی باید داده بشه که حق با شماست.
الان این فایل htaccess رو باید کجا بزارم.
مسیر فایل های من اینجاست
files/username/file.zip
آیا با ایجاد یک فایل htaccess در روت هاست همان جایی که index.php هستش کار حل میشه و به همه ی زیر پوشه ها اعمال میشه؟
ممنون
پاسخ: 
هم می توانید در ریشه سایت و هم در دایرکتوری از دستورات htaccess استفاده کنید، در کل قانون این دستورات بر روی دایرکتوری های زیرمجموعه (از محلی که فایل htaccess قرار دارد) اعمال می شود، در مورد استفاده از نمونه کدها، قاعدتا باید نام دایرکتوری ها (به فرض عبارت file یا limit-direct-access) متناسب با آدرس استاتیک و دایرکتوری حقیقی شما ویرایش شوند، برای آشنایی بیشتر می توانید عبارت "نحوه دوباره نویسی لینک ها در htaccess" را در وب جستجو کنید.
نویسنده: حسین
زمان: ۲۱:۳۸:۲۱ - تاریخ: ۱۳۹۵/۰۱/۱۸
سلام من میخوام برای فروش یک فایل pdf بعد از پرداخت محدودیت دانلود و آدرس متفاوت دانلود برای هر خریدار ایجاد کنم.. آیا امکانش هست همچین چیزی؟ پلاگینی چیزی
متشکرم
پاسخ: 
مطلب در همین خصوص است! در مورد وجود پلاگین آماده و... باید مطابق با CMS مورد نظر خود جستجو کنید، البته معمولا هیچ پلاگین آماده ای نمی تواند بدون ایجاد تغییرات (کم و بیش)، تمام نیازهای شما را پوشش دهد!
نویسنده: رضا
زمان: ۱۷:۱۵:۳۴ - تاریخ: ۱۳۹۵/۰۱/۱۹
سلام و خسته نباشید
ببخشید چطور میشه مقدار حجم دانلود شده ی فایل توسط کاربر رو فهمید مثلا فایل 100 مگابایت هست و کاربر پس از چند دقیقه 60 مگابایت آن را دانلود میکنه و بعد خودش دانلود رو متوقف کنه و یا به هر دلیلی قطع بشه ما چطوری میتونیم اون مقدار حجم دانلود شده رو متوجه بشید (به عبارتی پهنای باند مصرف شده توسط کاربر)
در صورت مشکل بودن لطفا منبع یا منابعی پیشنهاد دهید در این زمینه
باتشکر
پاسخ: 
این مورد جزء مباحث نسبتا پیچیده در وب محسوب می شود، برای این منظور باید به دنبال ایجاد قابلیت ادامه دانلود یا Download Resume در PHP باشید که از این طریق اطلاعات حجم دانلود شده نیز می تواند در دیتابیس ذخیره شود، البته نوشتن یک اسکریپت کامل نیازمند آشنایی قبلی شما با مباحث پیشرفته وب و PHP است، در هر حال توضیحات و نمونه کد صفحه زیر می تواند برای شروع مناسب باشد:
http://stackoverflow.com/questions/157318/resumable-downloads-when-using-php-to-send-the-file
نکته: برای اینکه کاربران مختلف را از هم تشخیص دهید، باید شیوه های دیگری مانند استفاده از سشن و کوکی یا نام کاربری و... را با این روش ترکیب کنید، در واقع اسکریپت شما باید شامل دو قسمت شناسایی کاربر و امکان ادامه دانلود باشد.
نویسنده: محمد
زمان: ۲۲:۱۵:۵۶ - تاریخ: ۱۳۹۵/۰۱/۲۱
با سلام و تشکر از پاسخ گویی
برای تعیین این شرط که اگر فقط از سایت فلان لینک درخواست شده اجازه دانلود بده چه کدی باید نوشت؟
پاسخ: 
انجام چنین کاری به صورت صد در صدی شدنی نیست، در واقع تنها راه تشخیص ارجاع از یک سایت دیگر، بررسی سربرگ های HTTP است که توسط مرورگر (یا هر واسط کاربری دیگر) ارسال می شود که به همین دلیل این اطلاعات می توانند ساختگی و غیر واقعی نیز باشند، در هر صورت برای بدست آوردن آدرس ارجاع داده شده در PHP می توانید دستور زیر را استفاده کنید:
$_SERVER['HTTP_REFERER'];

نکته: این بحث با اینکه سایت ارجاعی متعلق به خودتان باشد و به طور مثال بتوانید پارامترهایی برای شناسایی کاربران از طریق آدرس URL به سایت دیگرتان ارسال کنید متفاوت است!
نویسنده: علی
زمان: ۰۹:۰۰:۳۲ - تاریخ: ۱۳۹۵/۰۱/۲۶
سلام.
ممنون از سایت خوبتون.
من یه اسکریپت نوشتم که فایل ها رو به یه هاست دیگه از طریق اف تی پی آپلود می کنه.
حالا می خواستم بدونم چطور میشه کدی نوشت که از طریق اف تی پی بشه فایل های آپلود شده رو حذف کرد.
مثلا الان توی پوشه حدود 300 تا عکس آپلود شده و میخوام عکس شماره 45 رو از طریق اف تی پی حذف کنم.
پاسخ: 
لطفا به نمونه کد موجود در این صفحه مراجعه کنید:
http://php.net/manual/en/function.ftp-delete.php
نویسنده: علی
زمان: ۱۷:۰۶:۲۴ - تاریخ: ۱۳۹۵/۰۱/۲۷
ممنون از پاسخ خوبتون.
نویسنده: عابدین
زمان: ۰۹:۲۴:۱۷ - تاریخ: ۱۳۹۵/۰۲/۲۱
عالی بود سپاس
paged صفحه 5 از 6




more لطفا دقت کنید که یادداشت های زیر منتشر نشده و حذف خواهند شد:
- یادداشت های خارج از موضوع این مطلب.
- سوالات کلی، غیر ضروری و مشکلاتی که هیچ تلاشی برای رفع آن نکرده باشید.
- نظرات حاوی کدها و اسکریپت های خیلی طولانی (به طور مثال کد کامل قالب وبلاگ).

8 × 9
 refresh
آگهی
seonab.com
طراحی نرم افزار اندروید
رنگین کمان عکس
Ranginkamaan.com

آرشیو عکس های باکیفیت با موضوعات متنوع...