تالار گفتمان nCIS.ir

نسخه‌ی کامل: جلوگیری از دانلود دستی
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام


چطوری میشه یک لینک یکبار مصرف ساخت ؟


بعنوان مثال لینک فایل اصلی به این صورت می باشد :


http://www.example.com/test.zip


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


http://www.example.com/download/{token}


تا اینجا میدونم که باید یک کنترلر به اسم download بسازیم و token به عنوان پارامتر ورودی بهش پاس بدیم و از طریق token میریم توی دیتابیس جستجو میکنیم، و اگر لینک دانلود اعتبار داشت، ریدایرکت میکنیم به لینک دانلود اصلی.


فقط مشکل اینجاست که وقتی لینک اصلی توسط دانلود منیجر (IDM) دانلود میکنیم در قسمت لینک دانلود، لینک اصلی بهش نمایش داده میشه مانند زیر :


http://www.example.com/test.zip


من میخوام بجای لینک اصلی این لینک نمایش داده بشه :


http://www.example.com/download/{token}
نه ریدایرکت نباید انجام بدین. باید با fopen و freed و... توی PHP بخونین و echo کنین. برای Resume Support بودن هم باید هدرهای Range رو تنظیم کنید (درموردش تحقیق کنید). توی Yii2 میتونین از متد sendFile کلاس Response یا سایر جایگزین‌هاش استفاده کنید. لینک‌های زیر رو بخونید:

sendFile
sendContentAsFile
sendStreamAsFile
xSendFile
(20-07-1397، 08:40 ق.ظ)ADMIN نوشته: [ -> ]نه ریدایرکت نباید انجام بدین. باید با fopen و freed و... توی PHP بخونین و echo کنین. برای Resume Support بودن هم باید هدرهای Range رو تنظیم کنید (درموردش تحقیق کنید). توی Yii2 میتونین از متد sendFile کلاس Response یا سایر جایگزین‌هاش استفاده کنید. لینک‌های زیر رو بخونید:

sendFile
sendContentAsFile
sendStreamAsFile
xSendFile

با هدر مشکلمو حل کردم (کدشو میذارم شاید به درد کسی خورد)

ولی Yii هم دمش گرمه همه چی داره!
اینو نمیدونستم جالب بود
 ممنون
header("Content-Type: application/octet-stream");
            header("Content-Transfer-Encoding: UTF-8");
           header("Content-disposition: attachment; filename="$ّFile""); 
           header("Location: ".'@web/uploads/'.$prodoct->source);