Upload File trong PHP



Một PHP script có thể sử dụng với một HTML form cho phép người dùng upload file lên Server. Đầu tiên các file này được upload lên một thư mục tạm thời, sau đó được di chuyển tới một đích bởi một PHP script.

Thông tin trong trang phpinfo.php mô tả thư mục tạm thời mà được sử dụng cho các file được upload ở dạng upload_tmp_dir và kích thước giới hạn của các file có thể được upload được bắt đầu ở dạng upload_max_filesize. Các tham số này được thiết lập trong file cấu hình php.ini.

Tiến trình upload một file theo các bước sau:

  • Người dùng mở trang chứa một HTML form là một text file, một nút browse và một nút submit.

  • Người dùng nhấn nút browse và chọn một file để upload từ máy local.

  • Đường dẫn đầy đủ đến file được chọn sẽ xuất hiện trong trường văn bản, sau đó người dùng nhấn nút Submit.

  • File được chọn được gửi đến thư mục tạm thời trên Server.

  • PHP script, mà được xác định như một Form Handler trong thuộc tính action của form, sẽ kiểm tra xem file đã đến chưa và sau đó sao chép file này sang thư mục mong muốn.

  • PHP script xác nhận thành công tới người dùng.

Thông thường khi ghi các file, nó là cần thiết cho cả thư mục tạm thời và thư mục đích để có quyền truy cập được thiết lập là cho phép ghi. Nếu một trong 2 được thiết lập là read-only, thì tiến trình sẽ thất bại.

Một file được upload lên có thể là text file hoặc image file hoặc bất cứ tài liệu nào.

Quảng cáo

Tạo upload form trong PHP

Dưới đây là HTML code tạo một upload form. Form này có thuộc tính method được thiết lập là post và thuộc tính enctype thiết lập là 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[]="Không chấp nhận định dạng ảnh có đuôi này, mời bạn chọn JPEG hoặc PNG.";
      }
      
      if($file_size > 2097152){
         $errors[]='Kích cỡ file nên là 2 MB';
      }
      
      if(empty($errors)==true){
         move_uploaded_file($file_tmp,"images/".$file_name);
         echo "Thành công!!!";
      }
      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>

Lưu chương trình trên trong một file có tên là test.php trong htdocs, sau đó mở trình duyệt và gõ địa chỉ http://localhost:8080/test.php sẽ cho kết quả:

Upload file trong PHP

Tạo upload script trong PHP

Có một biến PHP toàn cục là $_FILES. Biến này là một mảng mảng liên hợp và giữ tất cả thông tin liên quan đến file được tải lên. Vì vậy, nếu giá trị gán cho thuộc tính name của input trong form upload là file, khi đó PHP có thể tạo 5 biến sau:

  • $_FILES['file']['tmp_name'] − File đã upload trong thư mục tạm thời trên Web Server.

  • $_FILES['file']['name'] − Tên thực sự của file đã upload.

  • $_FILES['file']['size'] − Kích thước tính theo byte của file đã upload.

  • $_FILES['file']['type'] − Kiểu MIME của file đã upload.

  • $_FILES['file']['error'] − Mã hóa lỗi liên quan đến file tải lên này.

Quảng cáo

Ví dụ

Dưới đây là ví dụ cho phép tải các hình ảnh và trả về kết quả ở dạng thông tin file đã được tải lên.

<?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[]="Không chấp nhận định dạng ảnh có đuôi này, mời bạn chọn JPEG hoặc PNG.";
      }
      
      if($file_size > 2097152){
         $errors[]='Kích cỡ file nên là 2 MB';
		}
      
      if(empty($errors)==true){
         move_uploaded_file($file_tmp,"images/".$file_name);
         echo "Thành công!!!";
      }
      else{
         print_r($errors);
      }
   }
?>
<html>
   <body>
      
      <form action="" method="POST" enctype="multipart/form-data">
         <input type="file" name="image" />
         <input type="submit"/>
			
         <ul>
            <li>Gửi file có tên: <?php echo $_FILES['image']['name'];  ?>
            <li>Kích cỡ file   : <?php echo $_FILES['image']['size'];  ?>
            <li>Kiểu file      : <?php echo $_FILES['image']['type'] ?>
         </ul>
			
      </form>
      
   </body>
</html>

Kết quả sẽ có dạng giống như:

Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.

Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:

Các bạn ở Hà Nội có thể tham gia khóa học thứ 9 của vietjackteam (đang tuyển sinh) vào cuối tháng 10/2018 do anh Nguyễn Thanh Tuyền, admin vietjack.com trực tiếp giảng dạy tại Hà Nội. Chi tiết nội dung khóa học tham khỏa link : Khóa học Java.Các bạn học CNTT, điện tử viễn thông, đa phương tiện, điện-điện tử, toán tin có thể theo học khóa này. Số lượng các công việc Java hoặc .NET luôn gấp ít nhất 3 lần Android hoặc iOS trên thị trường tuyển dụng. Khóa online= Đi phỏng vấn, Khóa offline= Đi phỏng vấn+ 1.5 tháng thực tập ngoài doanh nghiệp.

Mọi người có thể xem demo nội dung khóa học tại địa chỉ Video demo khóa học Offline

Các bạn ở xa học không có điều kiện thời gian có thể tham dự khóa Java online để chủ động cho việc học tập. Từ tháng 4/2018, VietJack khuyến mại giá SỐC chỉ còn 250k cho khóa học, các bạn có thể trả lại tiền nếu không hài lòng về chất lượng trong 1 tháng, liên hệ facebook admin fb.com/tuyen.vietjack để thanh toán chuyển khoản hoặc thẻ điện thoại, khóa học bằng Tiếng Việt với gần 100 video, các bạn có thể chủ động bất cứ lúc nào, và xem mãi mãi. Thông tin khóa học tại Khóa học Java Online trên Udemy

Follow fanpage của team https://www.facebook.com/vietjackteam/ hoặc facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.

Các bài học PHP phổ biến khác tại VietJack:




Tài liệu giáo viên