Hướng dẫn php file upload

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:
  


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.

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.

– …


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ẻ 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.


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

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.

  • Toán tử số học và toán tử quan hệ trong C++
  • Trường hợp Deadlock khi lập trình multithreading trong Java
  • Các loại toán tử [operator] trong PHP
  • Các toán tử [operators] trong Java
  • Chương trình tính giai thừa [factorial] trong Java

Chủ Đề