shayantl
June 20th, 2019, 09:06
برای انتقال فایلهای با حجم بالا از یک سرور به سرور دیگر زحمات زیادی لازمه و بسیار طاقت فرسا نیز هست، چون یک بار باید فایل رو دانلود کنید و سپس همون فایل رو آپلود کنید روی سروری که میخواهید. حالا فرض کنید حجم فایل شما بالای 200 مگابایت هست و شما با اینترنت 128 کیلو بیت به اینترنت وصل شده باشید …!!!! فکر میکنم لازم نیست دیگه بقیه ماجرا رو توضیح بدم. یه روش خوب برای راحتتر شدن این کار وجود داره و اون استفاده از یک کد PHP برای دانلود فایل از روی هاست دیگر (Remote File) هست. تابع نوشته شده در زیر برای اینکار مناسب هست و این کار رو برای شما انجام میده:
1 function download_remote($url, $save_path) {
2 set_time_limit (0);
3 $f = fopen($save_path, 'w+');
4 $handle = fopen($url, "rb");
5 while (!feof($handle)) {
6 $contents = fread($handle, 8192);
7 fwrite($f, $contents);
8 }
9 fclose($handle);
10 fclose($f);
11 }
در این متد 8192 بایت معادل 8 کیلو بایت در یک زمان خوانده میشود نه کل فایل، چون اگر کل فایل در یک بار خوانده شود احتمالا خارج از حافظه تعیین شده در تنظیمات PHP خواهد بود. به عبارت دیگر کل فایل منتقل خواهد شد ولی هنگام انتقال در بخشهای 8 کیلو بایتی منتقل میشود.
مثال نحوه ی استفاده از تابع:
1 if (isset($_POST['submit'])) {
2 $url = $_POST['url'];
3 $file_name = basename($url);
4 $save_path = $file_name;
5 download_remote($url, $save_path);
6 }
7 ?>
8 <form action="" method="post">
9 <label>file address:</label><input type="text" name="url"/>
10 <p>example: https://daskhat.ir/sitemap.xml.gz</p>
11 <input type="submit" name="submit" value="Download"/>
12 </form>
در کد بالا فایل از آدرس “https://daskhat.ir/sitemap.xml.gz” دانلود و در همسایگی فایل remote_download.php (فایل مربوط به کدهای بالا) ذخیره خواهد شد.
توجه
دوستان این مطلب رو خودم تهییه نکردم و منبع (https://daskhat.ir/file-transfer-from-host-to-host/) داره
1 function download_remote($url, $save_path) {
2 set_time_limit (0);
3 $f = fopen($save_path, 'w+');
4 $handle = fopen($url, "rb");
5 while (!feof($handle)) {
6 $contents = fread($handle, 8192);
7 fwrite($f, $contents);
8 }
9 fclose($handle);
10 fclose($f);
11 }
در این متد 8192 بایت معادل 8 کیلو بایت در یک زمان خوانده میشود نه کل فایل، چون اگر کل فایل در یک بار خوانده شود احتمالا خارج از حافظه تعیین شده در تنظیمات PHP خواهد بود. به عبارت دیگر کل فایل منتقل خواهد شد ولی هنگام انتقال در بخشهای 8 کیلو بایتی منتقل میشود.
مثال نحوه ی استفاده از تابع:
1 if (isset($_POST['submit'])) {
2 $url = $_POST['url'];
3 $file_name = basename($url);
4 $save_path = $file_name;
5 download_remote($url, $save_path);
6 }
7 ?>
8 <form action="" method="post">
9 <label>file address:</label><input type="text" name="url"/>
10 <p>example: https://daskhat.ir/sitemap.xml.gz</p>
11 <input type="submit" name="submit" value="Download"/>
12 </form>
در کد بالا فایل از آدرس “https://daskhat.ir/sitemap.xml.gz” دانلود و در همسایگی فایل remote_download.php (فایل مربوط به کدهای بالا) ذخیره خواهد شد.
توجه
دوستان این مطلب رو خودم تهییه نکردم و منبع (https://daskhat.ir/file-transfer-from-host-to-host/) داره