I got my php upload form working (allowing .jpg), but am not sure how to add .JPG (uppercase issue) or .jpeg.
Could someone please show me how to add these extensions to the following code?
<?php
//–°heck that we have a file
if((!empty($_FILES["uploaded_file"])) && ($_FILES['uploaded_file']['error'] == 0)) {
//Check if the file is JPEG image and it's size is less than 350Kb
$filename = basename($_FILES['uploaded_file']['name']);
$ext = substr($filename, strrpos($filename, '.') + 1);
if (($ext == "jpg") && ($_FILES["uploaded_file"]["type"] == "image/jpeg") &&
($_FILES["uploaded_file"]["size"] < 16000000)) {
//Determine the path to which we want to save this file
$newname = dirname(__FILE__).'/upload/'.$filename;
//Check if th开发者_运维百科e file with the same name is already exists on the server
if (!file_exists($newname)) {
//Attempt to move the uploaded file to it's new place
if ((move_uploaded_file($_FILES['uploaded_file']['tmp_name'],$newname))) {
echo "It's done! The file has been saved!";
} else {
echo "Error: A problem occurred during file upload!";
}
} else {
echo "Error: File ".$_FILES["uploaded_file"]["name"]." already exists";
}
} else {
echo "Error: Only .jpg images under 15 Mb are accepted for upload";
}
} else {
echo "Error: No file uploaded";
}
?>
Thanks so much for your help and time!
In addition to @Swanny, you have a couple of more options:
The in_array approach (coupled with strtolower):
if (in_array(strtolower($est),Array('jpg','jpeg')))
There's using strcasecmp to eliminate case:
if (strcasecmp($ext,'jpg') === 0 || strcasecmp($ext,'jpeg') === 0)
Or, the good'ol'fashioned RegEx apprach (which eliminated making the $ext
variable:
if (preg_match('/\.(jpe?g)$/i',$filename))
which can also be modified like so (adding additional extensions separated by pipe (|) characters)
if (preg_match('/\.(jpe?g|gif|png)$/i',$filename))
You would probably change line 6 from:
if (($ext == "jpg") && ($_FILES["uploaded_file"]["type"] == "image/jpeg") &&
to:
if (($ext == "jpg" || $ext == "jpeg" || $ext == "JPG") && ($_FILES["uploaded_file"]["type"] == "image/jpeg") &&
Although if you want to expand this further I'd recommend using an array of filetypes and checking the array, much easier to manage. Specifically using the in_array function http://php.net/manual/en/function.in-array.php
Convert the extension to lowercase when comparing.
$ext = strtolower($ext);
if ( ($ext == 'jpg' || $ext == 'jpeg') && ($_FILES["uploaded_file"]["type"] == "image/jpeg") &&
($_FILES["uploaded_file"]["size"] < 16000000)) {
Try this. Converts the extension of the current file to lower case using strtolower() then checks against an array of accepted extensions using in_array():
<?php
$acceptedExts = array ('jpg','jpeg');
//–check that we have a file
if((!empty($_FILES["uploaded_file"])) && ($_FILES['uploaded_file']['error'] == 0)) {
//Check if the file is JPEG image and it's size is less than 350Kb
$filename = basename($_FILES['uploaded_file']['name']);
$ext = strtolower (substr($filename, strrpos($filename, '.') + 1));
if (in_array($ext,$acceptedExts) && ($_FILES["uploaded_file"]["type"] == "image/jpeg") &&
($_FILES["uploaded_file"]["size"] < 16000000)) {
//Determine the path to which we want to save this file
$newname = dirname(__FILE__).'/upload/'.$filename;
//Check if the file with the same name is already exists on the server
if (!file_exists($newname)) {
//Attempt to move the uploaded file to it's new place
if ((move_uploaded_file($_FILES['uploaded_file']['tmp_name'],$newname))) {
echo "It's done! The file has been saved!";
} else {
echo "Error: A problem occurred during file upload!";
}
} else {
echo "Error: File ".$_FILES["uploaded_file"]["name"]." already exists";
}
} else {
echo "Error: Only .jpg images under 15 Mb are accepted for upload";
}
} else {
echo "Error: No file uploaded";
}
?>
Note that it won't work for other image types as you are still checking the file type is image/jpeg:
$_FILES["uploaded_file"]["type"] == "image/jpeg"
精彩评论