Làm cách nào để tạo tệp tải lên trong PHP?

Tải lên tệp là tính năng được sử dụng nhiều nhất trong các ứng dụng web. PHP cung cấp một cách dễ dàng để tải tệp lên máy chủ. Với PHP, bạn có thể tải tệp hoặc hình ảnh lên máy chủ bằng cách viết mã tối thiểu. Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách tải tệp lên bằng PHP và xây dựng tập lệnh PHP để tải tệp lên thư mục trên máy chủ. Với tập lệnh tải lên tệp PHP ví dụ này, bạn có thể tải tất cả các loại tệp bao gồm cả hình ảnh lên máy chủ bằng PHP

Tải lên biểu mẫu HTML

Lúc đầu, hãy xác định các phần tử biểu mẫu HTML để cho phép người dùng chọn tệp họ muốn tải lên
Bảo đảm

thẻ chứa các thuộc tính sau
  • phương pháp = "đăng"
  • enctype="multipart/form-data"

Ngoài ra, đảm bảo thẻ chứa thuộc tính type="file"

    Select File to Upload:
    
    

Biểu mẫu tải lên tệp ở trên sẽ được gửi tới tập lệnh phía máy chủ (tải lên. php) để tải tệp đã chọn lên máy chủ

Tải lên tệp bằng PHP (tải lên. php)

tải lên này. tệp php chứa mã phía máy chủ để xử lý quá trình tải tệp lên bằng PHP

  • PHP cung cấp một hàm tích hợp có tên là move_uploaded_file() để di chuyển một tệp đã tải lên đến một vị trí mới. Sử dụng chức năng move_uploaded_file(), chúng tôi có thể tải tệp lên bằng PHP
  • Trong biến $targetDir, chỉ định đường dẫn thư mục tải lên mong muốn nơi tệp đã tải lên sẽ được lưu trữ trên máy chủ
  • Trong biến $allowTypes, chỉ định loại tệp ở định dạng mảng mà bạn muốn cho phép tải lên
  • Sử dụng hàm PHP move_uploaded_file() để tải tệp lên máy chủ
$statusMsg = '';

//file upload path
$targetDir = "uploads/";
$fileName = basename($_FILES["file"]["name"]);
$targetFilePath = $targetDir . $fileName;
$fileType = pathinfo($targetFilePath,PATHINFO_EXTENSION);

if(isset($_POST["submit"]) && !empty($_FILES["file"]["name"])) {
    //allow certain file formats
    $allowTypes = array('jpg','png','jpeg','gif','pdf');
    if(in_array($fileType, $allowTypes)){
        //upload file to server
        if(move_uploaded_file($_FILES["file"]["tmp_name"], $targetFilePath)){
            $statusMsg = "The file ".$fileName. " has been uploaded.";
        }else{
            $statusMsg = "Sorry, there was an error uploading your file.";
        }
    }else{
        $statusMsg = 'Sorry, only JPG, JPEG, PNG, GIF, & PDF files are allowed to upload.';
    }
}else{
    $statusMsg = 'Please select a file to upload.';
}

//display status message
echo $statusMsg;
?>

Bạn có muốn nhận trợ giúp triển khai hay sửa đổi hoặc nâng cao chức năng của tập lệnh này không?

Tải lên các tệp, hình ảnh và video bằng PHP dễ dàng như thêm một vài tập lệnh. Hướng dẫn này sẽ chỉ cho bạn hai cách khác nhau về cách thêm chức năng tải tệp php lên trang web của bạn

  • – Đây là cách đơn giản nhất để thêm trình tải lên PHP vào dịch vụ của bạn. Ưu điểm là bạn có toàn quyền kiểm soát các tệp được tải lên
  • – Đây là một cách dễ dàng hơn để thêm chức năng tải lên PHP. Ưu điểm là bạn không phải quản lý hậu trường cơ sở hạ tầng tải lên tệp phức tạp

Hãy bắt đầu với một số ví dụ đơn giản

Mục lục

Tải lên tệp PHP – Cách đơn giản

Để bắt đầu, chúng ta sẽ tạo như sau

1. Biểu mẫu HTML

Trước tiên, chúng tôi sẽ tạo một biểu mẫu HTML mà người dùng sẽ thấy khi họ muốn tải tệp lên. Tạo một thư mục mới cho dự án ví dụ này và trong đó, tạo một tệp index.html với mã sau




    
    PHP File Upload


    
Upload a File:

Một vài điều quan trọng cần lưu ý trong ví dụ trên

  • action="fileUploadScript.php" – Điều này tham chiếu đến tập lệnh PHP sẽ xử lý tệp tải lên trên chương trình phụ trợ
  • method="post" – Điều này cho biết hành động của trình duyệt mà biểu mẫu sẽ sử dụng khi gửi tệp đến máy chủ (đối với tải lên, đây hầu như luôn là hành động POST, đôi khi là PUT)
  • enctype="multipart/form-data" – Điều này xác định loại nội dung mà biểu mẫu gửi

Tiếp theo, mở thiết bị đầu cuối của bạn và từ thư mục nơi bạn đã tạo tệp, khởi động máy chủ PHP

Làm cách nào để tạo tệp tải lên trong PHP?

Sau đó, mở trình duyệt web của bạn và truy cập

 4000000) {
        $errors[] = "File exceeds maximum size (4MB)";
      }

      if (empty($errors)) {
        $didUpload = move_uploaded_file($fileTmpName, $uploadPath);

        if ($didUpload) {
          echo "The file " . basename($fileName) . " has been uploaded";
        } else {
          echo "An error occurred. Please contact the administrator.";
        }
      } else {
        foreach ($errors as $error) {
          echo $error . "These are the errors" . "\n";
        }
      }

    }
?>
0. Bạn sẽ thấy một cái gì đó như thế này

Làm cách nào để tạo tệp tải lên trong PHP?

2. Tập lệnh tải lên tệp PHP

Tiếp theo, chúng tôi sẽ xử lý phần phụ trợ của tệp tải lên. Đầu tiên, trong cùng một thư mục, hãy tạo một thư mục mới có tên là uploads. Đây sẽ là nơi tập lệnh của chúng tôi sẽ lưu các tệp

Sau đó, trong cùng thư mục với chỉ mục. html, tạo một tệp có tên fileUploadScript. php. Lưu ý rằng đây là cùng tên với thuộc tính hành động trong biểu mẫu. Sau đó thêm mã này

 4000000) {
        $errors[] = "File exceeds maximum size (4MB)";
      }

      if (empty($errors)) {
        $didUpload = move_uploaded_file($fileTmpName, $uploadPath);

        if ($didUpload) {
          echo "The file " . basename($fileName) . " has been uploaded";
        } else {
          echo "An error occurred. Please contact the administrator.";
        }
      } else {
        foreach ($errors as $error) {
          echo $error . "These are the errors" . "\n";
        }
      }

    }
?>

Một vài điều cần lưu ý

  • Khóa được sử dụng để truy cập tệp từ đối tượng
     4000000) {
            $errors[] = "File exceeds maximum size (4MB)";
          }
    
          if (empty($errors)) {
            $didUpload = move_uploaded_file($fileTmpName, $uploadPath);
    
            if ($didUpload) {
              echo "The file " . basename($fileName) . " has been uploaded";
            } else {
              echo "An error occurred. Please contact the administrator.";
            }
          } else {
            foreach ($errors as $error) {
              echo $error . "These are the errors" . "\n";
            }
          }
    
        }
    ?>
    
    1 khớp với thuộc tính tên được sử dụng trong biểu mẫu
  •  4000000) {
            $errors[] = "File exceeds maximum size (4MB)";
          }
    
          if (empty($errors)) {
            $didUpload = move_uploaded_file($fileTmpName, $uploadPath);
    
            if ($didUpload) {
              echo "The file " . basename($fileName) . " has been uploaded";
            } else {
              echo "An error occurred. Please contact the administrator.";
            }
          } else {
            foreach ($errors as $error) {
              echo $error . "These are the errors" . "\n";
            }
          }
    
        }
    ?>
    
    2 – Đây là tên của tệp thực tế
  •  4000000) {
            $errors[] = "File exceeds maximum size (4MB)";
          }
    
          if (empty($errors)) {
            $didUpload = move_uploaded_file($fileTmpName, $uploadPath);
    
            if ($didUpload) {
              echo "The file " . basename($fileName) . " has been uploaded";
            } else {
              echo "An error occurred. Please contact the administrator.";
            }
          } else {
            foreach ($errors as $error) {
              echo $error . "These are the errors" . "\n";
            }
          }
    
        }
    ?>
    
    3 – Đây là kích thước của tệp tính bằng byte
  •  4000000) {
            $errors[] = "File exceeds maximum size (4MB)";
          }
    
          if (empty($errors)) {
            $didUpload = move_uploaded_file($fileTmpName, $uploadPath);
    
            if ($didUpload) {
              echo "The file " . basename($fileName) . " has been uploaded";
            } else {
              echo "An error occurred. Please contact the administrator.";
            }
          } else {
            foreach ($errors as $error) {
              echo $error . "These are the errors" . "\n";
            }
          }
    
        }
    ?>
    
    4 – Đây là tệp tạm thời nằm trong thư mục
     4000000) {
            $errors[] = "File exceeds maximum size (4MB)";
          }
    
          if (empty($errors)) {
            $didUpload = move_uploaded_file($fileTmpName, $uploadPath);
    
            if ($didUpload) {
              echo "The file " . basename($fileName) . " has been uploaded";
            } else {
              echo "An error occurred. Please contact the administrator.";
            }
          } else {
            foreach ($errors as $error) {
              echo $error . "These are the errors" . "\n";
            }
          }
    
        }
    ?>
    
    5 của máy chủ
  •  4000000) {
            $errors[] = "File exceeds maximum size (4MB)";
          }
    
          if (empty($errors)) {
            $didUpload = move_uploaded_file($fileTmpName, $uploadPath);
    
            if ($didUpload) {
              echo "The file " . basename($fileName) . " has been uploaded";
            } else {
              echo "An error occurred. Please contact the administrator.";
            }
          } else {
            foreach ($errors as $error) {
              echo $error . "These are the errors" . "\n";
            }
          }
    
        }
    ?>
    
    6 – Điều này lấy phần mở rộng tệp từ tên tệp
  •  4000000) {
            $errors[] = "File exceeds maximum size (4MB)";
          }
    
          if (empty($errors)) {
            $didUpload = move_uploaded_file($fileTmpName, $uploadPath);
    
            if ($didUpload) {
              echo "The file " . basename($fileName) . " has been uploaded";
            } else {
              echo "An error occurred. Please contact the administrator.";
            }
          } else {
            foreach ($errors as $error) {
              echo $error . "These are the errors" . "\n";
            }
          }
    
        }
    ?>
    
    7 – Đây là nơi các tệp sẽ được lưu trữ trên máy chủ. Trong đoạn script trên, nó được đặt thành thư mục làm việc hiện tại

Cũng lưu ý rằng trong đoạn mã trên, chúng tôi xác thực tệp tải lên bằng cách kiểm tra cả loại và kích thước tệp. (Chỉ các tệp png và jpeg nhỏ hơn 4 MB)

Bây giờ có một số bước cuối cùng trước khi chúng tôi có thể bắt đầu tải tệp lên

  • Chuyển đến thư mục
     4000000) {
            $errors[] = "File exceeds maximum size (4MB)";
          }
    
          if (empty($errors)) {
            $didUpload = move_uploaded_file($fileTmpName, $uploadPath);
    
            if ($didUpload) {
              echo "The file " . basename($fileName) . " has been uploaded";
            } else {
              echo "An error occurred. Please contact the administrator.";
            }
          } else {
            foreach ($errors as $error) {
              echo $error . "These are the errors" . "\n";
            }
          }
    
        }
    ?>
    
    8 của bạn và làm cho nó có thể ghi được bằng cách chạy.
     4000000) {
            $errors[] = "File exceeds maximum size (4MB)";
          }
    
          if (empty($errors)) {
            $didUpload = move_uploaded_file($fileTmpName, $uploadPath);
    
            if ($didUpload) {
              echo "The file " . basename($fileName) . " has been uploaded";
            } else {
              echo "An error occurred. Please contact the administrator.";
            }
          } else {
            foreach ($errors as $error) {
              echo $error . "These are the errors" . "\n";
            }
          }
    
        }
    ?>
    
    9
  • Đảm bảo rằng tệp
    max_file_uploads = 20
    upload_max_filesize = 2M
    post_max_size = 8M
    
    0 của bạn được định cấu hình chính xác để xử lý tệp tải lên (Mẹo. để tìm php của bạn. ini, hãy chạy
    max_file_uploads = 20
    upload_max_filesize = 2M
    post_max_size = 8M
    
    1)
max_file_uploads = 20
upload_max_filesize = 2M
post_max_size = 8M

Cuối cùng, nếu bây giờ bạn khởi động máy chủ PHP và truy cập localhost. 1234, sau đó tải tệp lên, bạn sẽ thấy tệp được lưu trong thư mục tải lên

Hãy nhớ rằng tất cả các mã ở trên yêu cầu các biện pháp phòng ngừa bảo mật bổ sung trước khi được phát hành trong sản xuất. Ví dụ: hiện tại không có kiểm tra nào để xem liệu người dùng có tải lên vi-rút được ngụy trang dưới dạng hình ảnh hay không. Để tìm hiểu thêm, hãy xem bài viết này mô tả nhiều cách khác nhau để xử lý các tệp tải lên an toàn

Tải tệp lên bằng Filestack

Trong ví dụ thứ hai này, chúng tôi sẽ sử dụng Filestack để tải tệp lên. Filestack là một API tải lên tệp nâng cao và dịch vụ lưu trữ tệp an toàn trên đám mây

Tại sao lại sử dụng bên thứ ba như Filestack thay vì tự mình xây dựng? . Điều này có thể giải phóng bạn để tập trung vào việc xây dựng các phần quan trọng khác trong ứng dụng của bạn

Và bạn có thể bắt đầu miễn phí. Filestack có gói miễn phí xử lý tối đa 100 lượt tải lên hàng tháng với dung lượng lưu trữ 1GB và băng thông 1GB. Nếu bạn cần vượt quá số tiền đó, họ sẽ đưa ra mức giá phù hợp với việc sử dụng

Vậy hãy bắt đầu

1. Đăng ký tài khoản Filestack

Làm cách nào để tạo tệp tải lên trong PHP?

Đầu tiên, chúng tôi sẽ đăng ký tài khoản Filestack. Truy cập trang đăng ký của họ và sau khi bạn đăng nhập, hãy lấy Khóa API mà bạn sẽ sử dụng trong các bước sau

2. Bắt đầu tải lên

Bây giờ chúng ta đã có thư viện Filestack, hãy tích hợp tiện ích tải lên tệp JavaScript của chúng, tiện ích này cho phép người dùng của bạn kết nối với nhiều nguồn khác nhau để tải lên từ đó. Ví dụ: nếu họ muốn tải lên từ một URL hoặc từ phương tiện truyền thông xã hội. Chỉ cần thay thế nội dung của chỉ mục. html với những điều sau đây




    
    PHP File Upload


    
    
    
    

Sau đó, mở trang của bạn rồi tải tệp lên bằng tiện ích tải lên. Sau khi tải lên, bạn sẽ có thể đăng nhập vào bảng điều khiển Filestack của mình và xem tệp mới tải lên của mình

Làm cách nào để tạo tệp tải lên trong PHP?

Và đó là nó. Bạn thậm chí không cần máy chủ để xử lý tệp, điều này tốt hơn cho khả năng mở rộng, bảo mật và bảo trì

Thư viện Filestack PHP (tùy chọn)

Ví dụ trên bao gồm ví dụ đơn giản nhất về tải tệp lên bằng Filestack. Tuy nhiên, điều gì sẽ xảy ra nếu bạn muốn truy cập tệp trên máy chủ của mình để chạy một số loại xử lý hậu kỳ, chẳng hạn như kiểm tra xem một hình ảnh có an toàn cho công việc không? . Chúng ta sẽ sử dụng Composer để cài đặt thư viện Filestack PHP. Nếu bạn chưa có Trình soạn thảo, bạn có thể cài đặt nó bằng cách đi tới thư mục bạn đã tạo ban đầu và chạy (xem phần này để biết tài liệu chính thức)

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

Sau khi thực hiện các thao tác trên, bạn sẽ có thể xem đầu ra của Composer bằng cách chạy _____14_______2

Sau đó chạy

max_file_uploads = 20
upload_max_filesize = 2M
post_max_size = 8M
3 để cài đặt Filestack SDK

Bây giờ chúng ta đã có thư viện Filestack, hãy tạo một tập lệnh PHP mới để kiểm tra xem một tệp được tải lên cụ thể có an toàn cho công việc không. Tạo một tệp mới có tên là tệpUploadFilestack. php và thêm phần sau (đảm bảo thay đổi các biến YOUR_API_KEY, YOUR_SECURITY_SECRET và YOUR_FILE_HANDLE)

getTags($file_handle);

  # get tags with filelink
  $filelink = new Filelink($file_handle, YOUR_API_KEY, $security);

  $json_result = $filelink->getTags();

  # get safe for work flag with filelink
  $json_result = $filelink->getSafeForWork();
?>

Khi tập lệnh này được chạy, kết quả kiểm tra an toàn cho công việc sẽ được lưu trong biến

max_file_uploads = 20
upload_max_filesize = 2M
post_max_size = 8M
4. Và đó chỉ là một ví dụ. Sử dụng Filestack PHP SDK cho phép bạn thực hiện nhiều tác vụ khác nhau trên các tệp đã tải lên của mình. Kiểm tra các ví dụ khác

  • Chuyển đổi tệp trước khi tải lên
  • Kiểm tra xem tệp tải lên có “an toàn cho công việc” không
  • Chuyển mã video hoặc âm thanh đã tải lên
  • Chuyển đổi tệp tải lên thành pdf
  • Và nhiều hơn nữa…

Ngoài ra, nếu bạn muốn xem thêm các ví dụ về cách tích hợp bộ chọn tệp tải lên vào một biểu mẫu, hãy xem các liên kết này

  • Tải lên hình ảnh
  • mở bộ chọn
  • Mở bộ chọn ở chế độ nội tuyến
  • Cắt hình ảnh
  • Xem trước tệp

Tóm lược

Bây giờ bạn đã biết cách thực hiện tải lên tệp PHP theo hai cách, bạn có thể dễ dàng thêm tính năng này vào trang web hoặc ứng dụng của mình. Nếu việc xử lý các thách thức về khả năng mở rộng, bảo mật và bảo trì khi lưu trữ cơ sở hạ tầng tải tệp lên của riêng bạn có vẻ quá khó khăn, hãy để Filestack xử lý việc đó. Ngoài ra, hãy nhớ xem bài viết của chúng tôi về Tải lên tệp AJAX

Chức năng nào được sử dụng để tải tệp lên trong PHP?

enctype="multipart/form-data". Giá trị này đề cập đến loại nội dung của các tệp sẽ được chấp nhận để tải lên. Nó cũng cho biết loại mã hóa mà tập lệnh PHP sẽ sử dụng để tải lên. Giá trị multipart/form-data cho phép chúng tôi tải tệp lên bằng phương thức POST

PHP tải tệp lên ở đâu?

Theo mặc định, các tệp sẽ được lưu trữ trong thư mục tạm thời mặc định của máy chủ , trừ khi một vị trí khác đã được cung cấp với chỉ thị upload_tmp_dir trong php. ban đầu. Có thể thay đổi thư mục mặc định của máy chủ bằng cách đặt biến môi trường TMPDIR trong môi trường mà PHP chạy.

Kiểm soát tải lên tệp trong PHP là gì?

PHP cho phép bạn tải lên một hoặc nhiều tệp chỉ thông qua một vài dòng mã. Các tính năng tải lên tệp PHP cho phép bạn tải lên cả tệp văn bản và tệp nhị phân. Ngoài ra, bạn có thể có toàn quyền kiểm soát tệp sẽ được tải lên thông qua các chức năng vận hành tệp và xác thực PHP .

Làm cách nào để tạo một thư mục và tải lên một hình ảnh trong PHP?

Tải ảnh lên thư mục bằng php .
Trước tiên hãy thiết kế một biểu mẫu để tải ảnh lên. Làm cho File hiển thị. .
Chúng tôi ở đây bằng cách sử dụng css để có giao diện người dùng tốt hơn. tạo kiểu dáng tập tin. .
Bạn sẽ thấy giao diện sau khi mở màn hình tệp. html
Bây giờ hãy bắt đầu viết mã php. Vì vậy, thực hiện tải lên tập tin. .
Bây giờ chúng ta đã hoàn thành với mã