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

daskhatmin فواد طهماسبی
21,240 بازدید
آموزش انتقال فایل از هاست به هاست

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

function download_remote($url, $save_path) {
	set_time_limit (0);
    $f = fopen($save_path, 'w+');
    $handle = fopen($url, "rb");
    while (!feof($handle)) {
        $contents = fread($handle, 8192);
        fwrite($f, $contents);
    }
    fclose($handle);
    fclose($f);
}

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

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

if (isset($_POST['submit'])) {
    $url = $_POST['url'];
    $file_name = basename($url);
    $save_path = $file_name;
    download_remote($url, $save_path);
}
?>
<form action="" method="post">
    <label>file address:</label><input type="text" name="url"/>
    <p>example: https://daskhat.ir/sitemap.xml.gz</p>
    <input type="submit" name="submit" value="Download"/>
</form>

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

 

Download “انتقال فایل از هاست به هاست”
نسخه v1.0 124 بار دانلود شده است 501 B

daskhatmin

فواد طهماسبی

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

37 دیدگاه برای “آموزش انتقال فایل از هاست به هاست”

  1. مهدی گفت:

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

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

  2. هومان گفت:

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

  3. بردیا گفت:

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

    1. فؤاد طهماسبی گفت:

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

  4. محمد گفت:

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

    1. فؤاد طهماسبی گفت:

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

      $save_path = $file_name;
      

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

      $save_path = '/path_to/directory/'.$file_name;
      

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

  5. علی گفت:

    با سلام
    آیا راه کاری برای حالت انتقال چند فایل وجود دارد . من از پرشین گیگ می خواهم فایل هایم را انتقال دهم و باید یکی یکی انتقال دهم آیا می شود بخش آدرس فایل را چند فایل کرد که همزمان بتوان چند فایل را جابجا کرد . من فیلد آدرس را ده فایل کردم ولی یک فایل ارور به ئحجم 400 مگ در هاست من ایجاد کرد و کل صفحه هم پر شد از ارور برای خطوط 6.7.8و……

  6. مسعود گفت:

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

  7. مسعود گفت:

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

    1. فؤاد طهماسبی گفت:

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

  8. میثم گفت:

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

    1. فؤاد طهماسبی گفت:

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

  9. فرشید گفت:

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

    1. فؤاد طهماسبی گفت:

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

      1. فرشید گفت:

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

  10. Ramin Tohidy گفت:

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

    1. فؤاد طهماسبی گفت:

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

  11. user گفت:

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

  12. sadegh3333 گفت:

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

    1. فؤاد طهماسبی گفت:

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

  13. بهنام گفت:

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

    1. فؤاد طهماسبی گفت:

      اینطوری:

      function remote_file_size($url){
      	# Get all header information
      	$data = get_headers($url, true);
      	# Look up validity
      	if (isset($data['Content-Length']))
      		# Return file size
      		return (int) $data['Content-Length'];
      }
      

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

  14. سعید گفت:
    Warning: set_time_limit() [function.set-time-limit]: Cannot set time limit in safe mode in /,,,/index.php on line 4
    

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

    1. فؤاد طهماسبی گفت:

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

  15. milititi گفت:

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

  16. حسین گفت:

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

    1. فؤاد طهماسبی گفت:

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

  17. حسین گفت:

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

    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.

    1. بهنام گفت:

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

  18. تست دی ال گفت:

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

    Warning: fopen(91.zip) [function.fopen]: failed to open stream: Permission denied in /home/****/domains/***/public_html/files/remote.php on line 5
    

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

    1. فؤاد طهماسبی گفت:

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

  19. محمد مهدی گفت:

    سلام …
    من استفاده کردم خیلی عالی بود
    کارم راه افتاد
    باید ازتون تشکر کنم واقعا
    یک دنیا ممنون

    1. فؤاد طهماسبی گفت:

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

  20. مصطفی گفت:

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

    1. فؤاد طهماسبی گفت:

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

    2. فؤاد طهماسبی گفت:

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

      set_time_limit (0);
      

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

دیدگاه‌های بیشتر

دیدگاه‌ها بسته شده‌اند.