۰۲-دى-۱۳۹۲, ۱۹:۴۸:۴۸
برای انتقال فایلهای با حجم بالا از یک سرور به سرور دیگر زحمات زیادی لازمه و بسیار طاقت فرسا نیز هست، چون یک بار باید فایل رو دانلود کنید و سپس همون فایل رو آپلود کنید روی سروری که میخواهید. حالا فرض کنید حجم فایل شما بالای ۲۰۰ مگابایت هست و شما با اینترنت ۱۲۸ کیلو بیت به اینترنت وصل شده باشید …!!!! فکر میکنم لازم نیست دیگه بقیه ماجرا رو توضیح بدم. یه روش خوب برای راحتتر شدن این کار وجود داره و اون استفاده از یک کد PHP برای دانلود فایل از روی هاست دیگر (Remote File) هست. تابع نوشته شده در زیر برای اینکار مناسب هست و این کار رو برای شما انجام میده:
در این متد ۸۱۹۲ بایت معادل ۸ کیلو بایت در یک زمان خوانده میشود نه کل فایل، چون اگر کل فایل در یک بار خوانده شود احتمالا خارج از حافظه تعیین شده در تنظیمات PHP خواهد بود. به عبارت دیگر کل فایل منتقل خواهد شد ولی هنگام انتقال در بخشهای ۸ کیلو بایتی منتقل میشود.
مثال نحوه ی استفاده از تابع:
در کد بالا فایل از آدرس “http://masalan.ir/sitemap.xml.gz” دانلود و در همسایگی فایل remote_download.php (فایل مربوط به کدهای بالا) ذخیره خواهد شد.
کد php:
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);
}
در این متد ۸۱۹۲ بایت معادل ۸ کیلو بایت در یک زمان خوانده میشود نه کل فایل، چون اگر کل فایل در یک بار خوانده شود احتمالا خارج از حافظه تعیین شده در تنظیمات PHP خواهد بود. به عبارت دیگر کل فایل منتقل خواهد شد ولی هنگام انتقال در بخشهای ۸ کیلو بایتی منتقل میشود.
مثال نحوه ی استفاده از تابع:
کد php:
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: http://masalan.ir/sitemap.xml.gz</p>
<input type="submit" name="submit" value="Download"/>
</form>
در کد بالا فایل از آدرس “http://masalan.ir/sitemap.xml.gz” دانلود و در همسایگی فایل remote_download.php (فایل مربوط به کدهای بالا) ذخیره خواهد شد.