How do I use PHP to create an image upload system?

Creating an Image Upload System with PHP

In this blog post, we will walk through the process of creating a simple image upload system using PHP. We will cover how to create an HTML form for uploading images, handling the image file on the server-side using PHP, and validating and storing the uploaded image.

Step 1: Creating the HTML Form

First, we need to create an HTML form that will allow users to select and upload an image. Here’s a basic example of an HTML form for image uploading:

<!-- HTML -->
<!DOCTYPE html>
  <title>Image Upload System</title>
  <h1>Upload an Image</h1>
  <form action="upload.php" method="post" enctype="multipart/form-data">
    <label for="image">Select an image:</label>
    <input type="file" name="image" id="image" accept="image/*">
    <input type="submit" value="Upload Image" name="submit">

In this example, we’ve created a simple form with an input field of type “file” to allow users to select an image file. The “accept” attribute specifies that only image files are allowed. The form’s action attribute points to a PHP script named “upload.php”, which we will create in the next step.

Step 2: Handling Image Upload with PHP

Next, we need to create the “upload.php” script to handle the uploaded image file. This script will perform various tasks like validating the uploaded file, storing it in a specified directory, and displaying a success or error message.

Here’s the “upload.php” script:

$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["image"]["name"]);
$upload_ok = 1;
$image_file_type = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));

// Check if file is an actual image
if (isset($_POST["submit"])) {
  $check = getimagesize($_FILES["image"]["tmp_name"]);
  if ($check !== false) {
    echo "File is an image - " . $check["mime"] . ".";
    $upload_ok = 1;
  } else {
    echo "File is not an image.";
    $upload_ok = 0;

// Check file size (example: limit to 2MB)
if ($_FILES["image"]["size"] > 2000000) {
  echo "Sorry, your file is too large.";
  $upload_ok = 0;

// Allow only certain file formats
if ($image_file_type != "jpg" && $image_file_type != "png" && $image_file_type != "jpeg" && $image_file_type != "gif") {
  echo "Sorry, only JPG, JPEG, PNG, and GIF files are allowed.";
  $upload_ok = 0;

// Check if $upload_ok is set to 0 by an error
if ($upload_ok == 0) {
  echo "Sorry, your file was not uploaded.";
} else {
  // Try to upload the file
  if (move_uploaded_file($_FILES["image"]["tmp_name"], $target_file)) {
    echo "The file " . basename($_FILES["image"]["name"]) . " has been uploaded.";
  } else {
    echo "Sorry, there was an error uploading your file.";

In this script, we first define the target directory where the uploaded images will be stored. We then check if the uploaded file is an actual image by using the getimagesize() function. This function returns the image’s dimensions and MIME type if it’s an actual image, and false otherwise.

Next, we validate the image file size and allowed file formats. In this example, we limit the file size to 2MB and only allow JPG, JPEG, PNG, and GIF formats.

If any of these validations fail, the $upload_ok variable is set to 0, and an error message is displayed. If all validations pass, we use the move_uploaded_file() function to move the uploaded file from the temporary directory to our desired target directory.

Step 3: Setting Up the Upload

Directory In the “upload.php” script, we specified the target directory as “uploads/”. Make sure to create this directory in your project folder and give it the necessary permissions for file uploads. You can set the permissions using the following command in your terminal (assuming you are using a Unix-based system):

chmod 755 uploads

Now, the image upload system should be functional. Users can select an image file using the HTML form, and the file will be uploaded to the “uploads/” directory after passing the specified validations.


In this blog post, we’ve demonstrated how to create a simple image upload system using PHP. By following these steps, you should be able to implement your own image upload system for your projects. As you expand your project, you may want to add features like image resizing, thumbnail generation, or more advanced validation methods to further enhance the functionality of your image upload system.

Got question?

Submit it here

© All rights reserved.