Majid Ali Majid Ali - 5 months ago 44
PHP Question

File upload in PHP giving error

I am building an web app using PHP.I am creating a file upload section in it but i am having problem.

<form action="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>


upload.php:

<?php
$target_dir = "images/";
$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"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
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.";
}
}
?>


It is working fine for images. but when i try to check what happens if i upload mp4 file. it echo File already exists,Sorry, only JPG, JPEG, PNG & GIF files are allowed.Sorry, there was an error uploading your file. Kindly guide me where i am doing mistake so that this work fine for me without having errors. Thanks in advance.

Answer

It is working fine for images. but when i try to check what happens if i upload mp4 file. it echo Sorry, only JPG, JPEG, PNG & GIF files are allowed

This is limitation simply because your code limits it as such.

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

If the file is not of jpg, png, jpeg, or gif it won't allow the upload.

It echoes file already exists

This is simply because the file is already there (wherever the directory is), due to this check:

// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}

Sorry, there was an error uploading your file

I cannot see why this is. Your conditional if ($uploadOk == 0) is set to 0 in all of your other conditionals, and so should be true and should echo "Sorry, your file was not uploaded".

Moving to comments to ask.