لینک غیر مستقیم برای فایل ها در PHP - بخش اول

لینک غیر مستقیم برای فایل ها در PHP – بخش دوم

در این آموزش ابتدا نحوه ارسال فایل به کاربر توسط PHP را فرا خواهیم گرفت و در ادامه، آموزش بخش اول را که مبحث ایجاد لینک غیر مستقیم برای دانلود فایل ها بود، تکمیل خواهیم کرد. برای آنکه بتوانیم فایلی را به کاربر ارسال کنیم باید مراحل زیر اتفاق بیافتد:

۱- فایل را بخوانیم(read)

۲- header پاسخ را مقدار دهی کنیم

۳- داده های موجود در فایل را که در مرحله نخست خواندیم، در خروجی چاپ کنیم(write)

نکته: می توان مرحله خواندن و نوشتن را پشت سرهم انجام داد اما باید این نکته مهم را در نظر داشته باشیم که نوشتن باید بعد از مقدار دهی header اتفاق بیافتد.

تابع readfile

یکی از توابعی که می تواند عملیات خواندن از فایل و نوشتن آن در خروجی را با هم انجام دهد تابع readfile است. به نمونه کد زیر دقت کنید:

$file = 'monkey.gif';
if (file_exists($file)){
   header('Content-Description: File Transfer');
   header('Content-Type:application/octet-stream');
   header('Content-Disposition: attachment;filename="'.basename($file).'"');
   header('Expires: 0');
   header('Cache-Control: must-revalidate');
   header('Pragma:public');
   header('Content-Length:'.filesize($file));
   readfile($file);
   exit;
}

 

در صورتی که کد بالا اجرا شود. فایل تصویری با نام monkey.gif به کاربر ارسال می شود و کاربر می تواند این فایل را دانلود نماید. به بیان دیگر مثلا اگر کد بالا در فایلی با نام download.php قرار گیرد و نشانی وب سایت ما http://example.com باشد، کاربر می تواند از طریق لینک http://example.com/download.php فایل را دانلود کند. با این کار کاربر نمی داند که فایل در چه آدرسی قرار دارد و صرفا می تواند با لینک غیر مستقیم اقدام به دانلود فایل کند.

برای تکمیل مبحث، باید کاری کنیم که فایل download.php مامور خواندن تمام فایل ها و ارسال آنها به کاربر شود. خب این کار بسیار ساده می تواند انجام شود. تنها کافیست تا پارامتری مانند id به این فایل ارسال شود. یعنی آدرس فایل هایی که آپلود نموده ایم را در دیتابیس ذخیره کنیم و به هر فایل یک id نسبت دهیم. سپس زمانی که کاربر به عنوان مثال لینک http://example.com/download.php?id=3 را وارد می کند، در دیتابیس به دنبال آدرس فایل مربوط به آن می گردیم و در صورت پیدا کردن آدرس، فایل مورد نظر را خوانده و در خروجی قرار می دهیم.

قسمت مربوط به آپلود فایل ها و تخصیص شناسه یکتا به آنها  در آموزش قبل به همراه نمونه کد توضیح داده شد. با توجه به آن آموزش فایل download.php می تواند نمونه کدی مانند زیر داشته باشد:


include 'GUID.php';
function DownloadFile($id){
  $con=mysqli_connect("localhost","user","pass","database");
  // Check connection

  if(mysqli_connect_errno()) {
  return "Failed to connect to MySQL: " . mysqli_connect_error();
  }
  $gid= strip_tags($id);
  $sql= "SELECT filename From myfiles WHERE FileLink=$gid";
  $result = mysqli_query($con, $sql);
  if (mysqli_num_rows($result)>0) {
    $row = mysqli_fetch_assoc($result)
    mysqli_close($con);
    $file = 'uploads/'. $row['filename'];
    if (file_exists($file)){
      header('Content-Description: File Transfer');
      header('Content-Type:application/octet-stream');
      header('Content-Disposition: attachment;filename="'.basename($file).'"');
      header('Expires: 0');
      header('Cache-Control: must-revalidate');
      header('Pragma:public');
      header('Content-Length:'.filesize($file));
      readfile($file);
      exit;
    }
  }
}

موفق و پیروز باشید…

دیدگاهتان را ثبت کنید

آدرس ایمیل شما منتشر نخواهد شدعلامتدارها لازمند *

*

theme