PDA

View Full Version : حرفه ای: دانلود فایل از طریق اسکریپت



rasoul_par
چهارشنبه 02 اردیبهشت 1394, 17:30 عصر
سلام دوستان
من یک سرور دارم که فایل ها رو از طریق اسکریپت (و نه دسترسی مستقیم به فایل) برای دانلود میزاره، من میخوام کدی بنویسم که URL سایت رو بش بدم و فایل رو برام دانلود کنه.
به عبارتی یک استریم از سرور 1 به سرور 2 در جریانه، من میخوام کدی رو بنویسم که یک استریم از سرور 2 به سرور 3 ایجاد کنه.
اصلا آیا میشه این کارو کرد؟

m.esmaeilzadeh
چهارشنبه 02 اردیبهشت 1394, 21:35 عصر
همزمان همه اینا انجام بشه ؟
میتونی header تنظیم کنی که دانلود کنه ولی این که از این کاسه بیاد تو کاسه دیگه و همزمان شاید نشه ...

rasoul_par
جمعه 04 اردیبهشت 1394, 08:34 صبح
آره، میخوام همزمان انجام بشه، یک جوری مثل دانلود منیجر!

-سیّد-
جمعه 04 اردیبهشت 1394, 08:44 صبح
چیزی که من فهمیدم اینه که یه سرور هست، یه فایل داره که دسترسی مستقیم نمی‌ده و از طریق یه اسکریپت می‌تونید فایل رو دانلود کنید.
مثلاً فایل a.jpg هست که از طریق http://test.com/download.php?id=10 می‌خواین دانلودش کنین.
حالا شما می‌خواین یه اسکریپت PHP بنویسین که این فایل رو دانلود کنه. درسته؟

اگه درست فهمیدم، ساده‌اش کار یه خط کده!

$f = file_get_contents('http://test.com/download.php?id=10');

البته اگه می‌خواین این کد کار کنه، باید allow_url_fopen فعال باشه:
http://php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen

اما در مورد بحث همزمانی:
شما فقط در صورتی می‌تونید مثل download manager ها همزمان بخش‌های مختلف یک فایل رو دانلود کنید، که سرور به شما این اجازه رو بده.
هنگامی که شما یه فایل عادی رو دارید با دسترسی مستقیم دانلود می‌کنید، معمولاً سرور این اجازه رو به شما می‌ده. ولی وقتی از طریق یه اسکریپت (download.php?id=10) دارید فایل رو دریافت می‌کنید، معمولاً (در ۹۹٪ مواقع!) این اجازه رو به شما نمی‌ده.

بنابراین اول آزمایش کنید ببینید با یه download manager معمولی می‌تونید چند تا کانکشن به اون سرور بزنید و اون فایل مورد نظر رو با چند کانکشن همزمان دانلود کنید؟ اگه تونستید، اون وقت می‌شه درباره‌ی این که توی PHP چطوری می‌شه این کار رو کرد صحبت کرد!

rasoul_par
جمعه 04 اردیبهشت 1394, 09:59 صبح
درسته، دسترسی مستقیم به فایل رو نمیده
از طریق file_get_content نمیشه چرا که یک Http Request باید به سرور فرستاده شه و بعد سرور یک استریم رو میفرسته.
فک کنم سوالم رو درست نپرسیدم، منظور از همزمان بودن، همزمانی دریافت استریم از سرور و ذخیره همون استریم روی دیسکه، نه ایجاد چند کانکشن که خب بستگی به Http Request Header داره.

Unique
جمعه 04 اردیبهشت 1394, 12:02 عصر
اگه سرور اختصاصی دارین بهتره از ابزار هایی مثل aria2 استفاده کنین که بیشترین سرعت دانلود را به شما میده. در غی راینطورت میتونید از curl استفاده کنید. بعد از دریافت فایل هم میتونید از طریق ftp روی هر سرور دیگه ای upload ش کنید. php به خوبی با ftp کار میکنه. کلا خیلی راه وسناریو میشه پیشنهاد اداد. راستش سوالتون خیلی سر راست و خوب پرسیده نشده و بهرته با مثال توضیح بدین. گام به گام.

rasoul_par
چهارشنبه 09 اردیبهشت 1394, 20:16 عصر
بابت معرفی aria2 کمال تشکر رو دارم ولی سوالم همچنان بی جواب موند.
دعا کنید بم پایان دوره بدن بشینم روش کار کنم!:قهقهه::قهقهه::قهقهه::قهق هه::قهقهه::قهقهه: