PHP 7 – Tải lên Tệp & Hình ảnh với Hướng dẫn Ví dụ

Bạn đang xem: tải lên tệp php 7

Đây là hướng dẫn tải lên và lưu trữ tệp PHP 7 từng bước. Trong hướng dẫn này, chúng ta sẽ học cách tải lên tệp và hình ảnh trong Cơ sở dữ liệu MySQL. và cách triển khai xác thực tải lên tệp trước khi gửi tệp đến máy chủ web.
Thế giới mạng chưa bao giờ là một nơi an toàn; một đội quân tin tặc Maleficent có thể lợi dụng mã của bạn để có thể gây ra những thiệt hại đáng kể cho ứng dụng php của bạn.

Trước khi tải tệp lên máy chủ, chúng tôi phải chắc chắn rằng quá trình xác thực tệp bắt buộc được thực hiện đúng cách. Nếu không xem xét các yếu tố bảo mật, chúng tôi có thể gặp rắc rối.

Mục tiêu Hướng dẫn Tải lên Tệp PHP 7:

  • Hiển thị bản xem trước hình ảnh trước khi tải lên
  • Đặt tất cả các hình ảnh đã tải lên vào một thư mục cụ thể
  • Lưu trữ đường dẫn hình ảnh trong cơ sở dữ liệu MySQL

Cùng với đó, chúng tôi cũng sẽ đề cập đến việc xác thực hình ảnh sau bằng cách sử dụng PHP 7:

  • Kiểm tra xem hình ảnh thực đã được tải lên chưa
  • Chỉ cho phép phần mở rộng tệp cụ thể như .jpg, .jpeg hoặc .png
  • Đảm bảo kích thước tệp không được vượt quá 2MB
  • Kiểm tra xem tệp đã tồn tại chưa

Bắt đầu

Khởi động MAMP hoặc XAMPP, tạo thư mục và cấu trúc tệp sau trong thư mục htdocs .

  \ - php-file-upload
  | - cấu hình
      | --- database.php
  | - img_dir
      | --- hình ảnh-1
      | --- hình ảnh-2
  | - file-upload.php
  | - index.php  

Tạo Cơ sở dữ liệu & amp; Bảng

Tạo cơ sở dữ liệu `database_name` .

Tạo `table_name` bên trong cơ sở dữ liệu.

Bạn có thể thực hiện lệnh sau để tạo các cột của bảng để lưu trữ hình ảnh trong cơ sở dữ liệu.

  TẠO BẢNG `user` (
  `id` int (11) KHÔNG ĐỦ,
  `file_path` varchar (255) KHÔNG ĐẦY ĐỦ
) ENGINE = InnoDB DEFAULT CHARSET = utf8;  

Tạo biểu mẫu tải lên tệp

Tạo một biểu mẫu HTML cho phép người dùng của chúng tôi chọn hình ảnh từ thiết bị cục bộ của họ giống với hình ảnh mà họ muốn lưu trữ trên máy chủ.

Loại đầu vào phải được đặt thành tệp cùng với thuộc tính tên.

Ngoài ra, hãy xác định thẻ method = ”post” enctype = ”multiart / form-data” .

  & lt; form action = "" method = "post" enctype = "Multiart / form-data" class = "mb-3" & gt;
  & lt; h3 class = "text-center mb-5" & gt; Tải lên Tệp trong PHP 7 & lt; / h3 & gt;

  & lt; div class = "user-image mb-3 text-center" & gt;
    & lt; div style = "width: 100px; height: 100px; Over: hidden; background: #cccccc; margin: 0 auto" & gt;
      & lt; img src = "..." class = "figure-img img-chất lỏng làm tròn" id = "imgPlaceholder" alt = "" & gt;
    & lt; / div & gt;
  & lt; / div & gt;

  & lt; div class = "custom-file" & gt;
    & lt; input type = "file" name = "fileUpload" class = "custom-file-input" id = "selectFile" & gt;
    & lt; label class = "custom-file-label" for = "selectFile" & gt; Chọn tệp & lt; / label & gt;
  & lt; / div & gt;

  & lt; button type = "submit" name = "submit" class = "btn btn-primary btn-block mt-4" & gt;
    Cập nhật dử liệu
  & lt; / nút & gt;  

Xem trước hình ảnh hiển thị

Bạn có thể hiển thị bản xem trước hình ảnh trước khi tải nó lên máy chủ với sự trợ giúp của jQuery.

Nhập liên kết jQuery CDN trước thẻ nội dung đóng.

  & lt;! - jQuery - & gt;
& lt; script src = "https://code.jquery.com/jquery-3.5.1.slim.min.js" & gt; & lt; / script & gt;  

Chúng tôi đã khai báo thẻ hình ảnh với thẻ src = ”” trống.

  & lt; img src = "..." id = "imgPlaceholder" alt = "" & gt;  

Hàm sau đây chuyển đổi chuỗi hình ảnh và đặt url base64 trong thẻ HTML img khi người dùng chọn hình ảnh.

Xem Thêm  Thuộc tính lặp lại nền CSS - lặp lại ảnh nền css

Đặt mã sau ngay sau thẻ tập lệnh jQuery CDN.

  & lt; script & gt;
    hàm readURL (đầu vào) {
      if (input.files & amp; & amp; input.files [0]) {
        var reader = new FileReader ();

        reader.onload = function (e) {
          $ ('# imgPlaceholder'). attr ('src', e.target.result);
        }

        // chuyển đổi chuỗi base64
        reader.readAsDataURL (input.files [0]);
      }
    }

    $ ("# selectFile"). change (function () {
      readURL (cái này);
    });
& lt; / script & gt;  

Cấu hình cơ sở dữ liệu

Thêm mã sau vào tệp config / database.php để tạo kết nối PHP 7 với cơ sở dữ liệu MySQL bằng phương thức PDO.

 // config / database.php

& lt;? php

    $ hostname = "localhost";
    $ tên người dùng = "root";
    $ password = "";

    thử {
        $ conn = new PDO ("mysql: host = $ hostname; dbname = php_crud", $ username, $ password);
        // đặt chế độ lỗi PDO thành ngoại lệ
        $ conn- & gt; setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION);
        // echo "Đã kết nối cơ sở dữ liệu thành công";
    } catch (PDOException $ e) {
        echo "Kết nối cơ sở dữ liệu không thành công:". $ e- & gt; getMessage ();
    }

? & gt;  

Xác thực tải lên tệp / hình ảnh trong PHP 7

Hãy để chúng tôi thêm xác thực đầu tiên của mình với sự trợ giúp của phương thức PHP file_exists () . Hiển thị thông báo lỗi cho người dùng nếu họ không chọn bất kỳ hình ảnh nào.

Để giải quyết các lỗi, chúng tôi thiết lập mảng $ resMessage với các thuộc tính status message . Chúng tôi sẽ hiển thị thông báo cho người dùng dựa trên phản hồi trên giao diện người dùng.

  if (! file_exists ($ _ FILES ["fileUpload"] ["tmp_name"])) {
    $ resMessage = array (
        "trạng thái" = & gt; "cảnh báo nguy hiểm",
        "tin nhắn" = & gt; "Chọn hình ảnh để tải lên."
    );
}  

Đoạn mã sau áp dụng xác thực cho phép tải lên loại tệp cụ thể như .jpg, jpeg và .png trên máy chủ. Bạn sẽ không được phép sử dụng các loại tệp khác và sẽ hiển thị thông báo lỗi nếu bạn làm như vậy.

  // Lấy phần mở rộng tệp
$ imageExt = strtolower (pathinfo ($ target_file, PATHINFO_EXTENSION));

// Loại tệp được phép
$ allowd_file_ext = array ("jpg", "jpeg", "png");

else if (! in_array ($ imageExt, $ allowd_file_ext)) {
    $ resMessage = array (
        "trạng thái" = & gt; "cảnh báo nguy hiểm",
        "tin nhắn" = & gt; "Các định dạng tệp được phép .jpg, .jpeg và .png."
    );
}  

Thiết lập giới hạn kích thước tệp hình ảnh bằng mã sau. Người dùng không thể cho phép tải lên hình ảnh có kích thước lớn hơn 2MB.

  else if ($ _FILES ["fileUpload"] ["size"] & gt; 2097152) {
    $ resMessage = array ("trạng thái" = & gt; "cảnh báo nguy hiểm",
        "tin nhắn" = & gt; "Tệp quá lớn. Kích thước tệp phải nhỏ hơn 2 megabyte."
    );
}  

Đoạn mã dưới đây sẽ kiểm tra xem tệp hiện tại đã được tải lên chưa.

  else if (file_exists ($ target_file)) {
    $ resMessage = array (
        "trạng thái" = & gt; "cảnh báo nguy hiểm",
        "tin nhắn" = & gt; "Tập tin đã tồn tại."
    );
}  

Tạo thư mục img_dir trong thư mục gốc của dự án tệp tải lên PHP của bạn, tại đây chúng tôi sẽ lưu trữ tất cả các hình ảnh đã tải lên.

  & lt;? php

    // Kết nối cơ sở dữ liệu
    bao gồm ("config / database.php");
    
    if (Isset ($ _ POST ["submit"])) {
        // Đặt thư mục vị trí hình ảnh
        $ target_dir = "img_dir /";
        // Lấy đường dẫn tệp
        $ target_file = $ target_dir. basename ($ _ FILES ["fileUpload"] ["name"]);

        if (! file_exists ($ _ FILES ["fileUpload"] ["tmp_name"])) {
            // Xác thực ở đây
        } khác {
            if (move_uploaded_file ($ _ FILES ["fileUpload"] ["tmp_name"], $ target_file)) {
                $ sql = "CHÈN VÀO người dùng (đường dẫn tệp) VALUES ('$ target_file')";
                $ stmt = $ conn- & gt; chuẩn bị ($ sql);
                 if ($ stmt- & gt; execute ()) {
                    $ resMessage = array (
                        "trạng thái" = & gt; "alert-thành công",
                        "tin nhắn" = & gt; "Đã tải lên hình ảnh thành công."
                    );
                 }
            } khác {
                $ resMessage = array (
                    "trạng thái" = & gt; "cảnh báo nguy hiểm",
                    "tin nhắn" = & gt; "Hình ảnh chưa được tải lên."
                );
            }
        }

    }

? & gt;  

Hoàn thành ví dụ tải lên tệp PHP 7

Bạn có thể tìm thấy ví dụ về mã tải lên tệp PHP hoàn chỉnh trong tệp file-upload.php .

 // file-upload.php

& lt;? php

    // Kết nối cơ sở dữ liệu
    bao gồm ("config / database.php");
    
    if (Isset ($ _ POST ["submit"])) {
        // Đặt thư mục vị trí hình ảnh
        $ target_dir = "img_dir /";
        // Lấy đường dẫn tệp
        $ target_file = $ target_dir. basename ($ _ FILES ["fileUpload"] ["name"]);
        // Nhận phần mở rộng tệp
        $ imageExt = strtolower (pathinfo ($ target_file, PATHINFO_EXTENSION));
        // Loại tệp được phép
        $ allowd_file_ext = array ("jpg", "jpeg", "png");
        

        if (! file_exists ($ _ FILES ["fileUpload"] ["tmp_name"])) {
           $ resMessage = array (
               "trạng thái" = & gt; "cảnh báo nguy hiểm",
               "tin nhắn" = & gt; "Chọn hình ảnh để tải lên."
           );
        } else if (! in_array ($ imageExt, $ allowd_file_ext)) {
            $ resMessage = array (
                "trạng thái" = & gt; "cảnh báo nguy hiểm",
                "tin nhắn" = & gt; "Các định dạng tệp được phép .jpg, .jpeg và .png."
            );
        } else if ($ _FILES ["fileUpload"] ["size"] & gt; 2097152) {
            $ resMessage = array (
                "trạng thái" = & gt; "cảnh báo nguy hiểm",
                "tin nhắn" = & gt; "Tệp quá lớn. Kích thước tệp phải nhỏ hơn 2 megabyte."
            );
        } else if (file_exists ($ target_file)) {
            $ resMessage = array (
                "trạng thái" = & gt; "cảnh báo nguy hiểm",
                "tin nhắn" = & gt; "Tập tin đã tồn tại."
            );
        } khác {
            if (move_uploaded_file ($ _ FILES ["fileUpload"] ["tmp_name"], $ target_file)) {
                $ sql = "CHÈN VÀO người dùng (đường dẫn tệp) VALUES ('$ target_file')";
                $ stmt = $ conn- & gt; chuẩn bị ($ sql);
                 if ($ stmt- & gt; execute ()) {
                    $ resMessage = array (
                        "trạng thái" = & gt; "alert-thành công",
                        "tin nhắn" = & gt; "Đã tải lên hình ảnh thành công."
                    );
                 }
            } khác {
                $ resMessage = array (
                    "trạng thái" = & gt; "cảnh báo nguy hiểm",
                    "tin nhắn" = & gt; "Hình ảnh chưa được tải lên."
                );
            }
        }

    }

? & gt;  

Bao gồm file-upload.php trong tệp index.html tại đây, chúng tôi đã xác định biểu mẫu tải lên tệp cùng với mảng thông báo.

  & lt;? php include ("file-upload.php"); ? & gt;

& lt;! doctype html & gt;
& lt; html lang = "vi" & gt;

& lt; đầu & gt;
  & lt; meta charset = "utf-8" & gt;
  & lt; meta name = "viewport" content = "width = device-width, initial-scale = 1, co-to-fit = no" & gt;
  & lt; link rel = "stylesheet" href = "https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" & gt;

  & lt; title & gt; Ví dụ Tải lên Hình ảnh PHP 7 & lt; / title & gt;
  & lt; phong cách & gt;
    .thùng đựng hàng {
      chiều rộng tối đa: 450px;
    }
  & lt; / style & gt;
& lt; / head & gt;

& lt; body & gt;

  & lt; div class = "container mt-5" & gt;
    & lt; form action = "" method = "post" enctype = "Multiart / form-data" class = "mb-3" & gt;
      & lt; h3 class = "text-center mb-5" & gt; Tải lên Tệp trong PHP 7 & lt; / h3 & gt;

      & lt; div class = "user-image mb-3 text-center" & gt;
        & lt; div style = "width: 100px; height: 100px; Over: hidden; background: #cccccc; margin: 0 auto" & gt;
          & lt; img src = "..." class = "figure-img img-chất lỏng làm tròn" id = "imgPlaceholder" alt = "" & gt;
        & lt; / div & gt;
      & lt; / div & gt;

      & lt; div class = "custom-file" & gt;
        & lt; input type = "file" name = "fileUpload" class = "custom-file-input" id = "selectFile" & gt;
        & lt; label class = "custom-file-label" for = "selectFile" & gt; Chọn tệp & lt; / label & gt;
      & lt; / div & gt;

      & lt; button type = "submit" name = "submit" class = "btn btn-primary btn-block mt-4" & gt;
        Cập nhật dử liệu
      & lt; / nút & gt;
    & lt; / form & gt;

    & lt;! - Hiển thị thông báo phản hồi - & gt;
    & lt;? php if (! blank ($ resMessage)) {? & gt;
    & lt; div class = "alert & lt;? php echo $ resMessage ['status']? & gt;" & gt;
      & lt;? php echo $ resMessage ['message']? & gt;
    & lt; / div & gt;
    & lt;? php}? & gt;
  & lt; / div & gt;

  & lt;! - jQuery - & gt;
  & lt; script src = "https://code.jquery.com/jquery-3.5.1.slim.min.js" & gt; & lt; / script & gt;

  & lt; script & gt;
    hàm readURL (đầu vào) {
      if (input.files & amp; & amp; input.files [0]) {
        var reader = new FileReader ();

        reader.onload = function (e) {
          $ ('# imgPlaceholder'). attr ('src', e.target.result);
        }

        reader.readAsDataURL (input.files [0]); // chuyển đổi thành chuỗi base64
      }
    }

    $ ("# selectFile"). change (function () {
      readURL (cái này);
    });
  & lt; / script & gt;
& lt; / body & gt;

& lt; / html & gt;  

tôi hy vọng bạn thích hướng dẫn này.

Xem Thêm  Câu lệnh SQL CASE với nhiều điều kiện - nhiều câu lệnh trường hợp trong sql


Xem thêm những thông tin liên quan đến chủ đề tải lên tập tin php 7

PHP 7: How to read and write files with PHP | Tutorial No. 24

  • Tác giả: WebDevHero
  • Ngày đăng: 2018-06-08
  • Đánh giá: 4 ⭐ ( 9313 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: In this tutorial we will learn how to read text from files with PHP. Also we will write text into files and handle csv-files.
    The following functions will be part of this series:
    fopen(), fclose(), fwrite() and fread() fgetcsv() and fputcsv().

    LINKEDIN: https://www.linkedin.com/in/philipp-mertgen-758513153/

    PORTFOLIO: http://phil-mertgen.com/

    GITHUB: https://github.com/Pmertgen

    PHP is a server-side scripting language designed primarily for web development but also used as a general-purpose programming language. Originally created by Rasmus Lerdorf in 1994,

    PHP code may be embedded into HTML, or it can be used in combination with various web template systems ,web content management systems and web frameworks.

    Source: https://www.tutorialspoint.com/php/php_introduction.htm

Tải lên tập tin AJAX của PHP

  • Tác giả: qastack.vn
  • Đánh giá: 4 ⭐ ( 5263 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: [Tìm thấy giải pháp!] Bạn cần một tập lệnh chạy trên máy chủ để di chuyển tệp vào thư mục…

Chia sẻ source code tải lên nhiều tập tin, file bằng Javascript và PHP

  • Tác giả: sourcecodec.net
  • Đánh giá: 4 ⭐ ( 6121 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Chia sẻ source code tải lên nhiều tập tin, file bằng Javascript và PHPĐây là code một chương trình đơn giản mà sẽ dạy bạn làm thế nào để tạo một API tập

Cách để Mở tập tin PHP

  • Tác giả: www.wikihow.vn
  • Đánh giá: 4 ⭐ ( 6279 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Cách để Mở tập tin PHP. Đây là bài viết hướng dẫn bạn cách để mở và chỉnh sửa tập tin lập trình PHP trên máy tính Windows và Mac. Tải và cài đặt Notepad++. Đây là chương trình chỉnh sửa văn bản miễn phí của Windows, cho phép bạn mở tập tin…

Tải lên tệp với PHP – Upload file

  • Tác giả: laptrinhtudau.com
  • Đánh giá: 4 ⭐ ( 6086 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Tải lên tệp với PHP – Upload file – Lập Trình Từ Đầu 2 PHP Nâng Cao

Bài 22: 2 Bước Upload File lên Server trong PHP

  • Tác giả: laptrinhvienphp.com
  • Đánh giá: 5 ⭐ ( 8201 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Trong khuôn khổ bài học này, chúng ta sẽ tìm hiểu cách upload file lên server từ xa bằng cách sử dụng biểu mẫu HTML và PHP đơn giản.

Chia sẻ code tải tập tin tải lên bằng php ( Full code PHP)

  • Tác giả: megacode.vn
  • Đánh giá: 5 ⭐ ( 8178 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Ứng dụng này sẽ dạy bạn làm thế nào các tập tin tải lên bằng php như các máy chủ bên ngôn ngữ kịch bản và mysql như cơ sở dữ liệu. chương trình tải…

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

Xem Thêm  Phá vỡ PHP - ngắt php cho vòng lặp

By ads_php