Tải lên tệp PHP

Bằng cách sử dụng PHP, bạn có thể tải tệp lên máy chủ.

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

Cho phép người dùng tải tệp lên từ biểu mẫu rất hữu ích.

Vui lòng xem biểu mẫu HTML để tải tệp lên dưới đây:

<html>
<body>
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Tên tệp:</label>
<input type="file" name="file" id="file" /> 
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>

Vui lòng chú ý đến thông tin sau về biểu mẫu này:

Thuộc tính enctype của thẻ <form> quy định loại nội dung nào cần sử dụng khi gửi biểu mẫu. Khi biểu mẫu cần dữ liệu nhị phân, chẳng hạn như nội dung tệp, hãy sử dụng "multipart/form-data".

Thuộc tính type="file" của thẻ <input> quy định rằng cần xử lý đầu vào như một tệp. Ví dụ, khi xem trước trong trình duyệt, bạn sẽ thấy có một nút duyệt bên cạnh hộp nhập.

Ghi chú:Cho phép người dùng tải tệp lên là một rủi ro an toàn rất lớn. Chỉ nên cho phép người dùng đáng tin cậy thực hiện thao tác tải tệp lên.

Tạo vân bản tải lên

"upload_file.php" tệp chứa mã để tải tệp lên:

<?php
if ($_FILES["file"]["error"] > 0)
  {
  echo "Lỗi: " . $_FILES["file"]["error"] . "<br />";
  }
else
  {
  echo "Tải lên: " . $_FILES["file"]["name"] . "<br />";
  echo "Loại: " . $_FILES["file"]["type"] . "<br />";
  echo "Kích thước: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
  echo "Lưu trong: " . $_FILES["file"]["tmp_name"];
  }
?>

Bằng cách sử dụng mảng toàn cục $_FILES của PHP, bạn có thể upload tệp từ máy tính khách sang máy chủ từ xa.

Tham số đầu tiên là tên input của biểu mẫu, tham số thứ hai có thể là "name", "type", "size", "tmp_name" hoặc "error". Như vậy:

  • $_FILES["file"]["name"] - Tên tệp đã upload
  • $_FILES["file"]["type"] - Loại tệp đã upload
  • $_FILES["file"]["size"] - Kích thước của tệp đã upload, tính bằng byte
  • $_FILES["file"]["tmp_name"] - Tên bản sao tạm thời của tệp lưu trữ trên máy chủ
  • $_FILES["file"]["error"] - Mã lỗi do upload tệp gây ra

Đây là cách upload tệp rất đơn giản. Do考虑到安全因素,您应该增加有关哪些用户有权上传文件的限制。

Giới hạn upload

Trong đoạn mã này, chúng ta đã tăng cường các giới hạn upload tệp. Người dùng chỉ được upload các tệp .gif hoặc .jpeg, kích thước tệp phải nhỏ hơn 20 kb:

<?php
if ((($_FILES["file"]["type"] == "image/gif"))
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Lỗi: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Tải lên: " . $_FILES["file"]["name"] . "<br />";
    echo "Loại: " . $_FILES["file"]["type"] . "<br />";
    echo "Kích thước: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Lưu trong: " . $_FILES["file"]["tmp_name"];
    }
  }
else
  {
  echo "Tệp không hợp lệ";
  }
?>

Ghi chú:Đối với IE, việc nhận dạng loại tệp jpg phải là pjpeg, đối với FireFox, phải là jpeg.

Lưu tệp đã tải lên

Ví dụ trên đã tạo một bản sao tạm thời của tệp đã tải lên trong thư mục tạm thời PHP của máy chủ.

Tệp sao chép tạm thời này sẽ bị xóa khi lệnh脚本 kết thúc. Để lưu tệp đã tải lên, chúng ta cần sao chép nó đến vị trí khác:

<?php
if ((($_FILES["file"]["type"] == "image/gif"))
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Mã lỗi: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Tải lên: " . $_FILES["file"]["name"] . "<br />";
    echo "Loại: " . $_FILES["file"]["type"] . "<br />";
    echo "Kích thước: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Tệp tạm: " . $_FILES["file"]["tmp_name"] . "<br />";
    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Lưu trong: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Tệp không hợp lệ";
  }
?>

Skript trên đã kiểm tra xem tệp này có tồn tại hay không, nếu không tồn tại, tệp sẽ được sao chép vào thư mục được chỉ định.

Ghi chú:Ví dụ này đã lưu tệp vào thư mục mới có tên "upload".