Hướng dẫn php upload file

Trong bài này, chúng ta sẽ tìm hiểu về cách upload file lên web server trong PHP. Để học tốt bài này, các bạn cần đọc lại bài Cài đặt môi trường lập trình Web PHP với XAMPP để biết cách chạy ứng dụng web PHP với XAMPP.

1. Tạo html form để upload file

Chúng ta có thể tạo một html form để upload file với thuộc tính enctype.




  Upload file to gochocit.com!




Select a file to upload:


Hướng dẫn php upload file

Trong ví dụ trên, html form có thuộc tính enctype="multipart/form-data". Với thuộc tính này, html form cho phép chúng ta upload file lên web server. Thẻ với type=”file” cho phép chúng ta chọn đường dẫn của file cần upload. Sau khi nhấn nút Upload thì dữ liệu trong html form sẽ được gửi đến file upload.php để xử lý.

2.1. Cấu hình upload file trong php.ini

Để upload file lên web server thì cần đảm bảo cấu hình PHP cho phép upload file. Mở file php.ini (xem hướng dẫn ở phần Thay đổi default timezone trong PHP), tìm đến cấu hình file_uploads và gán giá trị là On.

file_uploads = On

2.2. Xử lý upload file với PHP

Bên dưới là một đoạn code của file upload.php để xử lý file được upload.


Khi upload một file lên web server, tất cả thông tin về file sẽ được lưu trữ trong biến $_FILES. Giả sử, chúng ta upload file gochocit.txt như hình bên dưới.

Hướng dẫn php upload file

Biến $_FILES là một mảng kết hợp có cấu trúc như sau:

array(1) { 
  ["fileUpload"]=> array(5) { 
    ["name"]=> string(12) "gochocit.txt" 
    ["type"]=> string(10) "text/plain" 
    ["tmp_name"]=> string(24) "C:\xampp\tmp\phpD335.tmp" 
    ["error"]=> int(0) 
    ["size"]=> int(121) 
  } 
}

Trong đó,

fileUpload: là key của mảng tương ứng name của thẻ trong html form

name: tên của file được upload.

type: loại file tùy vào đuôi mở rộng của file, có thể là text/plain, image/jpg, image/png,…

tmp_name: là file tạm lưu trữ file được upload.

error: mã lỗi khi upload, nếu errror = 0 thì không lỗi.

size: kích thước file tính bằng byte.

Khi file đã được upload lên server, chúng ta có thể thực hiện các thao tác khác nhau trên file này:

– Kiểm tra file có bị lỗi không?

– Kiểm tra loại file upload có được phép không?

– Kiểm tra dung lượng của file có vượt quá giới hạn cho phép không?

– Kiểm tra file đã tồn tại trên server chưa?

– Lưu file vào một thư mục trên server.

– …

The uploaded file is error or no file selected.";
            die;
        }

        //2. Kiểm tra loại file upload có được phép không?
        if (!in_array($fileType, $allowtypes )) {
            echo "
Only allow for uploading .txt, .dat or .data files."; $allowUpload = false; } //3. Kiểm tra kích thước file upload có vượt quá giới hạn cho phép if ($_FILES["fileUpload"]["size"] > $maxfilesize) { echo "
Size of the uploaded file must be smaller than $maxfilesize bytes."; $allowUpload = false; } //4. Kiểm tra file đã tồn tại trên server chưa? if (file_exists($target_file)) { echo "
The file name already exists on the server."; $allowUpload = false; } if ($allowUpload) { //Lưu file vào thư mục được chỉ định trên server if (move_uploaded_file($_FILES["fileUpload"]["tmp_name"], $target_file)) { echo "
File ". basename( $_FILES["fileUpload"]["name"])." uploaded successfully."; echo "The file saved at " . $target_file; } else { echo "
An error occurred while uploading the file."; } } } } ?>

2.3. Lọc (filter) các file được upload

Chúng ta có 2 cách để lọc (filter) các file được upload lên web server.

Cách thứ 1 – Sử dụng thuộc tính accept trong thẻ

Select file to upload:


Cách thứ 2 – Upload file rồi kiểm tra loại file với PHP

//Lấy phần mở rộng của file (txt, jpg, png,...)
$fileType = pathinfo($target_file, PATHINFO_EXTENSION);
//Những loại file được phép upload
$allowtypes    = array('txt', 'dat', 'data');
//2. Kiểm tra loại file upload có được phép không?
if (!in_array($fileType, $allowtypes )) {
   echo "
Only allow for uploading .txt, .dat or .data files."; $allowUpload = false; }

3. Xử lý upload nhiều file với PHP

Chúng ta có thể upload nhiều file cùng một lúc với thẻ có thuộc tính multiple="multiple". Lưu ý: name của thẻ <input> phải có thêm dấu ngoặc vuông [], thể hiện là một mảng chứa nhiều file.




  Upload multiple files to gochocit.com!




Select one or more files to upload:


Chúng ta sẽ viết một file upload-multiple-files.php để xử lý upload nhiều file. Thông tin về các file sẽ được truy xuất từ $_FILES[‘fileUpload’] dưới dạng các mảng.

$_FILES[‘fileUpload’][‘name’]: chứa các tên file được upload.

$_FILES[‘fileUpload’][‘type’]: chứa các loại file được upload.

$_FILES[‘fileUpload’][‘tmp_name’]: chứa các vị trí lưu tạm các file.

$_FILES[‘fileUpload’][‘error’]: là mảng báo lỗi khi upload.

$_FILES[‘fileUpload’][‘size’]: chứa kích thước các file được upload.

Uploaded file $numfiles:
"; echo "Name: $names[$i]
"; echo "Temporary saved at: $tmp_names[$i]
"; echo "Size: $sizes[$i] bytes

"; } } echo "Number of uploaded files: " .$numfiles; } } ?>

Hướng dẫn php upload file

Kết quả các file được upload.

Hướng dẫn php upload file

Sau khi truy xuất đến từng file được upload, các bạn có thể thực hiện các thao tác trên từng file như bình thường.

  • Sử dụng hàm print_r, var_dump, var_export trong PHP
  • Biểu thức và thứ tự ưu tiên của các toán tử trong biểu thức
  • Thread là gì? Cách tạo Thread trong Java
  • Thư viện cmath và một số hàm toán học thông dụng trong C++
  • Cookie là gì? Sử dụng cookie trong PHP