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

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

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()

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

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 & HTML:

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

  • PHP
  • April 17, 2017
  • 0 comment
  • 336 views

Recent posts

[WordPress] Hướng dẫn tạo Custom Action Hook trong WordPress

[WordPress] Hướng dẫn tạo Custom Action Hook trong WordPress

Tạo custom Action Hook trong WordPress là một kỹ năng rất hữu ích để tùy chỉnh và mở rộng chức […]

Cuộc chiến không hồi kết: “Trình duyệt CC” chặn quảng cáo

Cuộc chiến không hồi kết: “Trình duyệt CC” chặn quảng cáo

Người dùng internet không còn lạ lẫm gì trước những “chiêu” được “hãng Y” sử dụng, nhằm hạn chế việc […]

Windows có lỗ hổng nghiêm trọng, Microsoft biết nhưng từ chối sửa

Windows có lỗ hổng nghiêm trọng, Microsoft biết nhưng từ chối sửa

Một lỗ hổng bảo mật trên Windows có “cửa hậu” cho phép đăng nhập bằng mật khẩu cũ. Một phát […]

Apple phát hành iOS 18.5 RC: Sắp ra mắt chính thức?

Apple phát hành iOS 18.5 RC: Sắp ra mắt chính thức?

Apple phát hành phiên bản Release Candidate (RC) của iOS 18.5 và iPadOS 18.5 đến các nhà phát triển cũng như người dùng tham gia […]

Apple cập nhật ứng dụng Move to iOS, nâng cấp tốc độ truyền tải

Apple cập nhật ứng dụng Move to iOS, nâng cấp tốc độ truyền tải

Move to iOS là ứng dụng của Apple để giúp người dùng Android khi chuyển sang hệ sinh thái của Apple, cụ thể là iOS […]

© 2021 Tạp Chí CNTT. Mr Hoang