Hướng dẫn lập trình xử lý Upload file trong PHP

Hướng dẫn lập trình xử lý Upload file trong PHP

Ở bài trước, chúng ta đã cùng nhau tìm hiểu về hướng dẫn lập trình xử lý Form trong PHP, để có thể xử lý dữ liệu người dùng nhập vào ra làm sao, lấy ra như thế nào. Ở bài này mình sẽ cùng các bạn tìm hiểu về Upload Form, một tính năng không thể thiếu trong các ứng dụng web ngày nay. Các bạn có thể bắt gặp upload file ở gmail với tính năng đính kèm tệp tin, tải ảnh lên facebook, …. và rất nhiều ứng dụng khác. Vì vậy đây là một phần không thể thiếu trong các kỹ năng lập trình bạn cần phải có, mình sẽ hướng dẫn các bạn có thể làm được một mã nguồn upload file cơ bản qua bài viết này.

Hướng dẫn lập trình xử lý Upload file trong PHP

Hướng dẫn lập trình xử lý Upload file trong PHP

Mở tính năng cho phép Upload của PHP

Điều đầu tiên là web service có hỗ trợ ngôn ngữ PHP của bạn cần bật tính năng cho phép trình duyệt gửi tập tin lên server thì mới có thể cho phép người dùng tải dữ liệu lên được. Thông thường khi các bạn đi thuê hosting linux của các nhà cung cấp hosting hiện nay thì tính năng này đều được mở. Còn nếu bạn chạy web service local ở máy tính của mình mở chưa được mở thì có thể làm như sau:

  1. Mở tập tin: php.ini lên, đây là tập tin thiết lập các tham số của PHP
  2. Đặt giá trị file_uploads sang On “file_uploads = On” để bật tính năng hỗ trợ Upload của PHP

Tạo giao diện Form tương tác với người dùng

Để có thể tạo được một form upload đơn giản ta cần có

  • Thuộc tính enctype=”multipart/form-data” ở trong thẻ <form mục đích của thuộc tính này để trình duyệt có thể hiểu và mã hóa dữ liệu thành nhiều phần.
  • Thẻ input có thuộc tính type = file để hiển thị một giao diện có nút chọn tập tin ở máy tính của người dùng

Code mẫu

Giao diện người dùng Form Upload

Giao diện người dùng Form Upload

Giao diện người dùng Form Upload

Xử lý lưu trữ tập tin từ Form gửi lên

Sau khi người dùng chọn tập tin và tiến hành bấm nút “Tải lên” bạn cần tạo một tập tin có tên “upload.php” để có thể nhận các thông tin từ trình duyệt gửi lên thông qua biến môi trường $_FILES. Từ biến này chúng ta có thể lấy được các thông tin cơ bản của một tập tin như sau:

  • $_FILES[‘uploadFile’][‘name’]; //Lấy tên tập tin
  • $_FILES[‘uploadFile’][‘type’]; //Định dạng của tập tin
  • $_FILES[‘uploadFile’][‘size’]; //Kích thước, dung lượng của tập tin

Các bước xây dựng một tiến trình xử lý upload file.

  1. Điều đầu tiên, các bạn cần kiểm tra xem người dùng đã bấm nút “Tải lên” hay chưa bằng cách kiểm tra biến $_POST
  2. Kiểm tra biến $_FILE xem người dùng đã chọn tập tin ở máy tính hay chưa.
  3. Thông thường các lập trình viên thường kiểm soát chặt chẽ các dữ liệu tải lên để nhằm mục đích bảo mật ứng dụng, tránh bị các hacker upload file virus, … gây ảnh hưởng xấu tới hệ thống. Ví dụ như khi upload ảnh thì chúng ta chỉ chấp nhận các tập tin có định dạng là các tập tin ảnh và đặt một mức kích thước tối đa mà người dùng có thể tải lên.
  4. Di chuyển tập tin ở nơi chứa các tập tin lưu tạm trong quá trình upload về nơi mà bạn muốn đặt.

Để cho các bạn dễ hiểu hơn 4 bước trên, mình sẽ làm một ví dụ mẫu cho phép người dùng tải các tập tin ảnh có dung lượng được tải lên tối đa là 10 MB.

Lưu ý:

  • Trong thực tế các ứng dụng PHP còn sử dụng các hàm kiểm tra xem có phải là hình ảnh thực sự hay không để đảm bảo tính an toàn cho ứng dụng. Bởi vì các hacker có thể giả mạo tập tin ảnh để upload các đoạn code độc hại phá hoại ứng dụng web của bạn.
  • Bạn cần tạo thư mục: images nằm ngang với tập tin upload.php, nếu bạn sử dụng hosting Linux thì cần phải CHMOD 777 cho thư mục images để ứng dụng có thể lưu trữ tập tin vào trong đó.

Kết luận

Như các bạn cũng biết, tính năng tải dữ liệu từ máy người dùng lên là một thành phần không thể thiếu trong mọi ứng dụng chạy trên nền web như hiện nay. Form upload trên mà mình giới thiệu là một cách truyền thống. Hiện nay các ứng dụng thường sử dụng Flash hoặc HTML5 để có thể tăng độ trải nghiệm của người dùng. Ví dụ như trong lúc tải tập tin lên thì có thanh trạng thái thông báo tình trạng % upload cho người dùng thì mình sẽ giới thiệu cho các bạn ở những bài viết sau nhé.