Ngôn ngữ PHP - Upload tập tin

Upload tập tin trong PHP

PHP cho phép chúng ta upload một, nhiều tập tin văn bản hoặc nhị phân chỉ vài dòng đoạn mã.

đối tương  $_FILES trong PHP

Để lấy tất thông tin tập tin cần upload trong PHP chúng ta dùng hàm $_FILES.
Như vậy với một file được upload sẽ có những thông số như sau:

  • $_FILES[“file”][“name”] : Tên của file được upload, bao gồm cả phần đuôi mở rộng. Trong ví dụ này là “image.png”.
  • $_FILES[“file”][“type”] : Loại file được upload. Trong ví dụ này là ‘image/png’.
  • $_FILES[“file”][“tmp_name”]:  Nơi lưu trữ tạm thời của file trên server, sẽ bị xóa ngay sau đó. Trong ví dụ này là ‘C:\xampp\tmp\phpAC32.tmp’.
  • $_FILES[“file”][“error”] :Lỗi xảy ra trong quá trình upload. Ở đây là 0, nghĩa là không có lỗi gì.
  • $_FILES[“file”][“size”] : Kích thước của file, được tính bằng kilobytes

Hàm move_uploaded_file() 
Để di chuyển tập tin vừa upload từ thư mục tạm đến thư mục chỉ định ta dùng hàm move_uploaded_file().
Syntax:

bool move_uploaded_file ( string $filename , string $destination );

Ví dụ: upload tập tin

Để upload được file, chúng ta cần thêm thuộc tính enctype="multipart/form-data" cho form, ta dùng thẻ input type="file" để upload file .

Bước 1: Chuẩn bị file html sau:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Hiệp Sĩ IT Demo Upload Tập tin</title>
</head>
<body>
<form  method="post" enctype="multipart/form-data">
 Chọn tập tin : <input type="file" name="file"  size="20"/><br/>
 <input type="submit" value="Upload"  name="up"/>
</form>
</body>
</html>

Bước 2: Chúng ta sẽ kiểm tra xem người dùng đã nhấn nút submit hay chưa bằng cách kiểm tra sự tồn tại của biến $_POST['up'], nếu người dùng đã nhấn submit rồi thì tiến hành kiểm tra xem họ đã chọn file hay chưa, nếu chưa chọn file thì báo lỗi

Ta có thể lấy được tên file, kiểu file , cỡ file thông qua các biến :

  • File name : $_FILES['file']['name'];
  • File type : $_FILES['file']['type'];
  • File size : $_FILES['file']['size'];
<?php
  if(isset($_POST['up'])){ // Người dùng đã ấn submit
     if($_FILES['file']['name'] != NULL){ // Đã chọn file
        // thực hiện công việc upload
     }else{
        echo "Vui lòng chọn file";
     }
  }
?>

Bước 3 : Ở ví dụ này chúng ta chỉ chấp nhận các tập tin hình ảnh, nên chúng ta kiểm tra chúng có phải tập tin hình?. 

<?php
  if($_FILES['file']['type'] == "image/jpeg"
      || $_FILES['file']['type'] == "image/png"
      || $_FILES['file']['type'] == "image/gif"){ 
      // là file ảnh
      // Tiến hành code upload
  }else{
      // không phải file ảnh
      echo "Kiểu file không hợp lệ";
  }
?>

Bước 4: Chúng ta kiểm tra xem tập tin upload nhỏ hơn 1mb, file size ở đây được tính theo byte (1mb = 1*1024 kb * 1024 bytes) . Nếu cỡ file nhỏ hơn 1mb tiến hành upload file bằng hàm move_uploaded_file , file upload sẽ được lưu trong thư mục uploads.

<?php
// Tiến hành code upload    
 if($_FILES['file']['size'] > 1048576){
       echo "File không được lớn hơn 1mb";
 }else{
          // file hợp lệ, tiến hành upload
    $path = "uploads/"; // file sẽ lưu vào thư mục data
    $tmp_name = $_FILES['file']['tmp_name'];
    $name = $_FILES['file']['name'];
    $type = $_FILES['file']['type']; 
    $size = $_FILES['file']['size']; 
    // Upload file
    move_uploaded_file($tmp_name,$path.$name);
    echo "File uploaded! <br />";
    echo "Tên file : ".$name."<br />";
    echo "Kiểu file : ".$type."<br />";
    echo "File size : ".$size;
    $path.=$name;
    echo "Hình bạn upload <img src=\"  $path\">";
 }
?>

Và đây là toàn bộ code của phần upload file

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Hiệp Sĩ IT Demo Upload Tập tin</title>
</head>

<?php

if(isset($_POST['up'])){ // Người dùng đã ấn submit
    if($_FILES['file']['name'] != NULL){ // Đã chọn file
        // Tiến hành code upload file
        if($_FILES['file']['type'] == "image/jpeg"
        || $_FILES['file']['type'] == "image/png"
        || $_FILES['file']['type'] == "image/gif"){
        // là file ảnh
        // Tiến hành code upload    
            if($_FILES['file']['size'] > 1048576){
                echo "File không được lớn hơn 1mb";
            }else{
                // file hợp lệ, tiến hành upload
                $path = "uploads/"; // file sẽ lưu vào thư mục data
                $tmp_name = $_FILES['file']['tmp_name'];
                $name = $_FILES['file']['name'];
                $type = $_FILES['file']['type']; 
                $size = $_FILES['file']['size']; 
                // Upload file
                move_uploaded_file($tmp_name,$path.$name);
                echo "File uploaded! <br />";
                echo "Tên file : ".$name."<br />";
                echo "Kiểu file : ".$type."<br />";
                echo "File size : ".$size;
				$path.=$name;
				echo "Hình bạn upload <img src=\"  $path\">";
           }
        }else{
           // không phải file ảnh
           echo "Kiểu file không hợp lệ";
        }
   }else{
        echo "Vui lòng chọn file";
   }
}
?>

<body>
<form  method="post" enctype="multipart/form-data">
 Chọn tập tin : <input type="file" name="file"  size="20"/><br/>
 <input type="submit" value="Upload"  name="up"/>
</form>
</body>
</html>

Xem ví dụ