PHP validate image upload

here is some step to validate image upload using php, and save file info into database.

Create database: “db_images”

Create table “img_table” on database “db_images”

CREATE TABLE IF NOT EXISTS `img_table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `filename` varchar(255) NOT NULL,
  `filesize` int(11) NOT NULL,
  `location` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

connect.php

<?php
$host = "localhost";
$user = "root";
$pass = "root";
$dbName = "db_images";
mysql_connect($host, $user, $pass);
mysql_select_db($dbName)
or die ("Connect Failed !! : ".mysql_error());
?>

index.php

<form enctype="multipart/form-data" action="validate_image_upload.php" method="POST">
   	<!-- MAX_FILE_SIZE must be set before the input element -->
	<input type="hidden" name="MAX_FILE_SIZE" value="2048000" />

	<!-- The name from the $_FILES array is determined by the input name -->
	Select an Image: <input name="image_file" type="file" /> <input type="submit" value="Upload" />
</form>

validate_image_upload.php

<?php
include "connect.php";
// Do not show notice errors
error_reporting (E_ALL ^ E_NOTICE);
if(!empty($_FILES)){ // Has the image been uploaded?

	/* 
	1 = Check if the file uploaded is actually an image no matter what extension it has
	2 = The uploaded files must have a specific image extension
	*/
	$validation_type = 1;
	if($validation_type == 1){
		$mime = array('image/gif' => 'gif',
					  'image/jpeg' => 'jpeg',
					  'image/png' => 'png',
					  'application/x-shockwave-flash' => 'swf',
					  'image/psd' => 'psd',
					  'image/bmp' => 'bmp',
					  'image/tiff' => 'tiff',
					  'image/tiff' => 'tiff',
					  'image/jp2' => 'jp2',
					  'image/iff' => 'iff',
					  'image/vnd.wap.wbmp' => 'bmp',
					  'image/xbm' => 'xbm',
					  'image/vnd.microsoft.icon' => 'ico');
	}
	else if($validation_type == 2){ // Second choice? Set the extensions
		$image_extensions_allowed = array('jpg', 'jpeg', 'png', 'gif','bmp');
	}
	$upload_image_to_folder = 'images/';	
		
	$file 		= $_FILES['image_file'];
	$fileSize 	= $_FILES['image_file']['size']; //get the file size
	$file_name 	= $file['name'];
	$error 		= ''; // Empty

	// Get File Extension (if any)
	$ext = strtolower(substr(strrchr($file_name, "."), 1));

	// Check for a correct extension. The image file hasn't an extension? Add one
	if($validation_type == 1){
	$file_info = getimagesize($_FILES['image_file']['tmp_name']);
      if(empty($file_info)){ // No Image?
		$error .= "The uploaded file doesn't seem to be an image.";}
      else{ // An Image?
      $file_mime = $file_info['mime'];
         if($ext == 'jpc' || $ext == 'jpx' || $ext == 'jb2'){
			 $extension = $ext;
			 }
		 else{
			 $extension = ($mime[$file_mime] == 'jpeg') ? 'jpg' : $mime[$file_mime];
			 }
		 if(!$extension){
			 $extension = '';  
			 $file_name = str_replace('.', '', $file_name); 
			 }
		}
   }
   else if($validation_type == 2){
	  if(!in_array($ext, $image_extensions_allowed)){
	  $exts = implode(', ',$image_extensions_allowed);
	  $error .= "You must upload a file with one of the following extensions: ".$exts;
	  }
	  $extension = $ext;
   }

   if($error == ""){ // No errors were found?
	   $new_file_name = strtolower($file_name);
	   $new_file_name = str_replace(' ', '-', $new_file_name);
	   $new_file_name = substr($new_file_name, 0, -strlen($ext));
	   $new_file_name .= $extension;
   
	   // File Name
	   $move_file = move_uploaded_file($file['tmp_name'], $upload_image_to_folder.$new_file_name);

	   if($move_file){
	   		$query = "INSERT into img_table VALUES('','$file_name','$fileSize','images/$file_name')"; //insert image property to database
			$result= mysql_query($query);
		    $done = 'The image has been uploaded.';
		   }
   }
   else{
   @unlink($file['tmp_name']);
   }
   $file_uploaded = true;
}

 if($file_uploaded) {
	 if($done){	echo '<font color="green">'.$done.'</font>'; }
	 else if($error){echo '<font color="red">'.$error.'</font>'; }
	 echo '<br /><br />';
 }
?>

  1. Leave a comment

Leave a comment

Design a site like this with WordPress.com
Get started