PDA

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



p30tec
سه شنبه 14 مهر 1388, 17:47 عصر
سلام
من یه اسکریپت php میخوام که این کار رو برام انجام بده

وقتی کاربر یه آدرسی مثل زیر رو وارد میکنه


http://mysite.com/download/file.zip

فایلی رو که توی یه سرور دیگه هست مثل


http://other.com/other.zip

دانلود بکنه و قابلیت Resume داشته باشه ولی به هیچ وجه نشه لینک اصلی رو بدست آورد

تا اونجایی که میدونم با header میشه این کار رو انجام داد ولی به راحتی میشه لینک اصلی رو خارج کرد این نکته که لینک اصلی به هیچ وجه قابل دسترس نباشه خیلی مهمه

امیـرحسین
سه شنبه 14 مهر 1388, 20:56 عصر
با تابع readfile میشه آدرس رو مخفی کرد ولی resume رو نمیشه نگه داشت.

p30tec
سه شنبه 14 مهر 1388, 20:56 عصر
کسی جواب نمیده؟

p30tec
سه شنبه 14 مهر 1388, 21:06 عصر
ممنونم ، امیر حسین

ولی کدی که من میخوام باید چند تا شرط زیر رو داشته باشه
آدرس به هیچ وجه مشاهده نشه
Resume داشته باشم
لینک دانلود اصلی روی هاست دیگری هست ( این حالت پشتیبانی بشه )
هر کی میتونه کمک کنه دریغ نکنه :لبخندساده:

bahram17set
سه شنبه 14 مهر 1388, 22:04 عصر
ممنونم ، امیر حسین

ولی کدی که من میخوام باید چند تا شرط زیر رو داشته باشه
آدرس به هیچ وجه مشاهده نشه
Resume داشته باشم
لینک دانلود اصلی روی هاست دیگری هست ( این حالت پشتیبانی بشه )
هر کی میتونه کمک کنه دریغ نکنه :لبخندساده:

می‌توانید با استفاده از Redirect کردن در htaccess فایل رو به یک فایل PHP ارجاع بدید و براش یک متغیر GET تعریف کنید و برای هر کاربر متاسب با IP و زمان و ... یک جلسه (Session) تعریف کنید که در صورت قطع ارتباط دوباره Resume کنید .
فایل رو هم می‌تونید با استفاده از file_get_contents و یا fopen بگیرید و به کاربر بدید و یا توی یه جایی ذخیره کنید ( اگه زیاد تغییر نمی‌کنه ! ) که البته بگم خیلی از پهنای باند شما رو میگیره.
به دلیل طولانی بودن مراحل از دادن کدهای واضح معذوریم !!
( خودتون پیاده‌سازی کنید بستگی به دانش خودتون داره. فقط یکم ابتکار ! )‌

mst_ab
سه شنبه 14 مهر 1388, 22:35 عصر
می تونی فایل رو به صورت موقت توی آدرسی رندوم ، ذخیره کنی ، مثلاً اینجوری:
http://yoursite.com/4h32k394jhf76/file.zip
و بعد از مدت خاصی)اون رو پاک کنی( یا شرایط دیگه مثلاً آیپی اون بنده خدا رو بگیری و بعد با قطع شدن اتصال به سرور فایل رو پاک کنی) البته یه مشکلی که هست اینه که یکم برای فایل های حجیم غیر ممکن هست! فقط یکم! ولی عموماً از این روش استفاده می کنن.

p30tec
سه شنبه 14 مهر 1388, 22:43 عصر
با تشکر از دوستان
مشکل من اینه که فایل ها حجیم هستند و کاربر ها زیاد و اگه قرار باشه بخوام فایل ها رو جایی ذخیره کنم جوابگو نیست
به همین دلیل میخوام از یه چیزی مثل Redirect استفاده کنم

یعنی واقعا چنین Redirect ای وجود نداره؟

mst_ab
سه شنبه 14 مهر 1388, 23:24 عصر
من همین راه رو بلد بودم، باید یکم صبر کنی اساتید بیان چون من چیز دیگه ای بلد نیستم . :لبخندساده:

p30tec
چهارشنبه 15 مهر 1388, 09:15 صبح
خیلی ممنون

اساتید هم کمک کنند

p30tec
چهارشنبه 15 مهر 1388, 15:09 عصر
خیلی برام مهمه
یکی کمک کنه :افسرده:

s_salavati2002
چهارشنبه 15 مهر 1388, 15:24 عصر
دوست عزیز هر دانلودی یک هدر داره که در هدر مشخص میشه که تو چه رنجی دانلود منیجر می خواد دانلودو ادامه بده براحتی می تونی هدر دانلود منیجرو بخونی و ببینی که می خواد از کجا فایلو ادامه بده و توسط $_server می تونی HTTP_RANGE رو بخونی ببینی کجاس؟
php یه تابع داره به نام fseek که می تونوی با پوینتر فایل رو بخونی
یکم گنگ گفتم ولی امیدوارم متوجه شی :چشمک:

p30tec
چهارشنبه 15 مهر 1388, 16:54 عصر
من منظور شما رو اینطوری متوجه شدم
اول HTTP_RANGE رو بخونم ببینم تا کجا دانلود شده بعد با fseek پوینتر رو به اونجا ببرم بعد بقیه فایل رو با fread چاپ کنم درسته؟


اگه منظورتون اینه
توی فایل های حجیم با مشکل مواجه نمیشم؟
امکان دانلود تکه تکه وجود داره؟ ( منظورم اینکه که 8 تا کانکشن دانلود منیجر با هم دانلود کنند ){ البته با توجه به resumable بودن فکر میکنم این امکان باشه درسته؟ }
گزینه ای بهتر از چاپ کردن هست؟
اگه قرار باشه 50 کاربر دانلود کنند لود سرور خیلی بالا نمیره؟( نسبت به 50 دانلود؟ )
در هر حال ممنونم و به نظرم پاسخ شما خوب بود

امیـرحسین
چهارشنبه 15 مهر 1388, 22:43 عصر
دوست عزیز هر دانلودی یک هدر داره که در هدر مشخص میشه که تو چه رنجی دانلود منیجر می خواد دانلودو ادامه بده براحتی می تونی هدر دانلود منیجرو بخونی و ببینی که می خواد از کجا فایلو ادامه بده و توسط $_server می تونی HTTP_RANGE رو بخونی ببینی کجاس؟
php یه تابع داره به نام fseek که می تونوی با پوینتر فایل رو بخونی
یکم گنگ گفتم ولی امیدوارم متوجه شی :چشمک:
چه موضوع جالبی!
من تا حالا درباره اش نشنیده بودم. الان سرچ کردم دیدم توی php.net هم چیزی درباره اش نیست در واقع مطلب درباره خیلی کمه ولی این رو پیدا کردم که یه یارو گفته بود کاملترین مقاله درباره HTTP_RANGE هست.
پیدا کردم، گفتم خوبه اینجا هم معرفی کنم: Byte Range Retrieval Extension to HTTP (http://tools.ietf.org/id/draft-ietf-http-range-retrieval-00.txt)


موفق باشید

s_salavati2002
پنج شنبه 16 مهر 1388, 12:19 عصر
من منظور شما رو اینطوری متوجه شدم
اول HTTP_RANGE رو بخونم ببینم تا کجا دانلود شده بعد با fseek پوینتر رو به اونجا ببرم بعد بقیه فایل رو با fread چاپ کنم درسته؟


اگه منظورتون اینه

توی فایل های حجیم با مشکل مواجه نمیشم؟
امکان دانلود تکه تکه وجود داره؟ ( منظورم اینکه که 8 تا کانکشن دانلود منیجر با هم دانلود کنند ){ البته با توجه به resumable بودن فکر میکنم این امکان باشه درسته؟ }
گزینه ای بهتر از چاپ کردن هست؟
اگه قرار باشه 50 کاربر دانلود کنند لود سرور خیلی بالا نمیره؟( نسبت به 50 دانلود؟ )

در هر حال ممنونم و به نظرم پاسخ شما خوب بود
آره تقریبا منظورم همین بود

1. آره میشه
2. آره
3. آره هست
4. خیلی بالا میره!
راهی که برای این کار به ذهنم رسید استفاده از stream ها است
از تابع stream_copy_to_stream استفاده کن که خودش توش پوینترم داره
موفق باشی

p30tec
پنج شنبه 16 مهر 1388, 17:25 عصر
از تابع stream_copy_to_stream استفاده کن که خودش توش پوینترم داره

منوال php رو دیدم استفاده از این تابع به فضا نیاز داره

از همه دوستانی که کمک کردند ممنونم
بازم اگه کسی راه بهتری داشت لطف کنه و راهنمایی کنه

p30tec
پنج شنبه 16 مهر 1388, 20:33 عصر
به هیچ وجه نمیشه این کار رو کرد , مرورگر فایرفاکس وقتی فایلی رو دانلود می کنی آدرس اینترنتی اون رو بهت میده , توی سایت تبیان هم که خیلی برای جلوگیری از پیدا کردن آدرس ها فکر کردن من با این کار لینک دانلود هاش رو در آوردم :لبخند:

البته قبلش هم می شد , کلا نمیشه جلوی این کار رو گرفت !

شدنش که میشه!
بیشتر سوال من این بود که بهترین راه چیه
ولی مطمئن باش میشه

s_salavati2002
پنج شنبه 16 مهر 1388, 22:04 عصر
به هیچ وجه نمیشه این کار رو کرد , مرورگر فایرفاکس وقتی فایلی رو دانلود می کنی آدرس اینترنتی اون رو بهت میده , توی سایت تبیان هم که خیلی برای جلوگیری از پیدا کردن آدرس ها فکر کردن من با این کار لینک دانلود هاش رو در آوردم :لبخند:

البته قبلش هم می شد , کلا نمیشه جلوی این کار رو گرفت !
چرا نمیشه؟ همه اتفاقات سرورساید میفته و موضوع redirect و این جور چیزا نیست که url رو کلاینت ببینه بحث سر اینه که تمامی فایل ها از یک فایل اصلی قابل دانلود باشن

s_salavati2002
پنج شنبه 16 مهر 1388, 23:06 عصر
چرا نمیشه؟ همه اتفاقات سرورساید میفته و موضوع redirect و این جور چیزا نیست که url رو کلاینت ببینه بحث سر اینه که تمامی فایل ها از یک فایل اصلی قابل دانلود باشنعزیز من مرورگر شما سورس فایل رو بر میداره و دانلود می کنه !
یعنی اگر شما هزار بار آدرس رو هش کنی و ریدایرکت بزنی آخر می رسی به سورس فایل !
سورس فایل هم یعنی همون آدرسی که افزونه های فایرفاکس بهت میدن !
پس به این نتیجه می رسیم که نمیشه ! البته برای بعضی از کاربران میشه , اونایی که از ie استفاده می کنند و یا زیاد وارد نیستن !
شدنش که میشه منم می دونم چی میگی
ولی قراره یه اسکریپتی فایل و خط به خط بخونه و بده کلاینت و فایرفاکس و بقیه باید با این اسکریپت طرف شن نه خود فایل با آدرسش
یه چیزی مثل fopen
البته همه اینا تئورین و تا با چند هزار تقاضا تست نشن ارزش دیگه ای ندارن و اینم معلومه که احتیاج به سیستم خیلی قوی دارند...

p30tec
جمعه 17 مهر 1388, 09:37 صبح
حالا من بعدا این کار رو انجام میدم شما ببین میتونی آدرسش رو گیر بیاری؟

امیـرحسین
جمعه 17 مهر 1388, 13:52 عصر
@tarhebartar:
من یه اسکریپت کوچیک با readfile ساختم و اینم نمونه لینکش: http://boplo.ir/download/?file=CakeMODx_1.3beta.zip
سورس استاتیک این فایل رو DAP و Opera و Firefox و Chrome پیدا نکردند. مگه اینکه شما روش دیگه ای داشته باشید در واقع تابع readfile محتوای یه فایل رو میخونه و flush می کنه. در این حالت دیگه فایل استاتیک اصلی مطرح نیست که آدرسش بخواد پیدا بشه یا نشه چون اطلاعات همون لحظه تولید شدند.

p30tec
جمعه 17 مهر 1388, 14:05 عصر
امیر حسین میشه کدش رو هم بزاری؟

p30tec
جمعه 17 مهر 1388, 20:24 عصر
:تشویق: آفرین
tarhebartar میشه بگی چطوری فهمیدی؟
امیر حسین میشه سورس کارت رو بزاری ؟

s_salavati2002
شنبه 18 مهر 1388, 00:54 صبح
عزیز من !

شما الان میدونی با این کارت چه می کنی !!!! اصلا برات یه مثال خوشمزه می زنم بگیری !

شما فرض کنید که داخل یک رستوران شیک هستی و منتظری یک جوجه کباب ناب زعفرانی برات بیارن !
در اینجا یک آشپرخونه هستش که غذا رو توش درست می کنند و بعد میدن دست کسی غذات رو میریزه توی ظرف و بعد تزئین می کنند و بعد دست به دست می چرخه که برسه روی میز شما و میل کنید !

توضیح : در بالا رستوران حکم اینترنت رو داره , آشپرخانه حکم سرور رو داره , آشپز حکم سیستم عامل و آپاچی و این حرف ها , بخش تزئین و دست به دست چرخیدن غذا و کشیدنش همون پروسسی هست که می خوای فایل کپی کنی stream انجام بدی و ایم حرف ها.

در اینجا این همه کار انجام میشه و در آخر غذا که حکم دیتا و فایل دانلود رو داره به دستت میرسه , البته اینجا شما همون مرورگر هستی , به نظر من اگر ندونی غذا چی هستش مثال بهتره چون قراره مثلا کاربر رو بپیچونی و نفهمه آدرس فایل چیه , ولی چیییییی !!!! آخرش وقتی می خوری غذا رو می فهمی چی هستش یعنی آخرش مرورگر می فهمه آدرس چیه !

و آخر اینکه نمیشه ! :لبخند:
مثالت خوبه ولی تناظر یک به یکت رو قبول ندارم
پروسس مثل طبخ غذا می مونه و وقتی به دستت می رسه می فهمی گوشت داره ولی گوشتش ماله کدوم کشتارگاهه معلوم نیست!

در ضمن اینو نگاه کن
(این تبلیغ نیست اگه جای دیگه داشتم اینجا نمی ذاشتم)
اینم می تونی مبدا اصلیشو پیدا کنی؟؟؟؟؟؟؟
این عکس از به هم پیوستن 30 پارت از 30 فایل روی هاستم و 1 فایل از یک جای دیگست

نظیر این کارو و میشه با mirrored server ها در آورد و از هر کدوم یک قسمت رو برداشت و به هم چسبوند و یک فایل جدید درآورد

zoghal
شنبه 18 مهر 1388, 07:24 صبح
tarhebartar (http://barnamenevis.org/forum/member.php?u=56432) عزیز . خیلی وقت ها نمیشه. لینک اصلی رو فهمید. چون همیشه لینک مستقیمی ایجاد نمیشه.
من تمام مسائلی که تو این تاپیک بیان شده رو در یک پروژه خلاصه کردم. و به مدت یک ماه روش وقت گزاشتم . تا شد این www.p30film.com
در این پروژه. من موفق شدم. سیستم همانند راپید شیر ایجاد کنم. با مشخصات زیر
1- ایجاد لینک رندم.
2- دانلود فایل های حجیم به صورت ریسام دار یا ادامه دار
3- دانلود فایل توسط دانلود منیجر های معروف (در حالت User authorization)
4- محدودیت دانلود و کنترل پهنای باند مصرفی(به صورتی که زمانی که کاربر دانلود فایل رو قطع میکنه یا ارتباطش قطع میشه. اسکریپت این رخداد رو متوجه میشه. مقدار پهنای مصرفی کاربر رو ذخیره میکنه)

امیـرحسین
شنبه 18 مهر 1388, 11:58 صبح
آقا امیرحسین کارت خوب بود , ولی روشی متفاوت برای این پیاده کردم :


http://boplo.ir/assets/files/CakeMODx_1.3beta.zip

ممنون . سورس کارت رو هم میشه بزار بچه های دیگه ببینن .
من کانتر سایتم رو چک کردم! شما با توجه به اینکه من از CMS استفاده می کنم و آزمون و خطا و حدس زدید. این روش قطعی نیست. اگه معماری فولدرها موجود نباشه، یا مثلا از mod_rewrite استفاده بشه، حدس زدن ممکن نیست.

سورس خاصی در کار نیست. اصل سورس همون تابع readfile هست که من از نمونه کد این صفحه استفاده کردم: http://ir.php.net/manual/en/function.readfile.php

s_salavati2002
یک شنبه 19 مهر 1388, 11:27 صبح
به نظر من این کار نهایت اشتباه و مشکل هستش !

فشار به سرور میاد و اینکه پهنای باند رو 100 % تحت تاثیر خودش قرار میده !
منم گفتم که تئوریه و نیاز به سرور قوی داره (خیلی قوی) البته اگه به صورته stream باشه یکم بهتره ولی در هر صورت خیلی سنگینه
موضوع این بود که میشه!
اما خوب به هرحال یک سرویسه و کسی که می خواد سایت برای دانلود بزنه باید خودش همه اینارو در نظر بگیره و بدونه که با vps و پهنای باند کم و این حرفا نمیشه چنین کاری کرد...