PDA

View Full Version : سوال: آپلود مستقیم در هاست دانلود



c0mmander
سه شنبه 07 دی 1395, 00:05 صبح
سلام.

ما یک هاست با دامنه www.domian.com داریم که کاربر میتونی فایلی رو ارسال کنه.

با توجه به محدودیت حجمی هاست اصلی ساب دامین www.dl.domain.com پوینت شده به یک هاست دانلود قرار داده شده.

سوال من اینجاست که چطوری میشه برنامه php که www.domain.com قرار گرفته فایل رو در www.dl.domain.com آپلود کنه؟

پ.ن. :
راه حل این موضوع چیه؟ آیا فقط برنامه آپلود باید در ساب دامین قرار بگیره؟

amirhossein.sh
سه شنبه 07 دی 1395, 00:19 صبح
شما اجازه بدید فایل تو هاست میزبانیتون اپلود بشه ، بعد از اپلود شدن بلافاصله به وسیله یک لیچر فایلو بفرستین رو هاست دانلود و فایلو از هاست میزبانی پاک کنید

lizard.tiny
سه شنبه 07 دی 1395, 00:27 صبح
درود

راه حال های پیشنهادی :

1 : آپلود فایل از طریق POST

2 : آپلود فایل از طریق ftp_put

c0mmander
سه شنبه 07 دی 1395, 00:46 صبح
شما اجازه بدید فایل تو هاست میزبانیتون اپلود بشه ، بعد از اپلود شدن بلافاصله به وسیله یک لیچر فایلو بفرستین رو هاست دانلود و فایلو از هاست میزبانی پاک کنید

حجم هاست در حدی نیست که بشه فایل رو داخلش آپلود کرد.فرض کنید 20 مگ حجم هاست باقی مونده و کاربر یک فایل 60 مگی میخواد بفرسته.

c0mmander
سه شنبه 07 دی 1395, 00:51 صبح
درود

راه حال های پیشنهادی :

1 : آپلود فایل از طریق POST

2 : آپلود فایل از طریق ftp_put

روش دوم یعنی ارسال مستقیم از طریق ftp از نظر سرعت و قابل اطمینان بودن چطوره؟

Unique
سه شنبه 07 دی 1395, 08:07 صبح
هاست دانلود PHP داره !؟ اگه داره کافیه فایل را upload کنی روی اون و پس از آپلود موفقیت آمیز یک مقدار برگردونی تا روی پایگاه سایت اصلی بتوی رکوردش را ذخیره کنی. اما اگه نداره چاره ای نداری جز اینکه یک مقدار فضای خالی روی هاست داشته باشی تا بلافاصله بعد از upload یک اسکریپت فایل را با ftp منتقل کنه.

lizard.tiny
سه شنبه 07 دی 1395, 09:45 صبح
روش دوم یعنی ارسال مستقیم از طریق ftp از نظر سرعت و قابل اطمینان بودن چطوره؟
سرعت FTP بالاهست و البته به هاست اول شما هم بستگی داره

البته راه حا دیگه ای هم هست, اونم استفاده از curl

در کل در php برای حل هر مشکل راه کارهای زیادی وجود داره

c0mmander
سه شنبه 07 دی 1395, 18:40 عصر
ممنون از هر دو عزیز Unique (http://barnamenevis.org/member.php?11933-Unique) و lizard.tiny (http://barnamenevis.org/member.php?271957-lizard-tiny)



هاست دانلود PHP داره !؟

متاسفانه نداشت اما الان از هاست دیگه ای استفاده میکنیم این امکان رو داره. الان یک فایل php برای دریافت فایل ها داخلش قرار دادیم. هم طور حجم فعلی هاست اصلی رو افزایش دادیم.


البته راه حا دیگه ای هم هست, اونم استفاده از curl

در نهایت فایل رو با cURL ارسال میکنیم و بعد از دریافت پیام مناسب فایل رو از هاست اصلی حذف و داخل دیتابیس رکورد میزنیم.

با سپاس از تمامی دوستان.

c0mmander
چهارشنبه 08 دی 1395, 12:21 عصر
دوستان یک مشکل دیگه بر خورد کردم.

برای دانلود از zip stream استفاده شده و بعد از تغییر نام در استیریم جهت دانلود بافر میشه.

(به دلیل اینکه تعداد فایل ها بسیار بالا و حجم اون ها کم و امکان تغییر و حذف هم توسط کاربر وجود داره)

الان فایل ها در دوهاست متفاوت قرار گرفته شدن. برای دانلود کردن چه راهی رو پیشنهاد می دید؟

lizard.tiny
چهارشنبه 08 دی 1395, 20:51 عصر
درود

به نظر من شما دارید لقمه رو دور سر خودتون میچرخونید و بعد میزارید دهانتون!

اگه قرار هست فایل رو درون سرور دیگه ای آپلود کنید نباید روی سرور اول آپلود بشه! این غیر منطقی هست! ممکنه هاست اول 1000 مگ فضای خالی داشته باشه و همزمان 50 نفر بخوان فایل های 100 مگی آپلود کنن

در خصوص دانلود هم مشخص کنید چرا میخوایید تغییر نام بدید فایل ها رو ؟ نمیشه موقع آپلود تغییر نام بدید ؟

و بهترین حالت دانلود اگه میخوایید دانلود ها رو کنترل کنید و فشار به سرور نیاد میتونید از ماژول XSendFile استفاده کنید

lizard.tiny
چهارشنبه 08 دی 1395, 21:18 عصر
البته میتونید فایل رو هم به صورت tmp از طریق FTP آپلود کنید, برای اینکار یک نمونه کد نوشتم برسی کنید شاید مشکل رو رفع کنه :

http://pastecode.ir/?p=1390

در خصوص دانلود هم اگه تمایل به کنترل, تغییر نام و ... دارید واسه اینکه به سرور فشار وارد نشه پیشنهاد میکنم از XSendFile استفاده کنید

c0mmander
چهارشنبه 08 دی 1395, 21:29 عصر
درود

به نظر من شما دارید لقمه رو دور سر خودتون میچرخونید و بعد میزارید دهانتون!

اگه قرار هست فایل رو درون سرور دیگه ای آپلود کنید نباید روی سرور اول آپلود بشه! این غیر منطقی هست! ممکنه هاست اول 1000 مگ فضای خالی داشته باشه و همزمان 50 نفر بخوان فایل های 100 مگی آپلود کنن

در خصوص دانلود هم مشخص کنید چرا میخوایید تغییر نام بدید فایل ها رو ؟ نمیشه موقع آپلود تغییر نام بدید ؟

و بهترین حالت دانلود اگه میخوایید دانلود ها رو کنترل کنید و فشار به سرور نیاد میتونید از ماژول XSendFile استفاده کنید

در حالت عادی همه چیز درست بود. تمام فایل ها در یک هاست ذخیره میشد. اما بنابه شرایطی هاست 50 گیگابایتی در حال پرشدن شد که این وضعیت پیش اومد.

برای آپلود زمانی فایل دریافت میشه بعد از فیلراسیون و محدودیت 50 مگی و غیره نام فایل برای ذخیره سازی هش میشه(یعنی بعد از قرار گرفتن فایل در کش http)

راه حل ساده افزایش حجم هاست بود که پشتیبانی هاستینگ امکان افزایش رو نداشت. در نهایت مجبور به استفاده از هاست پشتیبان شدیم. که فایل های جدید در هاست جدید قرار بگیره و با یک کلاس مدیریت لینک ها برای آدرس دهی ها استفاده کنیم.

فایل موقع ذخیره تغییر نام داده میشه و دیگه تغییری نامی وجود نداره. منظور از ویرایش حذف فایل ویا آپلود مجدد فایل دیگری بود.

صورت مسئله دقیقا این موضوع هست : تمام فایل هایی که یک فرد فرستاده نیاز داریم که دانلود کنیم. از بین 5000 نفر.

حالا این ماژول XSendFile میتونه از پس این دانلود ها بر بیاد. مثلا عرض میکنم ما url بهش بدیم و اون بصورت zipstream فایل دانلود رو تحویل بده؟

c0mmander
چهارشنبه 08 دی 1395, 21:35 عصر
ای کاش من این سوال دومم رو داخل یک تاپیک جدا مطرح میکردم تا مشخص بشه موضوع جدیدی پیش اومده و مشکل اولی با کمک دوستان حل شده.

lizard.tiny
چهارشنبه 08 دی 1395, 21:38 عصر
در حالت عادی همه چیز درست بود. تمام فایل ها در یک هاست ذخیره میشد. اما بنابه شرایطی هاست 50 گیگابایتی در حال پرشدن شد که این وضعیت پیش اومد.

برای آپلود زمانی فایل دریافت میشه بعد از فیلراسیون و محدودیت 50 مگی و غیره نام فایل برای ذخیره سازی هش میشه(یعنی بعد از قرار گرفتن فایل در کش http)

راه حل ساده افزایش حجم هاست بود که پشتیبانی هاستینگ امکان افزایش رو نداشت. در نهایت مجبور به استفاده از هاست پشتیبان شدیم. که فایل های جدید در هاست جدید قرار بگیره و با یک کلاس مدیریت لینک ها برای آدرس دهی ها استفاده کنیم.

فایل موقع ذخیره تغییر نام داده میشه و دیگه تغییری نامی وجود نداره. منظور از ویرایش حذف فایل ویا آپلود مجدد فایل دیگری بود.

صورت مسئله دقیقا این موضوع هست : تمام فایل هایی که یک فرد فرستاده نیاز داریم که دانلود کنیم. از بین 5000 نفر.

حالا این ماژول XSendFile میتونه از پس این دانلود ها بر بیاد. مثلا عرض میکنم ما url بهش بدیم و اون بصورت zipstream فایل دانلود رو تحویل بده؟

نمیدونم منظور شما رو درست متوجه شده باشم یا نه اما :

اگه بخوایید همه فایل های یک فرد رو به صورت zip دانلود کنید برای zip کردنش که باید از توابعی یا کلاس هایی مثل ZipArchive استفاده کنید اما در خصوص دانلود میتونید از XSendFile استفاده کنید ( در صورتی که بخوایید دانلود هم از طریق PHP باشه XSendFile بهترین جایگزین برای دانلود از طریق PHP هست چون فشاری به سرور وارد نمیکنه )

اما لازمه دانلود از طریق XSendFile اینه که همه اون فایل ها zip بشه و بعد از دانلود فایل zip حذف بشه

c0mmander
چهارشنبه 08 دی 1395, 21:49 عصر
نمیدونم منظور شما رو درست متوجه شده باشم یا نه اما :

اگه بخوایید همه فایل های یک فرد رو به صورت zip دانلود کنید برای zip کردنش که باید از توابعی یا کلاس هایی مثل ZipArchive استفاده کنید اما در خصوص دانلود میتونید از XSendFile استفاده کنید ( در صورتی که بخوایید دانلود هم از طریق PHP باشه XSendFile بهترین جایگزین برای دانلود از طریق PHP هست چون فشاری به سرور وارد نمیکنه )

اما لازمه دانلود از طریق XSendFile اینه که همه اون فایل ها zip بشه و بعد از دانلود فایل zip حذف بشه

دقیقا یکی از دلایلی که ما نمیتونیم از ZipArchive استفاده کنیم همین هست که زمان فشرده سازی بالاست و نیاز به ساخت یک فایل zip در هاست هست که این موضوع اصلا بهینه نیست.xsend هم نیاز به فایل فیزیک داره برای دانلود که ... حجم هاست و این داستان ها که خودتون میدونید.

اما جدای از این بحث شرایط زیر رو ما داریم:
1- افرادی که فایل هاشون فقط در هاست شماره یک هست که خوب مشکلی ندارند.
2- افرادی که فایل هاشون فقط در هاست شماره دو هست که خوب برای این ها هم مشکلی نیست میشه پیاده سازیش کرد.

اما و اما تنها مشکلی که هست افرادی که فایل هاشون در هاست 1 و هاست 2 هست.

چیزی که خودم به نظرم میاد اینکه یک لینک بسازیم (با توجه به اینکه امکان استفاده از php در هر دو هاست هست) داخل این شرایط بخش اولرو دانلود کنه و بعد پیام بده که برای بخش دوم به این لینک مراجعه کنید.

lizard.tiny
چهارشنبه 08 دی 1395, 21:52 عصر
دقیقا یکی از دلایلی که ما نمیتونیم از ZipArchive استفاده کنیم همین هست که زمان فشرده سازی بالاست و نیاز به ساخت یک فایل zip در هاست هست که این موضوع اصلا بهینه نیست.xsend هم نیاز به فایل فیزیک داره برای دانلود که ... حجم هاست و این داستان ها که خودتون میدونید.

اما جدای از این بحث شرایط زیر رو ما داریم:
1- افرادی که فایل هاشون فقط در هاست شماره یک هست که خوب مشکلی ندارند.
2- افرادی که فایل هاشون فقط در هاست شماره دو هست که خوب برای این ها هم مشکلی نیست میشه پیاده سازیش کرد.

اما و اما تنها مشکلی که هست افرادی که فایل هاشون در هاست 1 و هاست 2 هست.

چیزی که خودم به نظرم میاد اینکه یک لینک بسازیم (با توجه به اینکه امکان استفاده از php در هر دو هاست هست) داخل این شرایط بخش اولرو دانلود کنه و بعد پیام بده که برای بخش دوم به این لینک مراجعه کنید.
روی هاست اول چطور فایل های کاربر رو zip میکنید ؟

c0mmander
چهارشنبه 08 دی 1395, 22:00 عصر
روی هاست اول چطور فایل های کاربر رو zip میکنید ؟

بصورت stream فایل zip تولید می کنیم.(البته شاید استفاده از جمله بافر کردن بهتر از تولید کردن باشه) هم فشار به هاست نمیاد و هم حجمی اشغال نمیشه. فقط سرعت دانلود کم (در حالت عالی) و قابلیت رزیوم رو نداریم.

lizard.tiny
پنج شنبه 09 دی 1395, 00:21 صبح
وقتی از کلاس ZipStream استفاده میکنید ریزوم نداره اما سرعت مناسبی داره, از کدوم نسخه کلاس ZipStream استفاده میکنید ؟

آخرین آپدیت کلاس ZipStream مربوط به 5 ماه پیش هست که سرعت دانلود مناسبی داره و پیش نیازش PHP 5.6 هست

و یک نسخه دیگه هم هست که از PHP 5.1 به بالا پشتیبانی میکنه و سرعت دانلود به شدت پایینی داره

فایل مربوط به کلاس ZipStream رو ارسال کنید برسی کنم

c0mmander
پنج شنبه 09 دی 1395, 21:39 عصر
وقتی از کلاس ZipStream استفاده میکنید ریزوم نداره اما سرعت مناسبی داره, از کدوم نسخه کلاس ZipStream استفاده میکنید ؟

اما سرعت مناسب رو نداره فرضا من در خلوت ترین وضعیت هاست با اینترنت 1Mbyte تنها با سرعت 200-100 kilobyte دانلود میکنم. (بیشتر فکر میکنم بخاطر ضعف پردازنده ها هاست باشه)



فایل مربوط به کلاس ZipStream رو ارسال کنید برسی کنم

از این کلاس استفاده شده (فقط چند مورد تغییر جزئی برای امنیت بیشتر که ربطی به پرفرمنس نداره داخلش ایجاد کردیم):
https://github.com/maennchen/ZipStream-PHP

------
فعلا مشکل رو با ارسال یک فایل xml به هاست دوم از طریق cURL و دانلود فایل ها با همین کلاس به نحوی مدیریت کردیم.

sokoot67
شنبه 18 آذر 1396, 15:10 عصر
درود

راه حال های پیشنهادی :

1 : آپلود فایل از طریق POST

2 : آپلود فایل از طریق ftp_put


سلام
میدونم این تاپیک مربوط به پارسال هست

ولی سوالم مرتبط با همین موضوع هست

هر کدام از این روش ها رو بخواهم برم به مشکل میخورم برای فایل های بالای 100 مگ
چون
در روش دوم ftp ابتدا فایل در هاست اصلی میاد بعد منتقل میشه خوب این که برای بالای 100 مگ مشکل پیش میاد
روش دوم هم با از طریق پست و مستقیم هم به مشکل همون محدودیت میخورم

به نظر شما باید چیکار کرد؟