remote-file-download

آموزش انتقال فایل از هاست به هاست

برای انتقال فایلهای با حجم بالا از یک سرور به سرور دیگر زحمات زیادی لازمه و بسیار طاقت فرسا نیز هست، چون یک بار باید فایل رو دانلود کنید و سپس همون فایل رو آپلود کنید روی سروری که میخواهید. حالا فرض کنید حجم فایل شما بالای ۲۰۰ مگابایت هست و شما با اینترنت ۱۲۸ کیلو بیت به اینترنت وصل شده باشید …!!!! فکر میکنم لازم نیست دیگه بقیه ماجرا رو توضیح بدم. یه روش خوب برای راحتتر شدن این کار وجود داره و اون استفاده از یک کد PHP برای دانلود فایل از روی هاست دیگر (Remote File) هست. تابع نوشته شده در زیر برای اینکار مناسب هست و این کار رو برای شما انجام میده:

در این متد ۸۱۹۲ بایت معادل ۸ کیلو بایت در یک زمان خوانده میشود نه کل فایل، چون اگر کل فایل در یک بار خوانده شود احتمالا خارج از حافظه تعیین شده در تنظیمات  PHP خواهد بود. به عبارت دیگر کل فایل منتقل خواهد شد ولی هنگام انتقال در بخشهای ۸ کیلو بایتی منتقل میشود.

مثال نحوه ی استفاده از تابع:

در کد بالا فایل از آدرس “http://daskhat.ir/sitemap.xml.gz” دانلود و در همسایگی فایل remote_download.php (فایل مربوط به کدهای بالا) ذخیره خواهد شد.

فایل مربوط: remote_download.zip

کدها و فایل مربوط در تاریخ ۲۹ اردیبهشت ۹۲ بروزرسانی شدند.


برگرفته از: binarytides


نظر شما چیه؟

۳۸ دیدگاه

  1. مصطفی

    سلام دوست عزیز، من راستش نتونستم باهاش کار کنم، چون نتونستم لینک مورد نظرم رو جایی در کد قرار بدم و کار ناتمام ماند، نمیشه طوری طراحی بشه که مثل مشابهات معمول دو کادر باز بشه، یکی برای قرار دادن لینک، و یکی هم برای نام فایل؟ البته اینو هم بگم که یکی از دوستانم ظاهرا روی یک هاست رایگان تست کرده بود نتیجه نگرفته بود، ایشان میگفت اگر بشه روی این کد یک زمان تاخیر قرار بدن، احتمالا جواب بده، ایشان میگفت هاست های رایگان علاوه بر مموری لیمیت، تایم لیمیت، یا تایم اوت هم داره، اگر بشه با همین کد و دستورات داخلش این مورد رو بیشتر کرد، شاید جواب بگیریم. قربانت، خیلی در مجموع کار توپیه، اگر بشه باهاش فایل های سنگین رو انتقال داد که دیگه… اگر موردی بود در خدمتم. my skype name= m.aliwerdi

    • فؤاد طهماسبی نویسنده

      سلام،
      وقتی کامنت شما رو دیدم تعجب کردم که چرا فایلی رو که گذاشتم رو تست نکرده!! بعد اومدم نگاه کردم دیدم فایل مربوط به مطلب نیست! یادم افتاد که هفته پیش شرکت هاستینگ ما رو با تمام سرورهای بکاپش هک کردن و پاکش کردن. ولی چون من تجربه هاست ایرانی داشتم همیشه بکاپ ورمیداشتم، بکاپ فایلها چند روزی قبل از این که فایل رو آپلود کنم بوده!
      به هر حال من فایل رو میزارم تستش کنید. خودم هم رو لوکال هم رو هاست اشتراکی تست کردم.فایل دانلود شده کنار این فایل PHP ذخیره میشه. فقط مشکل تایم اوت ۳۰ ثانیه است که تو این مدت باید دانلود فایل تموم شه. موردی رو هم که شما گفتید روش کار میکنم. تا این محدودیت تایم اوت رو برداریم.
      remote_download.zip

    • فؤاد طهماسبی نویسنده

      کد زیر رو داخل تابع سطر اول قرار بدید تا محدودیت تایم اوت برداشته بشه.

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

    • فؤاد طهماسبی نویسنده

      لطف دارید آقای محمد مهدی، خوشحالم که مفید بوده. 🙂

  2. تست دی ال

    با سلام و عرض ادب خدمت شما دوست عزیز و تشکر بابت کد کاربردی شما
    فقط یه سوال داشتم ؛
    من جدیدا یه هاست دانلود خریدم و خواستم با کد شما فایلی رو که روی هاست اشتراکی ام بود رو به هاست دانلود انتقال بدم حدود ۳۵۰ مگابایت که فایل زیپ بود؛
    منتها بعد از اجرای فایل با این پیغام مواجه شدم

    آیا راهی وجود داره؟ ممنون میشم راهنمایی ام کنید
    ارادتمند شما، سعید

    • فؤاد طهماسبی نویسنده

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

  3. حسین

    ممنون از مطلب ، یه مشکلی هست و ارور زیر برای من میاد و فایل به صورت ناقص دانلود میشه .
    لطفا راهنمایی کنین .

    Service Temporarily Unavailable
    The server closed the connection without sending any data.
    The server is temporarily unable to service your request due to maintenance downtime or capacity problems.
    Due to heavy load on the server, connections may be temporarily blocked from locations that fetch an unusually high number of pages.
    We apologize for the inconvenience.

    • بهنام

      حسین جان این خطا به این دلیله که شما توی یک هاست رایگان فایلتون اپلود کردید و اونا محدودیت گذاشتن

  4. حسین

    برای فایل های حجیم (اکثرا بیشتر از ۵۰ مگ ) هم کار نمیکنه !
    من این راه رو برای دانلود هایی که امکان ریزیوم ندارن میخواستم استفاده کنم ، ولی متاسفانه فعلا نشده !
    برای بقیه فایل ها همونطور که خودتون میدونین از وی پی اس میشه استفاده کرد .

    • فؤاد طهماسبی نویسنده

      سلام،
      خطایی که الان نوشتید، اکثرا مربوط به ایجاد بیش از حد مجاز کانکشن (مثلا تعدادکانکشن به ۵۰ محدود شده) است.
      در مواقعی مربوط به لود بیش از حد CPU و در مواقعی دیگر مربوط به داون شدن سرور هست.
      متاسفانه چون بنده دسترسی یه سرور ندارم بیش از این نمیتونم راهنمایی کنم.
      اگر از دوستان کاربر کسی میتونه مشکل رو حل کنه بگه، تا با نام ایشون مطلب به روز رسانی بشه.
      بازم سعی میکنم روش کار کنم.

  5. milititi

    سلام
    اگه انتقال از یک pc به pc ( لوکال هاست) دیگه باشه.. چکار باید کرد..؟؟؟؟؟؟؟؟؟؟

  6. سعید

    سلام
    این خطا چطوری؟ رفع میشه ممنون

    • فؤاد طهماسبی نویسنده

      اگر دسترسی به php.ini دارید میتونید safe mode رو اونجا به حالت off قرار بدید.
      اگر هم دسترسی ندارید و از هاست اشتراکی استفاده میکنید، میتونید از پشتیبانی درخواست کنید و براشون بگید برای چه کاری میخواهید.
      البته اسکریپتهایی هم وجود دارند که با تکنولوژی Ajax نوشته شدن و نیازی به این تنظیمات ندارن.
      شاید در آینده آموزشی هم برای ریموت دانلود Ajax نوشتم.

  7. بهنام

    سلام ممنون بابت اموزش عالیتون
    وقتی تو بعضی از سایت ها اپلود از ادرس می ری و اپلود رو می زنی حجم فایل رو هم نشون می ده این چه جوری عمل می کنه ؟؟؟؟

    • فؤاد طهماسبی نویسنده

      اینطوری:

      ولی اکثرا با cURL کار میکنن:
      http://snipplr.com/view/29/
      http://sandalian.com/php/check-filesize-of-remote-file-using-php.html

  8. sadegh3333

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

    • فؤاد طهماسبی نویسنده

      احتمالا با روشهای Curl بشه کاری کرد. ولی فعلا تو این کد فکر نمیکنم بشه به غیر از ۲ موردی که گفتید کاری کرد.

  9. user

    اگر برای دانلود به username و password نیازمند باشیم چی؟؟؟

  10. Ramin Tohidy

    سلام ممنون خیلی بدردبخور بود کلی کارم آسون شد. یه سوال داشتم آیا میشه واسه torrent هم همچین کاری کرد؟

    • فؤاد طهماسبی نویسنده

      سلام، خواهش میکنم.
      والا من زیاد در مورد تورنت اطلاعات ندارم. شرمنده ام. 🙂

  11. فرشید

    سلام برای فایل های با حجم زیاد هم کار میکنه؟ مثلا ۷۰۰ مگ؟
    به نظرت اسکریپتی هست که اینکارو بکنه و نشون بده چند درصد انتقال داده شده؟
    اگه باشه که عالیه. ممنون

    • فؤاد طهماسبی نویسنده

      سلام، میشه. اگه اجرای فایل برا شما خطا نده در قسمت set_time_limit ، مشکلی پیش نمیاد. کامل آپلود میکنه.
      یه جستجو تو اینترنت بکنید هم اسکریپتهایی هستند که کار مد نظر شما رو انجام بدن. 🙂

      • فرشید

        راستش میخوام یه فیلم رو از سایتی (چون رایگانه سرعتش پایینه) در هاستم آپلود کنم.
        و از سایت خودم (با سرعت بالا) دانلود کنم 😀
        بحث خسساست نیست . فقط می خوام ببینم میشه؟ یا چقد طول میکشه تو هاستم آپلود بشه.
        تو گوگل به انگلیسی سرچ زدم ولی چیزی پیدا نکردم اگر شما پیدا کردی ممنون میشم به منم معرفی کنی

  12. میثم

    سلام . میشه بگید php.ini کجاست و چه طوری می شه safemode اونو off کنم .

    • فؤاد طهماسبی نویسنده

      سلام.د دنبالش
      اگر دسترسی به روت سرور دارید که در دایرکتوری مربوط به فایلهای php یه فایلی هست به نام php.ini که باید بازش کنید و بگردید دنبال safe_mode و مقدارش رو مساوی با off قرار بدید، حدود سطر ۳۴۰٫ اگر دسترسی ندارید بعضی از هاست ها php.ini رو در اختیار کاربر قرار میدن، تو کنترل پنل مربوط به هاست بگردید دنبالش،اگر اینم نبود باید از پشتیبانی هاستتون بخواهید که این کار رو بکنن که شاید هم نکنن!
      http://ir1.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode

  13. مسعود

    سلام ، با تشکر از آموزش خوبتون
    من این کد رو در هاست رایگان و لوکال امتحان کردم ولی در هر دو بیشتر از یک کیلوبایت دانلود نمیشود چه راه حلی وجود دارد؟

    • فؤاد طهماسبی نویسنده

      سلام،
      خطای خاصی میده؟
      اگر نه، رو لوکال تست بگیرید و برای تست فایل دیگه ای رو از یه سرور دیگه دانلود کنید.

  14. مسعود

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

  15. علی

    با سلام
    آیا راه کاری برای حالت انتقال چند فایل وجود دارد . من از پرشین گیگ می خواهم فایل هایم را انتقال دهم و باید یکی یکی انتقال دهم آیا می شود بخش آدرس فایل را چند فایل کرد که همزمان بتوان چند فایل را جابجا کرد . من فیلد آدرس را ده فایل کردم ولی یک فایل ارور به ئحجم ۴۰۰ مگ در هاست من ایجاد کرد و کل صفحه هم پر شد از ارور برای خطوط ۶٫۷٫۸و……

  16. محمد

    سلام.
    ممنون از مطالب مفیدو ارزندتون.
    فقط میخوام بدونم کدی هست که بشه باهاش فایل مورد نظر رو بجای اینکه در همسایگیه فایله copy.php کپی کنه یه جای دیگه کپی کنه.
    مثلا یه input type= text بزاریم که بپرسه فایل در کجا انتقال داده بشه و ما آدرس اونجا رو(مثلا dl.domain.com/music/favorite رو) بهش بدیم تا دقیقا مکانی که ما میخوام دانلود بشه.

    • فؤاد طهماسبی نویسنده

      چرا میشه این کا رو کرد.
      کد

      با این جایگزین کنید:

      فرم هم میشه گذاشت.

  17. بردیا

    سلام
    منم زدم حجم فایل حدود ۵۵ مگ بود
    Warning: set_time_limit() has been disabled for security reasons in /home/u188888/public_html/remote_download/remote_download.php on line 4
    این ارور رو داد چی کار کنم؟

    • فؤاد طهماسبی نویسنده

      سلام،
      متاسفانه در هاست های اشتراکی معمولا تنظیمات php قابل تنظیم نیست.
      شما سطر ۴ رو کامنت کنید ولی در این صورت احتمالا فقط ۳۰ ثانیه فرصت داده میشه به اسکریپت که کار کنه، اگر سرعت کانکشن هاست شما با هاستی که فایل رو اونه خوب باشه، فایل رو دانلود میکنه تو این مدت ۳۰ ثانیه.

  18. سعید

    با سلام و خسته ناشید خدمت شما دوستان من یک مشکل برای پیش آمد لطفاً کمکم کنید

    من یک اسکریپت خبر خوان نصب کردم فید اضافه کردم وتنضیمات کرون جاب را به این صورت تعریف کردم -هرروز هر ساعت هر ثانیه هر دقیقه هر هفته و هر ماه******* خاصه آدرس کرون جاب را این طوری نوشتم

    اما تا چند ساعت کار کرد و اخبار به خوبی به تعداد زیادی درج می شود اما دیگر از کار افتاد وبعد پیغام شکست را به ایمیلم ارسال می کرد

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

    =============================================
    Warning: set_time_limit() [function.set-time-limit]: Cannot set time limit in safe mode in /home/ghasresh/public_html/khanehkhabar/admin/header.php on line 3

    Warning: Cannot modify header information – headers already sent by (output started at /home/ghasresh/public_html/khanehkhabar/admin/header.php:3) in /home/ghasresh/public_html/khanehkhabar/admin/header.php on line 5
    ============================================
    این هم کد پیغام این صفحه

    ============================================
    حالاباید چکار کنم چندروز در این کدسرگردانم
    لطفاً کمکم کنید

  19. هومان

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

  20. مهدی

    Warning: set_time_limit() has been disabled for security reasons in /home/u102993703/public_html/remote_download.php on line 4

    برای من چنین اروری میده بنظرتون پیکار کنم مشکل چیه؟

متاسفانه امکان ارسال دیدگاه وجود ندارد!