Ive been experimenting with the upload capability of php, I have been looking at this tutorial on w3school.
http://www.w3schools.com/php/php_file_upload.asp
I would say the problem is in that If, a lot of conditions there (also "invalid file" is the Else part of that if), try to simplify it to track the problem, at first glance I would say it's because of the size checking:
&& ($_FILES["file"]["size"] < 20000)
that's around 20Kb, quite small for an image if you are uploading a photo, try to put a higher value or to take out that condition and see if the script works
Your validation code is checking the extension, mime type and file size.
You are probably uploading a file with uppercase characters in the extension. When you check the extension, you checking it case sensitive, .JPG
is a valid image file extension, so you should make your check case insensitive:
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array(strtolower($extension), $allowedExts))
// ^ added strtolower()
If that isn't the immediate problem then the file is too big or has the wrong mime type. To debug, view the files array with:
print_r($_FILES);
This happens because the following expression evaluates to false:
(($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts)
Which means that either
My guess would be the file size - increase it drastically. Change it to the following to allow sizes up to 10 MB:
&& ($_FILES["file"]["size"] < 10485760)
The best way to see the problem is to add this line to the beginning of your script:
var_dump($_FILES);
The problem of your script is that you are probably trying to upload a file higher that your limit is! You specified a really low max filesize! Print out your $_FILES var to get information about what's wrong ;)
However, in order to move the file to your folder you still need to use move_uploaded_file:
$allow = array("jpg", "jpeg", "gif", "png");
$todir = 'uploads/';
if ( !!$_FILES['file']['tmp_name'] ) // is the file uploaded yet?
{
$info = explode('.', strtolower( $_FILES['file']['name']) ); // whats the extension of the file
if ( in_array( end($info), $allow) ) // is this file allowed
{
if ( move_uploaded_file( $_FILES['file']['tmp_name'], $todir . basename($_FILES['file']['name'] ) ) )
{
// the file has been moved correctly
}
}
else
{
// error this file ext is not allowed
}
}
best way to upload images i think would be to copy an image and store inside a folder and then store the new location of image into a databse.
to move the file we can use move_uploaded_file function
$oldpath = $_FILES['image']['tmp_name'];
$newpath ="new_folder_location/".$_FILES['image']['name'];
move_uploaded_file($oldpath, $newpath);
I agree with answer of Ivo but I think that you may make change of next piece of code like this:
$typePicture = array('jpg','png','jpeg','gif');
// Allow certain file formats
if($typePicture[0] != "jpg" || $typePicture[1] != "png" || $typePicture[2] != "jpeg" || $typePicture[3] != "gif" )
{
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}