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
  • 199 views

Recent posts

Tính năng tìm kiếm AI của Google có mặt tại Việt Nam

Tính năng tìm kiếm AI của Google có mặt tại Việt Nam

Tuần này, Google AI Overviews bắt đầu triển khai đến hơn 100 quốc gia, bao gồm Việt Nam và hỗ […]

Apple trình làng bộ tính năng AI đầu tiên trên iPhone, iPad và Mac cao cấp

Apple trình làng bộ tính năng AI đầu tiên trên iPhone, iPad và Mac cao cấp

Giám đốc điều hành Apple Tim Cook chia sẻ Apple Intelligence không chỉ đơn thuần là AI tạo sinh, mà […]

Apple phát hành iOS 18.1 đưa Apple Intelligence lên iPhone

Apple phát hành iOS 18.1 đưa Apple Intelligence lên iPhone

Bản cập nhật iOS 18.1 được Apple phát hành ngày 28/10, đưa một số tính năng AI của Apple Intelligence […]

Apple sắp phát hành iOS 18.1

Apple sắp phát hành iOS 18.1

Dự kiến, iOS 18.1 sẽ chính thức được phát hành cho các mẫu iPhone tương thích vào tuần tới. Hiện, […]

Xuất hiện thêm lỗi nghiêm trọng trên iPhone 16

Xuất hiện thêm lỗi nghiêm trọng trên iPhone 16

Một số người dùng vừa nâng cấp lên iPhone 16 phản ánh rằng thiết bị của họ gặp phải tình […]

© 2021 Tạp Chí CNTT. Mr Hoang