Với PHP, thật dễ dàng để tải các file lên máy chủ. Tuy nhiên, cũng tiềm ẩn rất nhiều nguy hiểm, vì vậy hãy luôn cẩn thận khi cho phép tải file lên máy chủ!
Đầu tiên, đảm bảo rằng PHP được cấu hình để cho phép tải file lên máy chủ.
Trong file "php.ini" của bạn, tìm kiếm dòng cấu hình file_uploads
và thiết lập thành On như dưới đây:
file_uploads = On
Tiếp theo, tạo một biểu mẫu HTML cho phép người dùng chọn file hình ảnh họ muốn tải lên như sau:
<!DOCTYPE html>
<html>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
Select image to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload Image" name="submit">
</form>
</body>
</html>
Một số quy tắc cần tuân theo đối với biểu mẫu HTML để cho phép tải file lên máy chủ:
enctype="multipart/form-data"
. Nó chỉ định loại nội dung sẽ sử dụng khi gửi biểu mẫu.Không có các yêu cầu ở trên, bạn sẽ không thể sử dụng biểu mẫu để tải file lên máy chủ.
Những điều khác cần chú ý: Thuộc tính type="file"
của thẻ <input> hiển thị trường đầu vào dưới dạng điều khiển chọn file, với nút "Browse" sẽ nằm bên cạnh điều khiển đầu vào để người dùng chọn file.
Biểu mẫu ở trên sẽ gửi dữ liệu tới một file có tên là "upload.php", chúng tôi sẽ tạo file này ở phần tiếp theo.
File "upload.php" chứa mã để tải file lên server trông sẽ như sau:
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
?>
Giải thích các thành phần trong tập lệnh PHP:
$target_dir = "uploads/"
- chỉ định thư mục chứa file được tải lên.$target_file
- chỉ định đường dẫn của file sẽ được tải lên.$uploadOk = 1
- chưa được sử dụng (sẽ được sử dụng sau).$imageFileType
- chứa thông tin mở rộng của file (bằng chữ thường)$check
- kiểm tra xem file hình ảnh là hình ảnh thật hay hình ảnh giả.Lưu ý: Bạn sẽ cần tạo một thư mục mới có tên "uploads" trong thư mục chứa file "upload.php". Các tập tin tải lên sẽ được lưu ở đó.
Bây giờ chúng ta có thể thêm một số điều kiện để kiểm tra file như sau:
Đầu tiên, chúng tôi sẽ kiểm tra xem file đã tồn tại trong thư mục "uploads" chưa. Nếu file đã tồn tại, hiển thị thông báo lỗi và $uploadOk
được đặt thành 0:
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
Trường nhập file trong biểu mẫu HTML của chúng tôi ở trên có tên là "fileToUpload".
Bây giờ, chúng tôi muốn kiểm tra kích thước của file. Nếu file lớn hơn 500KB sẽ hiển thị thông báo lỗi và $uploadOk
được đặt thành 0:
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
Mã dưới đây chỉ cho phép người dùng tải lên các file có định dạng là JPG, JPEG, PNG và GIF. Tất cả các loại file khác sẽ đưa ra thông báo lỗi và thiết lập $uploadOk
thành 0:
// Allow certain file formats
if($imageFileType != "jpg" &&
$imageFileType != "png" &&
$imageFileType != "jpeg" &&
$imageFileType != "gif") {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
File "upload.php" hoàn chỉnh trông như thế này:
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" &&
$imageFileType != "png" &&
$imageFileType != "jpeg" &&
$imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>
Bạn có thể vui lòng tắt trình chặn quảng cáo ❤️ để hỗ trợ chúng tôi duy trì hoạt động của trang web.
Hướng dẫn lập trình PHP toàn tập sẽ giúp bạn từng bước tìm hiểu và nắm vững ngôn ngữ lập trình PHP.
Hướng dẫn cách truy xuất, lọc, sắp xếp dữ liệu MySQL trong PHP sử dụng MySQLi và PDO.
MySQL prepared statements trong PHP rất hữu ích để chống lại các cuộc tấn công SQL Injection.
Hướng dẫn này sẽ giúp bạn tìm hiểu cách thêm dữ liệu vào MySQL sử dụng MySQLi và PDO trong PHP.