DavidAM Posted September 29, 2012 Share Posted September 29, 2012 Did that upload succeed through the resize? Those numbers are a lot smaller than the 32M you reported earlier. Was this the same file? echo memory_get_usage() . "<BR>\n"; added at start of script : 664240 after $member->LoggedIn(), : 1882288 before resize-class.php include: 1886432 after resize-class.php include: 1944440 these values are when I upload a 1.5m image Start: 648 K After LoggedIn(): 1,838 K (incease 1,190K) After checks: 1,842 K (increase 4K) After resize: 1,898 K (increase 56K) I don't see these numbers as excessive at all. A site I am working on now, showing the list of Blog Topics, reports about 2,902 K once the page is finished loading. But, again, these numbers are very much smaller than the 32M that earlier error message reported. If the upload succeeded, maybe start commenting out the debug code and see if the thing will work now. Quote Link to comment https://forums.phpfreaks.com/topic/268852-image-upload-validation-not-working/page/2/#findComment-1381694 Share on other sites More sharing options...
happypete Posted September 29, 2012 Author Share Posted September 29, 2012 Thanks very much for all your help. It works perfectly and I've learn loads in the process. Here is the finished upload script with image validation and the resize class from Jarrod Oberto. I've remove the things specific to my project so it should work as a stand alone image upload script. I hope other beginners like me find it usefull... 3 files: index.php, process.php & resize-class.php index.php <?php @session_start(); ?> <!DOCTYPE html> <html lang="en"> <head> </head> <body> <div class="content"> <h1>Upload an image</h1> <?php if(!empty($_SESSION['msg'])) { echo '<font color="red">'.$_SESSION['msg'].'</font>'; unset($_SESSION['msg']); } ?> <form method="post" action="process.php" enctype="multipart/form-data"> <label> Select Image <br /> <input type="file" name="image" /> <br /> </label> <div class="clear"></div> <input id="button" class="button" type="submit" name="submit" value="Upload" /> </form> </body> </html> process.php <?php @session_start(); // Check if coming from a POST command and if($_SERVER['REQUEST_METHOD']=='POST' && $_POST['submit']=='Upload' && ($_FILES['image']['error'] == UPLOAD_ERR_OK)) { $file_size = $_FILES['image']['size']; $blacklist = array(".php", ".phtml", ".php3", ".php4", ".js", ".shtml", ".pl" ,".py", ".php5", ".htm", ".html", ".zip", ".exe", ".htaccess"); //Remove blacklisted files foreach ($blacklist as $file) { if(preg_match("/$file\$/i", $_FILES['image']['name'])) { $_SESSION['msg'] = 'Invalid image format only JPG, PNG & GIF formats'; header('Location: index.php'); exit; }} //Check for valid image type $allowedexts = array('gif','jpeg','jpg','png'); $extension = end(explode('.', strtolower($_FILES['image']['name']))); if($_FILES['image']['type']=='image/jpeg'||$_FILES['image']['type']=='image/gif'||$_FILES['image']['type']=='image/png' && in_array($extension,$allowedexts)){ } else { $_SESSION['msg'] = 'Invalid image format only JPG, PNG & GIF formats'; header('Location: index.php'); exit; } // Check image size not 0 if($file_size === 0) { $_SESSION['msg'] = 'That was an empty file!'; header('Location: index.php'); exit; } // Check image size not too big if($file_size >= (2097152)) { // 2MB $_SESSION['msg'] = 'Image is to big. Max upload 2MB'; header('Location: index.php'); exit; } // Check not double extension like bad.php.jpg else if(substr_count($_FILES['image']['name'], '.')>1){ //check double file type $_SESSION['msg'] = 'Invalid image format only JPG, PNG & GIF formats'; header('Location: index.php'); exit; } $newPath = '' . basename($_FILES['image']['name']); (move_uploaded_file($_FILES['image']['tmp_name'], $newPath)); // *** Include the class include("resize-class.php"); // *** 1) Initialise / load image $resizeObj = new resize($newPath); // *** 2) Resize image (options: exact, portrait, landscape, auto, crop) $resizeObj -> resizeImage(475, 600, 'landscape'); // *** 3) Save image + define quality $resizeObj -> saveImage('/home/user/public_html/images/your-image-name.jpg', 85); // Remove file from temp Directory unlink($newPath) ; // once updated return to admin page header('Location: index.php?success=3'); exit; } else { $_SESSION['msg'] = 'ERROR - Image to big or wrong format'; header('Location: index.php'); exit; } ?> resize-class.php <?php # ========================================================================# # # Author: Jarrod Oberto # Version: 1.0 # Date: 17-Jan-10 # Purpose: Resizes and saves image # Requires : Requires PHP5, GD library. # Usage Example: # include("file:///C|/xampplite/htdocs/inc/classes/resize_class.php"); # $resizeObj = new resize('images/cars/large/input.jpg'); # $resizeObj -> resizeImage(150, 100, 0); # $resizeObj -> saveImage('images/cars/large/output.jpg', 100); # # # ========================================================================# Class resize { // *** Class variables private $image; private $width; private $height; private $imageResized; function __construct($fileName) { // *** Open up the file $this->image = $this->openImage($fileName); // *** Get width and height $this->width = imagesx($this->image); $this->height = imagesy($this->image); } ## -------------------------------------------------------- private function openImage($file) { // *** Get extension $extension = strtolower(strrchr($file, '.')); switch($extension) { case '.jpg': case '.jpeg': $img = @imagecreatefromjpeg($file); // @ REMOVED break; case '.gif': $img = @imagecreatefromgif($file); // @ REMOVED break; case '.png': $img = @imagecreatefrompng($file); // @ REMOVED break; default: $img = false; break; } return $img; } ## -------------------------------------------------------- public function resizeImage($newWidth, $newHeight, $option="auto") { // *** Get optimal width and height - based on $option $optionArray = $this->getDimensions($newWidth, $newHeight, $option); $optimalWidth = $optionArray['optimalWidth']; $optimalHeight = $optionArray['optimalHeight']; // *** Resample - create image canvas of x, y size $this->imageResized = imagecreatetruecolor($optimalWidth, $optimalHeight); imagecopyresampled($this->imageResized, $this->image, 0, 0, 0, 0, $optimalWidth, $optimalHeight, $this->width, $this->height); // *** if option is 'crop', then crop too if ($option == 'crop') { $this->crop($optimalWidth, $optimalHeight, $newWidth, $newHeight); } } ## -------------------------------------------------------- private function getDimensions($newWidth, $newHeight, $option) { switch ($option) { case 'exact': $optimalWidth = $newWidth; $optimalHeight= $newHeight; break; case 'portrait': $optimalWidth = $this->getSizeByFixedHeight($newHeight); $optimalHeight= $newHeight; break; case 'landscape': $optimalWidth = $newWidth; $optimalHeight= $this->getSizeByFixedWidth($newWidth); break; case 'auto': $optionArray = $this->getSizeByAuto($newWidth, $newHeight); $optimalWidth = $optionArray['optimalWidth']; $optimalHeight = $optionArray['optimalHeight']; break; case 'crop': $optionArray = $this->getOptimalCrop($newWidth, $newHeight); $optimalWidth = $optionArray['optimalWidth']; $optimalHeight = $optionArray['optimalHeight']; break; } return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight); } ## -------------------------------------------------------- private function getSizeByFixedHeight($newHeight) { $ratio = $this->width / $this->height; $newWidth = $newHeight * $ratio; return $newWidth; } private function getSizeByFixedWidth($newWidth) { $ratio = $this->height / $this->width; $newHeight = $newWidth * $ratio; return $newHeight; } private function getSizeByAuto($newWidth, $newHeight) { if ($this->height < $this->width) // *** Image to be resized is wider (landscape) { $optimalWidth = $newWidth; $optimalHeight= $this->getSizeByFixedWidth($newWidth); } elseif ($this->height > $this->width) // *** Image to be resized is taller (portrait) { $optimalWidth = $this->getSizeByFixedHeight($newHeight); $optimalHeight= $newHeight; } else // *** Image to be resizerd is a square { if ($newHeight < $newWidth) { $optimalWidth = $newWidth; $optimalHeight= $this->getSizeByFixedWidth($newWidth); } else if ($newHeight > $newWidth) { $optimalWidth = $this->getSizeByFixedHeight($newHeight); $optimalHeight= $newHeight; } else { // *** Sqaure being resized to a square $optimalWidth = $newWidth; $optimalHeight= $newHeight; } } return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight); } ## -------------------------------------------------------- private function getOptimalCrop($newWidth, $newHeight) { $heightRatio = $this->height / $newHeight; $widthRatio = $this->width / $newWidth; if ($heightRatio < $widthRatio) { $optimalRatio = $heightRatio; } else { $optimalRatio = $widthRatio; } $optimalHeight = $this->height / $optimalRatio; $optimalWidth = $this->width / $optimalRatio; return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight); } ## -------------------------------------------------------- private function crop($optimalWidth, $optimalHeight, $newWidth, $newHeight) { // *** Find center - this will be used for the crop $cropStartX = ( $optimalWidth / 2) - ( $newWidth /2 ); $cropStartY = ( $optimalHeight/ 2) - ( $newHeight/2 ); $crop = $this->imageResized; //imagedestroy($this->imageResized); // *** Now crop from center to exact requested size $this->imageResized = imagecreatetruecolor($newWidth , $newHeight); imagecopyresampled($this->imageResized, $crop , 0, 0, $cropStartX, $cropStartY, $newWidth, $newHeight , $newWidth, $newHeight); } ## -------------------------------------------------------- public function saveImage($savePath, $imageQuality="100") { // *** Get extension $extension = strrchr($savePath, '.'); $extension = strtolower($extension); switch($extension) { case '.jpg': case '.jpeg': if (imagetypes() & IMG_JPG) { imagejpeg($this->imageResized, $savePath, $imageQuality); } break; case '.gif': if (imagetypes() & IMG_GIF) { imagegif($this->imageResized, $savePath); } break; case '.png': // *** Scale quality from 0-100 to 0-9 $scaleQuality = round(($imageQuality/100) * 9); // *** Invert quality setting as 0 is best, not 9 $invertScaleQuality = 9 - $scaleQuality; if (imagetypes() & IMG_PNG) { imagepng($this->imageResized, $savePath, $invertScaleQuality); } break; // ... etc default: // *** No extension - No save. break; } imagedestroy($this->imageResized); } ## -------------------------------------------------------- } ?> Quote Link to comment https://forums.phpfreaks.com/topic/268852-image-upload-validation-not-working/page/2/#findComment-1381699 Share on other sites More sharing options...
DavidAM Posted September 29, 2012 Share Posted September 29, 2012 Glad to help. And, thanks for (1) marking the topic solved; and (2) providing the final solution for future searchers. Quote Link to comment https://forums.phpfreaks.com/topic/268852-image-upload-validation-not-working/page/2/#findComment-1381702 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.