I have a php image upload form that works perfect but my only problem is that when an image over the set limit is uploaded it says it has exceeded the size and it doesnt give the link to the image but it still uploads it to my server.
Here is the code:
PHP Code:
<?php //define a maxim size for the uploaded images in Kb define ("MAX_SIZE","1024");
//This function reads the extension of the file. It is used to determine if the file is an image by checking the extension. function getExtension($str) { $i = strrpos($str,"."); if (!$i) { return ""; } $l = strlen($str) - $i; $ext = substr($str,$i+1,$l); return $ext; }
//This variable is used as a flag. The value is initialized with 0 (meaning no error found) //and it will be changed to 1 if an errro occures. //If the error occures the file will not be uploaded. $errors=0; //checks if the form has been submitted if(isset($_POST['Submit'])) { //reads the name of the file the user submitted for uploading $image=$_FILES['image']['name']; //if it is not empty if ($image) { //get the original name of the file from the clients machine $filename = stripslashes($_FILES['image']['name']); //get the extension of the file in a lower case format $extension = getExtension($filename); $extension = strtolower($extension); //if it is not a known extension, we will suppose it is an error and will not upload the file, //otherwise we will do more tests if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif")) { //print error message echo '<h3>Unknown extension!</h3>'; $errors=1; } else { //get the size of the image in bytes //$_FILES['image']['tmp_name'] is the temporary filename of the file //in which the uploaded file was stored on the server $size=filesize($_FILES['image']['tmp_name']);
//compare the size with the maxim size we defined and print error if bigger if ($size > MAX_SIZE*1048576) { echo '<h3>You have exceeded the size limit!</h3>'; $errors=1; }
//we will give an unique name, for example the time in unix time format $image_name=time().'.'.$extension; //the new name will be containing the full path where will be stored (images folder) $newname="images/".$image_name; //we verify if the image has been uploaded, and print error instead $copied = copy($_FILES['image']['tmp_name'], $newname); if (!$copied) { echo '<h3>Copy unsuccessfull!</h3>'; $errors=1; }}}}
//If no errors registred, print the success message if(isset($_POST['Submit']) && !$errors) { echo "<h3>File Uploaded Successfully!</h3>"; }
but my only problem is that when an image over the set limit is uploaded it says it has exceeded the size and it doesnt give the link to the image but it still uploads it to my server.
Because PHP doesn't know it is too big until it is uploaded.
__________________
Chris. ->> Please login or register to view this content. Registration is FREE <<-
A foolish consistency is the hobgoblin of little minds
Thought for today:- Is SEO the only industry where all the cowboys are Indians?
PHP runs on the server and until the file is actually on the server it can't do anything about it.
__________________
Chris. ->> Please login or register to view this content. Registration is FREE <<-
A foolish consistency is the hobgoblin of little minds
Thought for today:- Is SEO the only industry where all the cowboys are Indians?
<?php //define a maxim size for the uploaded images in Kb define ("MAX_SIZE","1024");
//This function reads the extension of the file. It is used to determine if the file is an image by checking the extension. function getExtension($str) { $i = strrpos($str,"."); if (!$i) { return ""; } $l = strlen($str) - $i; $ext = substr($str,$i+1,$l); return $ext; }
//This variable is used as a flag. The value is initialized with 0 (meaning no error found) //and it will be changed to 1 if an errro occures. //If the error occures the file will not be uploaded. $errors=0; //checks if the form has been submitted if(isset($_POST['Submit'])) { //reads the name of the file the user submitted for uploading $image=$_FILES['image']['name']; //if it is not empty if ($image) { //get the original name of the file from the clients machine $filename = stripslashes($_FILES['image']['name']); //get the extension of the file in a lower case format $extension = getExtension($filename); $extension = strtolower($extension); //if it is not a known extension, we will suppose it is an error and will not upload the file, //otherwise we will do more tests if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif")) { //print error message echo '<h3>Unknown extension!</h3>'; $errors=1; } else { //get the size of the image in bytes //$_FILES['image']['tmp_name'] is the temporary filename of the file //in which the uploaded file was stored on the server $size=filesize($_FILES['image']['tmp_name']);
//compare the size with the maxim size we defined and print error if bigger if ($size > MAX_SIZE*1048576) { echo '<h3>You have exceeded the size limit!</h3>'; unlink($_FILES['image']['tmp_name']); //ADDED LINE $errors=1; }
//we will give an unique name, for example the time in unix time format $image_name=time().'.'.$extension; //the new name will be containing the full path where will be stored (images folder) $newname="images/".$image_name; //we verify if the image has been uploaded, and print error instead $copied = copy($_FILES['image']['tmp_name'], $newname); if (!$copied) { echo '<h3>Copy unsuccessfull!</h3>'; $errors=1; }}}}
//If no errors registred, print the success message if(isset($_POST['Submit']) && !$errors) { echo "<h3>File Uploaded Successfully!</h3>"; }
If you did not move or copy the uploaded file to somewhere you will not have to unlink it explicitly because it will be deleted from tmp right after your script ends.
If you did not move or copy the uploaded file to somewhere you will not have to unlink it explicitly because it will be deleted from tmp right after your script ends.
I was merely pointing out a simple solution, eventhough a bit hackish, but I expected the result to be
You have exceeded the size limit!
Copy Unsuccesful!
and then exit, so that there wouldn't be need to refactor much of the code... There'd be many more elegant solutions available, but this was a simple and fast hack to get the desired result.
I was merely pointing out a simple solution, eventhough a bit hackish, but I expected the result to be
You have exceeded the size limit!
Copy Unsuccesful!
and then exit, so that there wouldn't be need to refactor much of the code... There'd be many more elegant solutions available, but this was a simple and fast hack to get the desired result.
Well surely it will work, but the script isn't as optimized it could be, because now it's intentionally trying to copy a non-existent file. You might want to check your error-handling later on when you've more knowledge on what the best practices are etc, but for now, it'll give you your desired effect to this extent