PHP Tutorial Tutorials - PHP File Upload

PHP File Upload

In this tutorial we will learn how to use php to manage file uploads to the server.

Create a HTML form to upload the file

First, build an HTML form that lets users select a file to upload.

upload.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>PHP Upload file example</title>
</head>
<body>
    <form enctype="multipart/form-data" action="uploadProcess.php" method="POST">
    Choose a  image file to upload: 
    <input name="image" type="file">
    <br>
    <input type="submit" value="Upload">
    </form>
</body>
</html>

Processing the uploaded file

PHP $_FILES

PHP use a superglobal variable $_FILES to contains all the information of the uploaded file including file name,type,size etc.
$_FILES['image'] the image is the reference in the form <input name="image" type="file">
$_FILES['image']['name'] the original name of the file on the client machine.
$_FILES['image']['type'] the mime type of the file
$_FILES['image']['size'] file size,in bytes
$_FILES['image']['tmp_name'] The temporary filename of the file on the server
$_FILES['image']['error'] error code. 0 success

On the server side ,you must check the file uploaded by user for security:

  • Check if the file is too large, we should limit the upload file size.
  • Check the file MIME type, you want the user to upload a picture but someone may upload an executable file(.exe)

When the file is uploaded successfully , it is stored in a temporary directory on the server.
If you want to save this file permanently, You should use move_uploaded_file() function to move it to a new permanent location and rename it.

uploadProcess.php

<?php

// Check if the form was submitted
if(isset($_FILES["image"])){
    // Check if the file was uploaded without errors
    if($_FILES["image"]["error"] == 0){
        $allowed = array(
            "gif" => "image/gif", 
            "jpeg" => "image/jpeg", 
            "jpg" => "image/jpg", 
            "png" => "image/png",
        );
        $filename = $_FILES["image"]["name"];
        $filetype = $_FILES["image"]["type"];
        $filesize = $_FILES["image"]["size"];
        
        // Check if the file is too large or not
        $maxsize = 10 * 1024 * 1024; // 10M
        if($filesize > $maxsize)
            die("Error: The file is too large.");
    
        // Check the file extension
        $ext = pathinfo($filename, PATHINFO_EXTENSION);
        if(!array_key_exists($ext, $allowed))
            die("Error: Wrong file extension.");
        
        // Check the mime type of file
        if(in_array($filetype, $allowed)){
            // Prevent the file name is same as an existing file in the same folder.
            $newFilename = "data/".date("YmdHi").$filename;
            if(!file_exists("data/")){
                mkdir("data/");
            }
            if(file_exists("data/" . $newFilename)){
                echo "The file ".$newFilename. " is already exists.";
            } else{
                // 
                if(move_uploaded_file($_FILES["image"]["tmp_name"], $newFilename)){
                    echo "Success: The file was uploaded successfully.<br>";
                }
                else{
                    echo "Error: The file cannot be moved.";
                }
                echo "File Name: " . $_FILES["image"]["name"] . "<br>";
                echo "File Type: " . $_FILES["image"]["type"] . "<br>";
                echo "File Size: " . round($_FILES["image"]["size"] / 1024) . " KB<br>";
                echo "Temporary file Name: " . $_FILES["image"]["tmp_name"];
            } 
        } else{
            echo "Error: This type of file is not allowed."; 
        }
    } else{
        echo "Error: " . $_FILES["image"]["error"];
    }
}
else{
    echo "Error: Please upload a image file.";
}
?>

Outputs:

Success: The file was uploaded successfully.
File Name: life.png
File Type: image/png
File Size: 75 KB
Temporary file Name: C:\Windows\Temp\php6776.tmp
Date:2019-10-01 03:04:42 From:www.Lautturi.com author:Lautturi