Upload file lên server 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:

Note: You will need to create a new directory called "uploads" in the directory where "upload.php" file resides. The uploaded files will be saved there.


Check if File Already Exists

Now we can add some restrictions.

First, we will check if the file already exists in the "uploads" folder. If it does, an error message is displayed, and $uploadOk is set to 0:

// Check if file already exists
if (file_exists($target_file)) {
  echo "Sorry, file already exists.";
  $uploadOk = 0;
}


Limit File Size

The file input field in our HTML form above is named "fileToUpload".

Now, we want to check the size of the file. If the file is larger than 500KB, an error message is displayed, and $uploadOk is set to 0:

// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
  echo "Sorry, your file is too large.";
  $uploadOk = 0;
}


Limit File Type

The code below only allows users to upload JPG, JPEG, PNG, and GIF files. All other file types gives an error message before setting $uploadOk to 0:

Tải hình ảnh lên máy chủ web là một chức năng phổ biến trong phát triển web, trong hướng dẫn này, chúng tôi sẽ giới thiệu cách tải hình ảnh lên bằng PHP.

Bạn có thể học cách sử dụng PHP để tải hình ảnh lên máy chủ.

Tạo biểu mẫu để tải lên hình ảnh

Chúng ta sẽ sử dụng hình thức html để tải lên hình ảnh. Để gửi dữ liệu hình ảnh, chúng ta nên đặt method = "post"enctype = "multipart/form-data".


    
        
    
    
    
        

Tải lên tệp

Lưu ý: Chỉ cho phép các định dạng .jpg, .jpeg, .gif, .png với kích thước tối đa là 5 MB.


Bạn không thể sử dụng phương thức get để tải hình ảnh lên, vì phương thức http get chỉ có thể gửi một lượng nhỏ dữ liệu.

Upload file lên server php

Đoạn mã này sẽ gửi dữ liệu hình ảnh đến upload.php , upload.php sẽ nhận dữ liệu hình ảnh và lưu vào máy chủ web.

Làm thế nào để nhận dữ liệu hình ảnh và lưu hình ảnh trong upload.php?

upload.php sẽ sử dụng $ _FILES để nhận dữ liệu hình ảnh và các thông tin hình ảnh khác, chẳng hạn như kích thước hình ảnh, loại hình ảnh và tên hình ảnh.

upload.php đã nhận được dữ liệu hình ảnh, nó sẽ lưu hình ảnh đã tải lên này vào một đường dẫn tạm thời, chúng ta sẽ sử dụng move_uploaded_fil () để di chuyển tệp tạm thời này đến thư mục đích của chúng ta.

Đảm bảo rằng tệp được tải lên là hình ảnh

Để tải lên hình ảnh, chúng ta nên đảm bảo rằng tệp tải lên là một hình ảnh, chúng ta nên kiểm tra tên tệp hoặc loại mime của tệp.

        $allowed = array("jpg" => "image/jpg", "jpeg" => "image/jpeg", "gif" => "image/gif", "png" => "image/png");
        $filename = $_FILES["photo"]["name"];
        $filetype = $_FILES["photo"]["type"];
        $filesize = $_FILES["photo"]["size"];
    
        // Xác minh phần mở rộng tệp
        $ext = pathinfo($filename, PATHINFO_EXTENSION);
        if(!array_key_exists($ext, $allowed)) die("Lỗi: Vui lòng chọn định dạng tệp hợp lệ.");

Đảm bảo kích thước tệp hợp lệ

Chúng tôi nên giới hạn kích thước tối đa của hình ảnh, điều này rất hữu ích cho máy chủ web của bạn.

         $maxsize = 5 * 1024 * 1024;
        if($filesize > $maxsize) die("Lỗi: Kích thước tệp lớn hơn giới hạn cho phép.");

Lưu hình ảnh đã tải lên

Trong ví dụ này, chúng tôi sẽ tải hình ảnh lên thư mục tải lên , chúng tôi có thể move_uploaded_file() để lưu các tệp đã tải lên.

Với PHP việc tải tệp lên máy chủ khá dễ dàng. Tuy nhiên thì càng dễ thì càng đi kèm với một số nguy hiểm, vì vậy mà hãy cẩn thận nhé!

Khi ta upload một file lên thì trên Server sẽ nhận được 5 thông số cho một file, và PHP sẽ dựa vào các thông số đó để tiến hành upload, các thông số đó là:

  • name: Tên của file bạn upload
  • type: Kiểu file mà bạn upload (hình ảnh, word, …)
  • tmp_name: Đường dẫn đến file upload ở client
  • error: Trạng thái của file bạn upload, 0 => không có lỗi
  • size: Kích thước của file bạn upload

Nội Dung

  • 1. Tạo một biểu mẫu HTML
  • 2. File PHP
  • 3. Kiểm tra tồn tại của file trong PHP
  • 4. Giới hạn loại tệp và giới hạn kích thước tệp
  • 5. Hoàn thành file PHP để tải hình ảnh

1. Tạo một biểu mẫu HTML

Đầu tiên ta sẽ phải tạo một biểu mẫu HTML cho người dùng chọn tệp. Để upload file lên Server thì ban phải sử dụng form có thuộc tính enctype=”multipart/form-data” và phương thức POST, thẻ input sẽ có type=”file”.




Chọn hình ảnh để tải lên:

Một số quy tắc cần tuân theo cho biểu mẫu HTML ở trên:

  • Đảm bảo rằng biểu mẫu sử dụng method = “post”
  • Biểu mẫu cũng cần thuộc tính sau: enctype = “multipart / form-data”. Nó chỉ định loại nội dung sẽ sử dụng khi gửi biểu mẫu

Nếu không có các yêu cầu ở trên, quá trình tải lên tệp sẽ không hoạt động.

Biểu mẫu ở trên gửi dữ liệu đến một tệp có tên “upload.php”, tệp này chúng ta sẽ tạo tiếp theo.

2. File PHP

Ta sẽ tạo một file là upload.php và code để tải tệp lên:

Mình sẽ giải thích một số câu lệnh:

  • $target_dir = “uploads /” – chỉ định thư mục nơi tệp sẽ được đặt
  • $target_file chỉ định đường dẫn của tệp sẽ được tải lên
  • $uploadOk = 1 chưa được sử dụng (sẽ được sử dụng sau)
  • $imageFileType giữ phần mở rộng tệp của tệp (chữ thường)
  • Tiếp theo, kiểm tra xem file ảnh là ảnh thật hay ảnh giả

Lưu ý

Bạn sẽ cần tạo một thư mục mới có tên “uploads” trong thư mục chứa tệp “upload.php”. Các tệp đã tải lên sẽ được lưu ở đó.

3. Kiểm tra tồn tại của file trong PHP

Chúng ta sẽ kiểm tra tệp đã tồn tại trong thư mục uploads hay chưa. Nếu có, một thông báo lỗi sẽ hiển thị và $uploadOk được đặt thành 0:

// kiểm tra tồn tại của file
if (file_exists($target_file)) {
  echo "Xin lỗi, tệp đã tồn tại.";
  $uploadOk = 0;
}
4. Giới hạn loại tệp và giới hạn kích thước tệp

Trường nhập tệp trong biểu mẫu HTML của chúng ta ở trên được đặt tên là “fileToUpload”. Bây giờ, chúng ta muốn kiểm tra kích thước của tệp. Nếu tệp lớn hơn 500KB, một thông báo lỗi sẽ hiển thị và $uploadOk được đặt thành 0:

//kiểm tra kích thước file
if ($_FILES["fileToUpload"]["size"] > 500000) {
  echo "Xin lỗi, tệp của bạn quá lớn.";
  $uploadOk = 0;
}

Đoạn mã dưới đây chỉ cho phép người dùng tải lên các tệp JPG, JPEG, PNG và GIF. Tất cả các loại tệp khác đều đưa ra thông báo lỗi trước khi đặt $uploadOk thành 0:

// Cho phép các định dạng tệp nhất định
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
  echo "Xin lỗi, chỉ cho phép các tệp JPG, JPEG, PNG & GIF.";
  $uploadOk = 0;
}
5. Hoàn thành file PHP để tải hình ảnh

Các bạn có thể ghép các phần trên lại để thành một file upload.php hoàn chỉnh. Và nó sẽ tương tự như sau:

 500000) {
  echo "Xin lỗi, tệp của bạn quá lớn.";
  $uploadOk = 0;
}

// Cho phép các định dạng tệp nhất định
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
  echo "Xin lỗi, chỉ cho phép các tệp JPG, JPEG, PNG & GIF.";
  $uploadOk = 0;
}

// Kiểm tra xem $ uploadOk có được đặt thành 0 do lỗi không
if ($uploadOk == 0) {
  echo "Xin lỗi, tệp của bạn không được tải lên.";
//nếu mọi thứ đều ổn, hãy cố gắng tải tệp lên
} else {
  if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
    echo "Tập tin ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). "đã được tải lên.";
  } else {
    echo "Xin lỗi, đã xảy ra lỗi khi tải tệp của bạn lên.";
  }
}
?>

Lưu ý

Nếu bạn muốn trang của mình tự reset lại thì các bạn có thể thêm đoạn code sau vào cuối file upload.php:

echo header("refresh: 5; url = http://localhost/index.php");
exit();

Trong đó:

  • refresh: 5 là thời gian mà trang sẽ tự động tải lại và ở đây thời gian là 5s.
  • url = http://localhost/index.php là trang mà sẽ tải lại về sau 5s. Ở đây chính là file index.php.