Tạo form 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ể.

Leave a Reply