Tạo form upload file trong PHP

tạo form upload 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

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!

Chia sẻ nhanh bài viết ↓

Hieu

"Những người điên rồ tới mức nghĩ mình có thể thay đổi được thế giới chính là những người có thể làm được điều đó" _ Steve Job

Subscribe
Notify of
guest

25 Bình Luận
Newest
Oldest Most Voted
Hoàng
Hoàng
3 năm trước
Phần reload không nhập file báo lỗi  echo "Lỗi: " . $_FILES["photo"]["error"];

Sau Lỗi: thế nào mặc định lại có số 4 hả ad ơi.

duy7878909899
duy7878909899
3 năm trước

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

Lộc Nguyễn
Lộc Nguyễn
7 năm trước

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

Lộc Nguyễn
Lộc Nguyễn
Phản hồi đến  Lộc Nguyễn
7 năm trước

Anh ơi em muốn xóa ảnh đã upload thì làm như thế nào ạ

linh
linh
Phản hồi đến  Hieu
6 năm trước

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

Huy
Huy
7 năm trước

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?

huy
huy
7 năm trước

liên hệ vs ad s ạ

Nguyễn Ngọc Quí
7 năm trước

Còn gì tuyệt vời hơn

Johnny Nguyen
Johnny Nguyen
7 năm trước

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 »

Hung
Hung
8 năm trước

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!!!

Hung
Hung
Phản hồi đến  Hieu
8 năm trước

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

Hung
Hung
Phản hồi đến  Hieu
8 năm trước

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ì 😀

Hung
Hung
Phản hồi đến  Hieu
8 năm trước

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 🙂

thắng
thắng
8 năm trước

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ì.

thắng
thắng
Phản hồi đến  thắng
8 năm trước

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ì.

25
0
Bạn có ý kiến về bài viết, hãy để lại bình luận nhé!x
()
x