Tạo form upload file trong PHP
Upload file trong PHP
Upload file trong PHP là chức năng thường thấy và vô cùng cần thiết khi làm bất kỳ một ứng dụng website PHP nào.
Trong hướng dẫn này chúng ta sẽ học làm thế nào để tải lên các tệp trên máy chủ từ xa bằng cách sử dụng một giao diện bằng HTML đơn giản và PHP. Bạn có thể tải lên bất kỳ loại tệp tin như hình ảnh, video, tệp ZIP, tài liệu Microsoft Office, tệp PDF, cũng như tệp thi hành và nhiều loại tệp khác.
1. Tạo form HTML để upload file
Tại thư mục gốc của website, các bạn tạo 1 file đặt tên là form_upload.php có nội dung HTML tĩnh như sau
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Form upload file PHP</title>
</head>
<body>
<form action="form_upload.php" method="post" enctype="multipart/form-data">
<h2>Form Upload File PHP</h2>
<label for="fileSelect">Tên file:</label>
<input type="file" name="photo" id="fileSelect">
<input type="submit" name="submit" value="Upload file">
<p><strong>Ghi chú:</strong> Chỉ cho phép định dạng .jpg, .jpeg, .gif và kích thước tối đa tệp tin là 5MB.</p>
</form>
</body>
</html>
Ở đoạn code HTML tĩnh ở trên, các bạn thấy thuộc tính của form là
enctype="multipart/form-data"
Đây là thuộc tính bắt buộc bạn phải thêm vào form để có thể upload được file, nếu bạn không thêm vào thì sẽ không upload được.
Thuộc tính này đảm bảo rằng dữ liệu của form sẽ được encode lại thành định dạng MIME data để có thể upload được.
Khi chạy đoạn code HTML tĩnh trên ta sẽ được giao diện như sau

Form upload file trong php
Tiếp đến các bạn tạo 1 folder cùng cấp với file form_upload.php có tên là upload. Thư mục này chúng ta sẽ sử dụng để chứa file upload.
2. Thực thi việc upload file trong php
Ở phần này, chúng ta sẽ tiến hành viết code thực thi việc upload như sau
<?php
// Kiểm tra phương thức gửi form đi có phải là POST hay ko ?
if($_SERVER["REQUEST_METHOD"] == "POST"){
// Kiểm tra quá trình upload file có bị lỗi gì không ?
if(isset($_FILES["photo"]) && $_FILES["photo"]["error"] == 0){
// Mảng chưa định dạng file cho phép
$allowed = array("jpg" => "image/jpg", "jpeg" => "image/jpeg", "gif" => "image/gif", "png" => "image/png");
// Lấy thông tin file bao gồm tên file, loại file, kích cỡ file
$filename = $_FILES["photo"]["name"];
$filetype = $_FILES["photo"]["type"];
$filesize = $_FILES["photo"]["size"];
// Kiểm tra định dạng file .jpg, png,...
$ext = pathinfo($filename, PATHINFO_EXTENSION);
// Nếu không đúng định dạng file thì báo lỗi
if(!array_key_exists($ext, $allowed)) die("Lỗi : Vui lòng chọn đúng định dang file.");
// Cho phép kích thước tối đa của file là 5MB
$maxsize = 5 * 1024 * 1024;
// Nếu kích thước lớn hơn 5MB thì báo lỗi
if($filesize > $maxsize) die("Lỗi : Kích thước file lớn hơn giới hạn cho phép");
// Kiểm tra file ok hết chưa
if(in_array($filetype, $allowed)){
// Kiểm tra xem file đã tồn tại chưa, nếu rồi thì báo lỗi, không thì tiến hành upload
if(file_exists("upload/" . $_FILES["photo"]["name"])){
echo $_FILES["photo"]["name"] . " đã tồn tại";
} else{
// Hàm move_uploaded_file sẽ tiến hành upload file lên thư mục upload
move_uploaded_file($_FILES["photo"]["tmp_name"], "upload/" . $_FILES["photo"]["name"]);
// Thông báo thành công
echo "Upload file thành công";
}
} else{
echo "Lỗi : Có vấn đề xảy ra khi upload file";
}
} else{
echo "Lỗi: " . $_FILES["photo"]["error"];
}
}
?>
Ở mỗi dòng code trên, mình đều đã chú thích rất rõ để các bạn có thể hiểu được chức năng của từng dòng code, nên hy vọng các bạn không quá khó hiểu hen. Nếu có khó hiểu thì để lại bình luận bên dưới bài viết, mình sẽ giải đáp.
3. Toàn bộ đoạn code upload file trong php
Như vậy toàn bộ đoạn code tạo form upload file trong php sẽ như sau
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Form upload file trong PHP</title>
</head>
<body>
<?php
// Kiểm tra phương thức gửi form đi có phải là POST hay ko ?
if($_SERVER["REQUEST_METHOD"] == "POST"){
// Kiểm tra quá trình upload file có bị lỗi gì không ?
if(isset($_FILES["photo"]) && $_FILES["photo"]["error"] == 0){
// Mảng chưa định dạng file cho phép
$allowed = array("jpg" => "image/jpg", "jpeg" => "image/jpeg", "gif" => "image/gif", "png" => "image/png");
// Lấy thông tin file bao gồm tên file, loại file, kích cỡ file
$filename = $_FILES["photo"]["name"];
$filetype = $_FILES["photo"]["type"];
$filesize = $_FILES["photo"]["size"];
// Kiểm tra định dạng file .jpg, png,...
$ext = pathinfo($filename, PATHINFO_EXTENSION);
// Nếu không đúng định dạng file thì báo lỗi
if(!array_key_exists($ext, $allowed)) die("Lỗi : Vui lòng chọn đúng định dang file.");
// Cho phép kích thước tối đa của file là 5MB
$maxsize = 5 * 1024 * 1024;
// Nếu kích thước lớn hơn 5MB thì báo lỗi
if($filesize > $maxsize) die("Lỗi : Kích thước file lớn hơn giới hạn cho phép");
// Kiểm tra file ok hết chưa
if(in_array($filetype, $allowed)){
// Kiểm tra xem file đã tồn tại chưa, nếu rồi thì báo lỗi, không thì tiến hành upload
if(file_exists("upload/" . $_FILES["photo"]["name"])){
echo $_FILES["photo"]["name"] . " đã tồn tại";
} else{
// Hàm move_uploaded_file sẽ tiến hành upload file lên thư mục upload
move_uploaded_file($_FILES["photo"]["tmp_name"], "upload/" . $_FILES["photo"]["name"]);
// Thông báo thành công
echo "Upload file thành công";
}
} else{
echo "Lỗi : Có vấn đề xảy ra khi upload file";
}
} else{
echo "Lỗi: " . $_FILES["photo"]["error"];
}
}
?>
<form action="form_upload.php" method="post" enctype="multipart/form-data">
<h2>Form Upload File PHP</h2>
<label for="fileSelect">Tên file:</label>
<input type="file" name="photo" id="fileSelect">
<input type="submit" name="submit" value="Upload file">
<p><strong>Ghi chú:</strong> Chỉ cho phép định dạng .jpg, .jpeg, .gif và kích thước tối đa tệp tin là 5MB.</p>
</form>
</body>
</html>
Bây giờ các bạn save lại và chạy trên trình duyệt, rồi tiến hành upload thử một vài file với các định dạng khác nhau để tự nghiệm ra cho mình nhé
4. Tổng kết
Kết thúc bài viết hướng dẫn tạo form upload file trong php tại đây, nếu bạn có bất kỳ thắc mắc nào thì để lại bình luận bên dưới mình sẽ phản hồi sớm nhất có thể.
Chúc các bạn thành công!


Sau Lỗi: thế nào mặc định lại có số 4 hả ad ơi.
hi,bạn ơi mình tham khảo nhiều web chỉ cách tạo upload ảnh những không có web nào chỉ cách làm thế nào khi upload xong thì thông tin hình ảnh như <img src=”link hình ảnh”> ,[img]link hình ảnh[/img], như 1 số website upload hình ảnh như upanh.tv
Anh ơi em muốn hiển thị ảnh vừa up lên amfn hình thì dùng thẻ <img src="”> đúng không ak
Anh ơi em muốn xóa ảnh đã upload thì làm như thế nào ạ
e có thể sử dụng hàm unlink($myFile) với $myFile là đường dẫn tới file e cần xóa nhé
đủng rồi nhé em
lỗi error 6 không tìm thấy đường dẫn file tạm thì sửa cách nào dạ a
Lỗi chi tiết là như nào e?
Theo mình thấy thì dòng 12: có cần thiết kiểm tra isset($_FILES[‘photo’]) không? và trường hợp nào thì $_FILE[‘photo’] không tồn tại? Nhưng tốt nhất trong lập trình thì cứ cẩn thận check xem có không mới sử dụng.
dòng 16 và 24: Mình thấy công dụng 2 hàm này như nhau mà sao lại kiểm tra những 2 lần nhĩ?
dòng 9,10,11 đã gán giá trị cho các biến vậy sao ở các đoạn code dưới lại không sử dụng? Lại khai báo lặp lại để dùng?
Ad có thể giải thích cho mình được không?
– isset($_FILES[‘photo’]) <<< Nếu ko có dòng này thì mỗi lần reload page nó sẽ chạy vào hàm upload file và ko tìm thấy file sẽ báo lỗi - Dòng 16 và 24: Mình thấy công dụng 2 hàm này như nhau mà sao lại kiểm tra những 2 lần nhĩ? <<< Có thể là trùng lặp nhưng cũng bảo đảm hơn bạn nhé -dòng 9,10,11 đã gán giá trị cho các biến vậy sao ở các đoạn code dưới lại không sử dụng? Lại khai báo lặp lại để dùng? <<< Cái này khai báo để liệt kê các thông số cơ bản của 1 file, bạn có thể sử dụng trong các ứng dụng sau này nếu cần.
liên hệ vs ad s ạ
Còn gì tuyệt vời hơn
yeah, chúc bạn học tốt 😀
Em chào anh. Em đang quan tâm đến chức năng này. Chả là em muốn làm chức năng upload file lên web như thằng này. http://www.files2.9minecraft.net/index.php Nhưng trong bài của anh là chỉ cho up ảnh. Thế giờ em muốn tự ý thay đổi những định dạng cho phép up thì em phải làm sao. Và làm sao để tạo được page download như thằng ở trên mỗi khi người dùng click vào link sau khi tạo ra vậy anh. Ngoài ra em muốn hỏi anh thêm 1 chút là mình cho người dùng up file lên server mình có… Read more »
E xem đoạn này nhé : // Mảng chưa định dạng file cho phép $allowed = array(“jpg” => “image/jpg”, “jpeg” => “image/jpeg”, “gif” => “image/gif”, “png” => “image/png”); Đây là mảng cho phép những định dạng có thể upload, nếu e muốn cho người dùng upload những tập tin khác thì e cứ thêm vào mảng này . Còn cho phép người khác download thì khi họ upload file lên server, e chỉ việc sử dụng thẻ “a” có “href” link tới cái đường dẫn chứa file đó là nó tự download e nhé. Trường hợp họ up file virus… Read more »
Bạn ơi làm thêm cái chức năng “liên hệ” trong php đi ạ. Ví dụ như trang contact, người dùng điền thông tin vào sau đó submit thì toàn bộ thông tin của người dùng sẽ được gửi tới mail của người quản trị hoặc mail của người nào đó. Please!!!
Em có thể tham khảo bài này nhé : https://kungfuphp.com/tong-hop-php/gui-mail-trong-php.html
Hi anh,
Em mới thử làm nhưng có lỗi anh ah. Lỗi như link. Không biết phải cấu hình gì trong file php.ini không nữa. Cám ơn anh.
https://imgur.com/a/Dgec7
Em thử cái này luôn xem : https://kungfuphp.com/tong-hop-php/gui-email-trong-php-su-dung-google-smtp.html
Vì chạy ở local thường hay lỗi
Dạ không được anh ơi, copy nguyên code của anh vào mà không được luôn. Download cái PHPMailer về unzip ra thì chỉ có file PHPMailer.php chứ không có file Autoload, em thử đổi tên cái PhpMailerAutoload.php => PHPMailer.php thì nó báo (Fatal error: Class ‘PHPMailer’ not found). Không hiểu bị gì 😀
cái này là lỗi của thư viện thông thường config email gửi được ở local e cần chỉnh lại một số thông số, e download thư viện mới nhất tại đây : https://github.com/PHPMailer/PHPMailer , kéo xuống dưới đọc phần Readme.md để cấu hình theo và debug lỗi nhé
Thank anh, em làm được rồi. Anh có link hay hướng dẫn gửi mail php bằng cách lấy thông tin từ tag trong html ko ạ, em kiếm trong site này mà ko có. Cám ơn anh 🙂
Em có thấy khai báo đoạn này nhưng không thấy được sử dụng cho việc gì.
Trên phần tạo form upload có khai báo ” ” nhưng em không thấy nó được sử dụng cho việc gì.
ý của e là sao nhỉ ?