PDA

View Full Version : ساخت لینک دانلود غیر مستقیم



hadi2016
یک شنبه 09 آذر 1393, 17:10 عصر
سلام دوستان
من یه CMS برای خودم ساختم. و میخوام به پی لاین ارتباط بدم
بعدش میخوام وقتی کاربر اومد تو سایت و یه فیلم آموزشی رو خرید
بعد از پرداخت لینک دانلود به صورت غیر مستقیم باشه
طوری که دیگه نتونهدانلود کنه یا طوری باشه که مثلا تا 3 روز بتونه دانلود کنه
CMS آماده نمیخوام استفاده کنم
ممنون

Mohammadsgh
یک شنبه 09 آذر 1393, 18:30 عصر
http://webgoo.ir/162/%D9%85%D8%AD%D8%AF%D9%88%D8%AF-%DA%A9%D8%B1%D8%AF%D9%86-%D9%84%DB%8C%D9%86%DA%A9-%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%D9%85%D8%B3%D8%AA%D9%82%DB%8C%D9%85-%D9%81%D8%A7%DB%8C%D9%84-%D9%87%D8%A7-%D8%A8%D8%A7-php-%D9%88-htaccess

sajedmalayeri
یک شنبه 09 آذر 1393, 22:37 عصر
شما چرا از جهان پی استفاده نمیکنید ؟؟
از اون ی امکانی داره که وقتی پرداخت میزنی برمیگردونت به ادرسی که میگی حالا اون ادرس میتونه ی /ادر باشه که شناسه پرداخت داخلش تایپ شه .
به تعداد ارقام شناسه ، با پی اچ پی بش بگو که لینک بده اگر هم اشتباه بود بگو که خطا بده:تشویق:

Mohammadsgh
دوشنبه 10 آذر 1393, 10:04 صبح
مشکل ایشون لینک دانلود هست نه پرداخت

hadi2016
دوشنبه 10 آذر 1393, 10:20 صبح
دوستان مثلا این لینک دانلود مستقیم
http://site.ir/download/file.zip
حالا می خوام یه لینکی تولید بشه که بعد 2 روز دیگه دانلود نشه
http://site.ir/zxcziyyuyuzxcutvyt/file.zip
لینک دانلود به این شکل در بیاد

Mohammadsgh
دوشنبه 10 آذر 1393, 12:08 عصر
باید یه فیلد زمان کنار نام فایلتون بزارید که هنگام آپلود فایل زمان ایجاد میشه و یه فیلد به نام expire که زمانشو 2 روز میزارید و چک میکنید اگه زمان الان بزرگتر از زمان فیلد expire بود نزاره فایلتون دانلود شه.روالش به این صورته

Unique
دوشنبه 10 آذر 1393, 15:18 عصر
شما باید فایل را از طریق header یا XSendFile (برای فایل بزرگ که resume میخوان و باید مدیریت حافظه به خوبی انجام بشه) برای کاربر ارسال کنین. در این حالت کافیه بررسی کنید کاربر اجازه دانلود داره یا نه و بعدش با روشی که گفتم فایل را برای کاربر ارسال کنین. مثلا میتونید بعد از ثبت نام بررسی کنید بیش از ۳ روز از تاریخ پرداخت نگذشته باشه و فایل برای کاربر قابل دانلود بشه. برای لینک های زمان دار هم کافیه یک جدول داشت هباشین که مثلا یک فیلد نام فایل و یک فیلد کد (برای استفاده در url) داره و یک فیلد زمان که تاریخ انقضاء را نشون میده و اگه فایل منقضی نبود اجازه دانلود میده که به نظر من روش اول بهتره ! و روش دوم برای زمانی استفاده داره که نخواهیم کاربر حتما login کنه !

کلا خیلی راه و روش وجود داره و اصل قضیه اینه که فایل را با header یا xsendfile ارسال کنین. توی انجمن کلمات header file را توی تالار php جستجو کنید تا کلی تاپیک مرتبط پیدا کنید. در مورد XSendFile هم خیلی کم دیدم روی سرویس های shared که به درستی تنظیم شده باشه و عموما روی vps کار میکنند.

2undercover
دوشنبه 10 آذر 1393, 16:20 عصر
شما باید فایل را از طریق header یا XSendFile (برای فایل بزرگ که resume میخوان و باید مدیریت حافظه به خوبی انجام بشه) برای کاربر ارسال کنین. در این حالت کافیه بررسی کنید کاربر اجازه دانلود داره یا نه و بعدش با روشی که گفتم فایل را برای کاربر ارسال کنین. مثلا میتونید بعد از ثبت نام بررسی کنید بیش از ۳ روز از تاریخ پرداخت نگذشته باشه و فایل برای کاربر قابل دانلود بشه. برای لینک های زمان دار هم کافیه یک جدول داشت هباشین که مثلا یک فیلد نام فایل و یک فیلد کد (برای استفاده در url) داره و یک فیلد زمان که تاریخ انقضاء را نشون میده و اگه فایل منقضی نبود اجازه دانلود میده که به نظر من روش اول بهتره ! و روش دوم برای زمانی استفاده داره که نخواهیم کاربر حتما login کنه !

کلا خیلی راه و روش وجود داره و اصل قضیه اینه که فایل را با header یا xsendfile ارسال کنین. توی انجمن کلمات header file را توی تالار php جستجو کنید تا کلی تاپیک مرتبط پیدا کنید. در مورد XSendFile هم خیلی کم دیدم روی سرویس های shared که به درستی تنظیم شده باشه و عموما روی vps کار میکنند.

یک سوال که برای من در مورد این بررسی دسترسی کاربر به وجود اومده اینه که ما مثلا با استفاده Session ها دسترسی کاربر رو بررسی می کنیم که وابسته به کوکی موجود در مرورگر هست. حالا اگر کاربر از نرم افزار های مدیریت بارگیری مثل IDM استفاده بکنه مشکلی پیش نمیاد و کوکی های موجود در مرورگر توسط نرم افزار به سایت برای دریافت فایل ارسال می شوند یا نه؟

php_zone
دوشنبه 10 آذر 1393, 18:25 عصر
به لینک زیر سر بزن ولی حواست باشه , اینکار مقدار قابل توجهی از Ram سرور رو به خودش اختصاص میده :

http://php.net/manual/en/function.readfile.php

hadi2016
دوشنبه 10 آذر 1393, 19:47 عصر
دوستان تقریبا یه چیزایی فهمیدم
الان من مثلا اسم فایلی که قراره دانلود بشه رو داخل دیتابیس ذخیره کردم
خوب مثلا اسم فایلم file1.zip و آدرسی که کاربر قراره ببینه برای این فایل
www.site.com/download.php?url=mvxcbvxcvuioyuyuwte (http://www.site.com/download.php?url=mvxcbvxcvuioyuyuwte)
حالا چطوری بگم که وقتی url برابر با mvxcbvxcvuioyuyuwte بود file1.zip رو دانلود کنه
البته با IDM و آدرسی که تو IDM نشون داده میشه www.site.com/download.php?url=mvxcbvxcvuioyuyuwte (http://www.site.com/download.php?url=mvxcbvxcvuioyuyuwte) باشه

Unique
سه شنبه 11 آذر 1393, 02:17 صبح
ک سوال که برای من در مورد این بررسی دسترسی کاربر به وجود اومده اینه که ما مثلا با استفاده Session ها دسترسی کاربر رو بررسی می کنیم که وابسته به کوکی موجود در مرورگر هست. حالا اگر کاربر از نرم افزار های مدیریت بارگیری مثل IDM استفاده بکنه مشکلی پیش نمیاد و کوکی های موجود در مرورگر توسط نرم افزار به سایت برای دریافت فایل ارسال می شوند یا نه؟

وقتی کاربر از طریق مرورگر درخواست دانلود میده IDM خودش میپره وسط و فایل را دانلود میکنه ! در واقع لینک فایل ما غیر مستقیمه و مستقیم نیست ! اگه میخواین طرف بتونه لینک را کپی کنه و مثلا چند دقیقه بعد بتونه دانلود کنه باید لینک های زمان دار بسازین و اگه بخواین آنلاین بودن کاربر را چک کنین امکانش نیست. IDM هم با http کار میکنه اما Cookie مربوط به session شما را ارسال نمیکنه !


الان من مثلا اسم فایلی که قراره دانلود بشه رو داخل دیتابیس ذخیره کردم
نمیدونم شما بودی یکبار پرسیدی چطوری فایل را بریزم توی database که من و یکی از دوستان دیگه گفتیم این کار اشتباهه ! امیدوارم دست از سر database برداری و فایل ها را بریزی روی خود دیسک.


حالا چطوری بگم که وقتی url برابر با mvxcbvxcvuioyuyuwte بود file1.zip رو دانلود کنه
شما وقتی میخوای لینک زمان دار برای کاربری تولید کنی میای و یک جدول میسازی که سه تا فیلد داره ، یکی mvxcbvxcvuioyuyuwte که باید یکتا باشه ! یکی نام یا آدرس فایل روی دیسک و یکی هم تاریخ انقضا. حالا کاربر رشته یکتا را توی url به شما داده و شما چک میکنی که منقضی نشده باشه و اگه نشده باشه از طریق نام فایل (یا آدرس کامل روی دیسک) اون را برای کاربر با header یا xsendfile ارسال میکنی. همین.

hadi2016
سه شنبه 11 آذر 1393, 12:10 عصر
نه بابا فایل بریزم تو دیتابیس؟ مسخرست
منظورم اسم فایلو بریزم تو دیتابیس و یک آی دی بهش بدم
و وقتی آی دی رو به صفحه دانلود فرستادم بره آدرس فایلو بدست بیاره و دانلود غیر مستقیم بکنه

ostadsho
سه شنبه 11 آذر 1393, 14:48 عصر
زمانی که کاربر پرداخت رو انجام داد و برگشت به آدرس بازگشتی،شما یه کد (کلید) ایجاد کنید توی دیتابیس ذخیرش کنید. برای اون کلید هم یه تاریخ expire تعریف کنید.

حالا هر کاربری که قراره فایلش رو دانلود کنه، شما اون رو منتقلش میکنید به یه صفحه و (البته کلید رو هم با متود GET) ارسالش کنید به صفحه.

بعد که کلید رو دریافت کردید برید توی دیتابیس چک کنید که آیا expire اون کلید گذشته یا نه؟

اگر نگذشته بود بررسی کنید که اون کلید مربوط به کدام فیلم یا محصولتون هست؟( قبلا با کلید ، id محصول یا فیلم رو هم ذخیره کردید توی دیتابیس)

حالا کافیه که فایلتون رو read کنید( آدرسی که باید از اونجا فایلتون read باشه رو هم توی جدول فیلم هاتون توی دیتابیس ذخیره کردید)

در مورد read کردن فایل هم میتونید توی گوگل سرچ کنید که چطوری انجام میشه.

فقط حواستون باشه قابلیت resume رو داشته باشه (زمانی که read ) می کنید.( اگر مشکلی بود بازم مطرح بفرمایید)

2undercover
سه شنبه 11 آذر 1393, 15:16 عصر
وقتی کاربر از طریق مرورگر درخواست دانلود میده IDM خودش میپره وسط و فایل را دانلود میکنه ! در واقع لینک فایل ما غیر مستقیمه و مستقیم نیست ! اگه میخواین طرف بتونه لینک را کپی کنه و مثلا چند دقیقه بعد بتونه دانلود کنه باید لینک های زمان دار بسازین و اگه بخواین آنلاین بودن کاربر را چک کنین امکانش نیست. IDM هم با http کار میکنه اما Cookie مربوط به session شما را ارسال نمیکنه !


نمیدونم شما بودی یکبار پرسیدی چطوری فایل را بریزم توی database که من و یکی از دوستان دیگه گفتیم این کار اشتباهه ! امیدوارم دست از سر database برداری و فایل ها را بریزی روی خود دیسک.


شما وقتی میخوای لینک زمان دار برای کاربری تولید کنی میای و یک جدول میسازی که سه تا فیلد داره ، یکی mvxcbvxcvuioyuyuwte که باید یکتا باشه ! یکی نام یا آدرس فایل روی دیسک و یکی هم تاریخ انقضا. حالا کاربر رشته یکتا را توی url به شما داده و شما چک میکنی که منقضی نشده باشه و اگه نشده باشه از طریق نام فایل (یا آدرس کامل روی دیسک) اون را برای کاربر با header یا xsendfile ارسال میکنی. همین.

خوب این رو می دونستم. بیشتر بحثم روی همون لینک زمان دار هست که فرضا اگر هم لینک زمان دار ساختیم از کجا تشخیص بدیم که همون کاربری که مجوز دانلود رو داره، در حال دانلود هست؟

hadi2016
سه شنبه 11 آذر 1393, 15:24 عصر
زمانی که کاربر پرداخت رو انجام داد و برگشت به آدرس بازگشتی،شما یه کد (کلید) ایجاد کنید توی دیتابیس ذخیرش کنید. برای اون کلید هم یه تاریخ expire تعریف کنید.

حالا هر کاربری که قراره فایلش رو دانلود کنه، شما اون رو منتقلش میکنید به یه صفحه و (البته کلید رو هم با متود GET) ارسالش کنید به صفحه.

بعد که کلید رو دریافت کردید برید توی دیتابیس چک کنید که آیا expire اون کلید گذشته یا نه؟

اگر نگذشته بود بررسی کنید که اون کلید مربوط به کدام فیلم یا محصولتون هست؟( قبلا با کلید ، id محصول یا فیلم رو هم ذخیره کردید توی دیتابیس)

حالا کافیه که فایلتون رو read کنید( آدرسی که باید از اونجا فایلتون read باشه رو هم توی جدول فیلم هاتون توی دیتابیس ذخیره کردید)

در مورد read کردن فایل هم میتونید توی گوگل سرچ کنید که چطوری انجام میشه.

فقط حواستون باشه قابلیت resume رو داشته باشه (زمانی که read ) می کنید.( اگر مشکلی بود بازم مطرح بفرمایید)


ممنون از توضحاتتون

Unique
سه شنبه 11 آذر 1393, 15:53 عصر
از کجا تشخیص بدیم که همون کاربری که مجوز دانلود رو داره،
چن زمان محدود هست در نتیجه فرض میکنیم که دادن این لینک به اشخاص دیگه اهمیت نداره و تازه وقتی کسی پول چیزی را داده قائدتا فقط خودش استفاده میکنه. اما اگه خیلی موضوع login بودن کاربر براتون مهمه و اینکه لینک نیاز به cookie و این حرفا نداشته باشه و با IDM در هر زمانی قابل دانلود باشه باید کاربر user و pass را توی IDM برای سایت شما وارد کنه تا توی Header به سایت شما ارسال بشه و شما authenticate کنین و فایل را بهش بدین. دقیقا کاری که Rapidshare و غیره انجام میدهند.