آپلود فایل در php

چطور میتوانیم فرم آپلود تصویر یا فایل به زبان php درست کنیم؟

برای اینکه کاربران بتوانند در سایت شما فایل آپلود کنند شما نیاز دارید یک فرم HTML ایجاد کنید و سپس زبان پی اچ پی به راحتی هرچه تمام تر فایل را به سرور منتقل میکند . 

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

برای اینکه متوجه شوید فایل موقت اپلود کجاست به صفحه ی phpinfo.php مراجعه کنید و دنبال upload_tmp_dir بگردید  و همچنین متغیری دیگری وجود دارد که بیشترین حجم فایل آپلودی را مشخص میکند و upload_max_filesize نام دارد. 

این دو متغیر درون فایل php.ini تعریف و مقداردهی شده اند. 

مراحل آپلود یک فایل در php به سرور طبق لیست زیر میباشد :

  1. کاربر یک صفحه ی اینترنتی را باز میکند و یک فرم HTML را میبیند که یک قسمتی برای انتخاب فایل وجود دارد سپس فایل خود را از کامیپوترش ،  انتخاب و دکمه ی ارسال را میزند 
  2. فایل انتخاب شده توسط کاربر ، به یک دایرکتوری موقت سمت سرور ارسال میگردد 
  3. اسکریپت php بررسی میکند که آیا فایل با صحت کامل به سمت سرور رسیده است یا نه ؟ اگر رسیده باشد آنرا به محلی که برنامه نویس تعریف کرده کپی میکند
  4. سپس پیام موفقیت آمیز بودن آپلود نمایش داده میشود 

در سمت سرور نیاز است هم برای مقصدی که فایل در آن قرار میگیرد و هم مسیر موقتی مجوز نوشتن داده شود. اگر دایرکتوری های مورد نیاز read-only باشند یعنی مجوز نوشتن نداشته باشند عملیات آپلود با خطا مواجه میشود.

فایلی که آپلود میشود میتواند یک سند متنی ، یک تصویر یا هر فایل دیگری باشد .

 

ساخت فرم آپلود در php

با استفاده از کدهای زیر میتوانید یک فرم آپلود فایل در php بسازید . متد فرم از نوع post تعریف شده است و چون قراره با این فرم فایل ارسال کنیم حتما enctype را از نوع multipart/form-data تعریف کنید. 

<?php
   if(isset($_FILES['image'])){
      $errors= array();
      $file_name = $_FILES['image']['name'];
      $file_size =$_FILES['image']['size'];
      $file_tmp =$_FILES['image']['tmp_name'];
      $file_type=$_FILES['image']['type'];
      $file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
      
      $expensions= array("jpeg","jpg","png");
      
      if(in_array($file_ext,$expensions)=== false){
         $errors[]="extension not allowed, please choose a JPEG or PNG file.";
      }
      
      if($file_size > 2097152){
         $errors[]='File size must be excately 2 MB';
      }
      
      if(empty($errors)==true){
         move_uploaded_file($file_tmp,"images/".$file_name);
         echo "Success";
      }else{
         print_r($errors);
      }
   }
?>
<html>
   <body>
      
      <form action="" method="POST" enctype="multipart/form-data">
         <input type="file" name="image" />
         <input type="submit"/>
      </form>
      
   </body>
</html>

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

فرم آپلود در php

 

نوشتن اسکریپت آپلود فایل با php

در زبان برنامه نویسی php یک متغیر سراسری به نام $_FILES وجود دارد . این متغیر یک آرایه دو بعدی است که تمام اطلاعات یک فایل آپلودی را در خود دارد . 

اگر در فرم آپلودی که بصورت html ساختیم خاصیت name را file گذاشته باشیم . سپس php پنج متغیر زیر را در اختیار شما میگذارد : 

  • $_FILES['file']['tmp_name'] : فایلی که بصورت موقتی در دایرکتوری موقتی آپلود شده است 
  • $_FILES['file']['name'] : نام دقیق فایلی که اپلود شده است 
  • $_FILES['file']['size']  : سایز فایلی که آپلود شده به byte
  • $_FILES['file']['type']  : نوع یا فرمت MIME type فایلی که اپلود شده است 
  • $_FILES['file']['error'] : کدخطای رخ داده شده در اپلود 

در مثال زیر یک تصویر اپلود میشود و سپس اطلاعات فایل اپلود شده نمایش داده میشود : 

<?php
   if(isset($_FILES['image'])){
      $errors= array();
      $file_name = $_FILES['image']['name'];
      $file_size = $_FILES['image']['size'];
      $file_tmp = $_FILES['image']['tmp_name'];
      $file_type = $_FILES['image']['type'];
      $file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
      
      $expensions= array("jpeg","jpg","png");
      
      if(in_array($file_ext,$expensions)=== false){
         $errors[]="extension not allowed, please choose a JPEG or PNG file.";
      }
      
      if($file_size > 2097152) {
         $errors[]='File size must be excately 2 MB';
      }
      
      if(empty($errors)==true) {
         move_uploaded_file($file_tmp,"images/".$file_name);
         echo "Success";
      }else{
         print_r($errors);
      }
   }
?>
<html>
   <body>
      
      <form action = "" method = "POST" enctype = "multipart/form-data">
         <input type = "file" name = "image" />
         <input type = "submit"/>
			
         <ul>
            <li>Sent file: <?php echo $_FILES['image']['name'];  ?>
            <li>File size: <?php echo $_FILES['image']['size'];  ?>
            <li>File type: <?php echo $_FILES['image']['type'] ?>
         </ul>
			
      </form>
      
   </body>
</html>

نتیجه ی کدهای بالا مشابه تصویر زیر خواهد بود : 

اسکریپت اپلود در php

نکته : برای یادگیری سریع زبان برنامه نویسی پی اچ پی از یک دوره ی آموزش ویدیویی پروژه محور php استفاده کنید و بعد از حرفه ای شدن در php حتما آموزش php mvc را هم در نظر بگیرید.

اتمام درس