دانلود چند فایل با استفاده از header ها در PHP

دی ۲۵, ۱۳۹۱ توسط : سعید

شاید با این مشکل بر خورده باشید که نیاز باشه چند فایل رو به وسیله header برای کاربر قابل دانلود کنید.اما در اصل چنین چیزی امکان پذیر نیست و header فقط میتونه یک فایل رو برای دانلود به سمت کاربر ارسال کنه.
راه حل این روش اینه که ابتدا فایلهاتون رو فشرده کنید سپس به سمت کاربر بفرستید.
با استفاده از کد زیر میتونید چند فایل رو باهم فشرده کنید و با استفاده از header ها دانلود کنید.

function zipFilesAndDownload($file_names,$archive_file_name,$file_path)
{
  //create the object
  $zip = new ZipArchive();
  //create the file and throw the error if unsuccessful
  if ($zip->open($archive_file_name, ZIPARCHIVE::CREATE )!==TRUE) {
    exit("cannot open <$archive_file_name>\n");
  }

  //add each files of $file_name array to archive
  foreach($file_names as $files)
  {
    $zip->addFile($file_path.$files,$files);
  }
  $zip->close();

  header("Content-type: application/zip");
  header("Content-Disposition: attachment; filename=$archive_file_name");
  header("Pragma: no-cache");
  header("Expires: 0");
  readfile("$archive_file_name");
  exit;
}

برای استفاده از این تابع هم به صورت زیر عمل میکنیم :

$file_names=array('test.php','test1.txt');
  $archive_file_name='zipped.zip';
  $file_path=dirname(__FILE__).'/';
  zipFilesAndDownload($file_names,$archive_file_name,$file_path);

منبع : http://answers.webhostinggeeks.com/how-to-use-php-to-force-download-multiple-files-in-zip-archive-944

بازدید : ۳۳۶۹

دی ۲۶, ۱۳۹۱ @ ۸:۲۵ ب.ظ

سلام. مطلب بسیار خوبی بود . تشکر ♥

پاسخ دادن
محمد
دی ۲۷, ۱۳۹۱ @ ۱۱:۱۰ ق.ظ

عالی بود. ممنون

پاسخ دادن
حسن
دی ۲۹, ۱۳۹۱ @ ۱۱:۵۰ ب.ظ

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

پاسخ دادن
حسن
دی ۳۰, ۱۳۹۱ @ ۵:۴۹ ب.ظ

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

پاسخ دادن
بهمن ۸, ۱۳۹۱ @ ۱۱:۲۹ ب.ظ

فانکشن جالبیه
فقط چند نکته بنظرم رسید که بهتره پارامتر ۱ رو type اش رو array تعیین کنید که نوع دیگه ای وارد بشه دچار مشکل نشه.

در خط ۷ هم بنظرتون exception ارسال بشه بجای exit نمی تونه بهتر باشه؟
چون بنظرم اینطوری می شه جریان برنامه رو هم به نوعی کنترل کرد و خطا ها رو به شکل مناسبتری هندل کرد.

در خط ۲۲ هم بنظرم از return‌ بجای exit‌ استفاده بشه مناسبتر باشه چون داخل funciton هستیم.

در کل ایده جالبیه 🙂

پاسخ دادن

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


*