Sagija
Sagija

Reputation: 11

Image upload in php - validation returning false result

I have a problem with image upload. i'm using the form and the script from w3schools. the code is below. The problem is the validation of the file type. getimagesize returns that it is an actual image, but it can't get past the validation for file type. I get the following error: File is an image - image/jpeg. Sorry, only JPG, JPEG, PNG & GIF files are allowed. Sorry, your file was not uploaded.

And when I comment the if function where the validation takes place, the image uploads just fine.

    /*if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
    && $imageFileType != "gif" ) {
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;
    }*/

I've looked it up on the forum, but no one has had this type of error. Thank you in advance.

The basic form:

    <form action="includes/upload.php" method="post" enctype="multipart/form-data">
    Select image to upload:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload Image" name="submit">
    </form>

The upload.php script:

    <?php
    $target_dir = "../uploads/";
    $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
    $uploadOk = 1;
    $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
    // Check if image file is a actual image or fake image
    if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
    echo "File is an image - " . $check["mime"] . ".";
    $uploadOk = 1;
    } else {
    echo "File is not an image.";
    $uploadOk = 0;
    }
    }
    // Check if file already exists
    if (file_exists($target_file)) {
    echo "Sorry, file already exists.";
    $uploadOk = 0;
    }
    // Check file size
    if ($_FILES["fileToUpload"]["size"] > 50000000) {
    echo "Sorry, your file is too large.";
    $uploadOk = 0;
    }
    // Allow certain file formats
    // This is where the problem occurs
    if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
    && $imageFileType != "gif" ) {
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;
    }
    // Check if $uploadOk is set to 0 by an error
    if ($uploadOk == 0) {
    echo "Sorry, your file was not uploaded.";
    // if everything is ok, try to upload file
    } else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
    echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
    } else {
    echo "Sorry, there was an error uploading your file.";
    }
    }
    ?>

Upvotes: 1

Views: 538

Answers (1)

Vivek Pipaliya
Vivek Pipaliya

Reputation: 498

Use $_FILES["fileToUpload"]["name"] instead of using $target_file

 $imageFileType = pathinfo($_FILES["fileToUpload"]["name"],PATHINFO_EXTENSION);

Upvotes: 0

Related Questions