Home / Hướng Dẫn / PHP / Hướng dẫn Upload file lên Server trong PHP

Hướng dẫn Upload file lên Server trong PHP

Với php bạn dễ dàng upload file lên server. Tuy nhiên nó cũng kèm theo những mối nguy hiểm cho hệ thống nên bạn cần phải cẩn thận xử lý khi upload file lên server.

Cấu hình để có thể upload file lên server trong php

Cấu hình file Php.ini

Đầu tiên bạn chắc chắn php của mình đã cấu hình cho phép upload file
Bạn tìm vào file php.ini tím đến dòng file_uploads và thiết lập trạng thái on

file_uploads = On

Tạo form upload bằng html

Tạo form cho phép người sử dụng chọn file ảnh mà họ muốn upload


<html>
    <head>
        <title>Upload file to server</title>
    </head>
    <body>
        <div class="wrapper">
            <form method="POST" enctype="multipart/form-data">
                <input type="file" name="fileUpload"  id="fileUpload" >
                <input type="submit" name="submit" >
            </form>
        </div>
    </body>
</html>

Lưu ý:
– Form hỗ trợ Upload khi phương thức truyền dữ liệu là POST
– Khai báo thuộc tính enctype=”multipart/form-data” cho From

Xử lý khi upload form

Ở bước trên ta đó có một form có thể upload rồi. Ở bước này chúng ta cùng tìm hiểu khi mình nhấn submit thì đều gì xảy ra.

Ở form có up dụng upload khi chúng ta chọn file và nhận submit, ngay lập tức dữ liệu được truyền vào trong biến hệ thống chính là $_FILES.

Chúng ta sử dụng đoạn mã sau để in ra thông tin mảng $_FILES


<?php
if ($_SERVER['REQUEST_METHOD'] == "POST") {
    echo "<pre>";
    print_r($_FILES['fileUpload']);
    echo "</pre>";
}
?>

Tôi đã chọn up một file ảnh và đây là kết quả của mảng $_FILES


Array
(
    [name] => picture.jpg
    [type] => image/jpeg
    [tmp_name] => D:\xampp\tmp\phpC225.tmp
    [error] => 0
    [size] => 57911
)

Như chúng ta thấy mảng $_FILES hiện tại có các trường như:
– name: Tên file
– type: Thông tin định dạng file(img, doc…)
– tmp_name: Đường dẫn tạm chưa file chuẩn bị đưa lên Server
– error: Lỗi khi upload file
– size: Độ lớn của file(kb)

Các bước đưa file được upload lên Server

Trong đa số trường hợp file chúng ta upload lên server chính là hình ảnh(Hình ảnh đại diện cho sản phẩm, tin tức…)

Vì thế nên chúng ta cần thực hiện một số bước trước khi chuyển file đã được chọn lên Server

– Kiểm tra đuôi mở rộng của file có nằm trong các đuôi hình ảnh không
– Kiểm tra kích thước của file chuẩn bị up có đảm bảo dung lượng cho phép không
– Kiểm tra xem file chuẩn bị up có tồn tại trên hệ thống chưa rồi up lên
Trước khi bắt đầu sau đây là một số hàm cần lưu ý

Lấy tên file


<?php 
basename($_FILES['fileUpload']['name']);
?>

Lấy đuôi mở rộng của file


<?php
pathinfo($_FILES['fileUpload']['name'], PATHINFO_EXTENSION);
?>

Bước 1: Tạo đường dẫn file sau khi được upload
Ở bước này chúng ta cần tạo một folder ở Server để chưa file và biết lại được dẫn đến đó

<?php
$target_dir = "uploads/";
?>

Tôi đã tạo một biến $target_dir lưu lại đường folder của tôi là uploads
Sau khi có được thư mục chúng ta tạo sẵn đường dẫn của file sau khi được upload

<?php 
$target_dir = "uploads/";
$target_file = $target_dir.basename($_FILES['fileUpload']['name']);
?>

Ví dụ tôi up file có tên là picture.jpg thì kết quả của biến $target_file như sau

uploads/picture.jpg

Bước 2: Kiểm tra file trước khi upload
Kiểm tra đuôi mở rộng file
Ví dụ chúng ta muốn up hình ảnh thì tập hợp đuôi mở rộng chúng ta cho phép là
– png
– jpg
– jpeg
– gif
Để kiểm tra file mình chọn up lên server có nằm trong danh sách trên hay không ta làm như sau

<?php 
$typeFile = pathinfo($_FILES['fileUpload']['name'], PATHINFO_EXTENSION);
$typeFileAllow = array('png','jpg','jpeg', 'gif');
if(!in_array($typeFile, $typeFileAllow)){
        $error = "File bạn vừa chọn hệ thống không hỗ trợ, bạn vui lòng chọn hình ảnh";
}
?>

Kiểm tra kích thước file


<?php
$sizeFile = $_FILES['size'];
if($sizeFile > 5242880){
   $error = "File bạn upload không được quá 5MB";
}
?>

Ở trên tôi quy định dung lượng file upload lên hệ thống không được quá 5MB~5242880bites
Kiểm tra file upload đã tồn tại trên hệ thống chưa

Chúng ta sử dụng hàm file_exists()


<?php
if(file_exists($target_file)){
   $error = "File bạn chọn đã tồn tại trên hệ thống";
}
?>

Bước 3: Chuyển file ở thư mục tạm lên Server
Sau khi làm bước kiểm tra tiêu chuẩn file chuẩn bị upload xong, nếu như file mình vừa chọn vượt qua được bộ lọc thì chúng ta sẻ chuyển file đấy lên server


<?php
if(empty($error)){
  if(move_uploaded_file($_FILES["fileUpload"]["tmp_name"], $target_file)){
    echo "Bạn đã upload file thành công";
  }else {
    echo "File bạn vừa upload gặp sự cố";
  }
}
?>

Chúng ta vừa kết thúc các bước thực hiện và đây là code đầy đủ


<?php
if ($_SERVER['REQUEST_METHOD'] == "POST") {
    $target_dir = "uploads/";
    $target_file = $target_dir . basename($_FILES['fileUpload']['name']);
    $typeFile = pathinfo($_FILES['fileUpload']['name'], PATHINFO_EXTENSION);
    $typeFileAllow = array('png','jpg','jpeg', 'gif');
    if(!in_array(strtolower($typeFile), $typeFileAllow)){
        $error = "File bạn vừa chọn hệ thống không hỗ trợ, bạn vui lòng chọn hình ảnh";
    }
    $sizeFile = $_FILES['size'];
    if($sizeFile > 5242880){
        $error = "File bạn chọn không được quá 5MB";
    }
    
    if(file_exists($target_file)){
        $error = "File bạn chọn đã tồn tại trên hệ thống";
    }
    
    if(empty($error)){
        if(move_uploaded_file($_FILES["fileUpload"]["tmp_name"], $target_file)){
            echo "Bạn đã upload file thành công";
        }  else {
            echo "File bạn vừa upload gặp sự cố";
        }
    }
}

?>
<html>
    <head>
        <title>Upload file to server</title>
        <meta charset="utf-8">
    </head>
    <body>
        <div class="wrapper">
            <form method="POST" enctype="multipart/form-data">
                <input type="file" name="fileUpload"  id="fileUpload" >
                <input type="submit" name="submit" >
            </form>
        </div>
    </body>
</html>

Chúc các bạn thành công!

About Tạp Chí Tin Học

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Time limit is exhausted. Please reload CAPTCHA.