PHP File Upload

जब भी हमें PHP Server पर कोई भी File Upload करना होता हैं तब HTML Tag file का उपयोग करते हैं, उसके बाद हम form tag का उपयोग कर Server पर Submit Button के द्वारा Request Send कर देते हैं। ऐसा हमे इसलिए करना होता हैं क्युकी जो भी File हैं वह आपकी Local Computer पर हैं और हम उसे Server पर भेजना चाहते हैं इसलिए हमे PHP का उपयोग कर File को Upload करना होता हैं ।

इस निम्न Code को आप अपने Page पर add करे और एक अन्य Page जिस पर Submit होने पर Request जाएगी उसके बारे में आपको आगे बता रहा हु।

<html>
	<head>
		<title>File Upload</title>
	</head>
	<body>

		<form method = "post" action="FileUploadExmple.php" enctype="multipart/form-data">
			<input type ="file" name="MyFile" id="MyFile">
			<input type ="submit" name="submit" Value="Upload File">
		</form>

	</body>
</html>

अब जो आपको एक PHP File बनाना हैं जिसमे की आप को $_FILES[] का उपयोग कर जो File हमारे द्वारा Select की गई हैं उसके दि गई डायरेक्टरी में Upload कर सकते हैं।


PHP Simple File Upload Example

Code में Comment में हमने कुछ Number लिखे हैं उन सभी Point के बारे में हम आपको समझाते हैं।

<?php

if (isset($_POST['submit']))                                     //1 
{

	$MyDir          = "upload/";                             //2
	
	$SourceFile     = $_FILES["MyFile"]["tmp_name"];         //3
	$SourceFileName = $_FILES["MyFile"]["name"];             //4
	
	$FileName       = basename($SourceFileName);             //5
	$TargetFileName = $MyDir . $FileName;                    //6

	$v = move_uploaded_file($SourceFile, $TargetFileName );  //7
	
	if ($v)                                                  //8   
	{
		Echo "\nFile Uploaded Successfully!";	         //9
	}
	else
	{
		Echo "\nFile Not Uploaded";	                 //10
	}

}

?>

if (isset($_POST[‘submit’])) : इस Syntax से हम चेक करते है की जो हमने पहली फाइल Upload.php या Upload.php जो भी बनायीं हो उसके सबमिट बटन को Press किया हैं क्या ? यदि हा , तो ही यह Code को Read करेगा

$MyDir = “upload/”; : इस Syntax से हम Default Directory का नाम देते हैं यदि आप जहा पर आपको अन्य File Save हैं वही पर स्टोर करना चाहते हैं तो फिर यहाँ पर Blank ही रखे। जो भी आप Directory का नाम दे रहे हैं उस Name से एक Folder जहा पर आपकी यह दोनों File Save हैं उस Folder में जरूर बनाये।

$SourceFile = $_FILES[“MyFile”][“tmp_name”]; : इस Syntax से हम जो हमने File Select की हैं उसका Reference Variable में Store करते हैं ताकि आगे Program में हम उपयोग कर सके।

$SourceFileName = $_FILES[“MyFile”][“name”]; : इस Syntax से हम जो हमने File Select की हैं उसका नाम हमने Variable में Store किया हैं।

$FileName = basename($SourceFileName); : इस Syntax से हम File के Pure Path में से केवल File के नाम को अलग कर रहे हैं। ताकि इस नाम का उपयोग कर हम File को Upload कर सके।

$TargetFileName = $MyDir . $FileName; : इस Syntax से हम एक Target Path बना रहे हैं जहा पर हमें File को Upload करवाना हैं, यहाँ पर Default Directory Name के साथ हमने File के नाम को जोड़कर एक Path बना लिया हैं।

$v = move_uploaded_file($SourceFile, $TargetFileName ); : इस Syntax से हम File को Upload करते हैं। यहाँ पर हमें Source और Target देना होता हैं। और यदि File Upload हो जाती हैं तो $v में True अन्यथा False आ जाता हैं।

if ($v) : इस Syntax से हमने चेक किया हैं की File अपलोड हुई हैं या नहीं। True और False की बेस पर हमें इसके बाद Message Show किये हैं।


Advance Logic

मेरा ध्यान हमेशा Code को Common लिखने में होता हैं यानि की हम जो भी Code बनाये उसका एक Proper Function बना कर उपयोग करे ताकि जब हमें अगली बार same Code का उपयोग करना हो तो हम Copy Paste करने के स्थान पर पहले से बनाये हुए Function का ही उपयोग कर सके।

अब हम एक एक कर File Upload में क्या क्या और Implement कर सकते हैं वह समझेंगे।

  • Create Function : सबसे पहले उपरोक्त Code का एक Function बनाना सीखेंगे।
  • Create Directory Automatically : उसके बाद हमने जो Directory मैन्युअल बनाई थी उसे भी एक Code से बना देंगे।
  • File Type : उसके बाद हम यदि Image ही Upload हो या Text File ही अपलोड हो ऐसा कुछ चेक लगाना चाहे तो भी लगा कर सीखेंगे।
  • File Exists : यदि जो File हम Upload कर रहे हैं वह पहले से मौजूद हो तो उसे Replace करे या न करे उसे बारे में समझेंगे।
  • File Size : यदि आप चाहते हैं की फाइल की साइज भी हम जो बताये उससे ज्यादा की Upload न हो तो हम वह सीखेंगे।
  • Image Pixel Size : यदि हम Image File Upload कर रहे हैं और हम चाहते हैं की हमें जो Pixel Size दे उसके अनुसार ही File अपलोड हो तो वह भी सीखेंगे।
  • Resolution : कभी कभी हमें Image के Resolution पर भी कोई चेक लगाना होता हैं की कम से कम इतने DPI की इमेज होना ही चाहिए तो हम इस तरह के चेक लगा कर भी सीखेंगे।
  • Show Uploaded Image : यदि Image File हैं और आप उसे Upload होने के बाद दिखाना चाहे तो उसे दिखा भी सकते हैं उसके बारे में भी सीखेंगे।
  • Final Function : और अंत में हम सभी Code को एक कर एक आदर्श Function बना लेंगे जिसका उपयोग कर आप File अपलोड कर सकते हैं।

अब हम एक एक कर उपरोक्त सभी Point समझते हैं।


PHP File Upload : Create a Common Function

हमने जो अभी File Upload का Example देखा उसमे MyFile Variable जो की हमने HTML File जहा से हम File Select कर रहे थे उसके अनुसार ही लिया हैं यदि हम इसके Name को एक वेरिएबल में ले तो हमें यदि एक से अधिक फाइल अपलोड करना हैं तो हम केवल Name बदल कर उपयोग कर पाएंगे

साथ ही में हमने जो Directory का नाम लिया हैं उसे भी हम एक Function के Parameter के रूप में Pass करेंगे।

सबसे पहले आपको जो Html फाइल बनाई थी उसमे एक लाइन और Add करना हैं

<input type ="file" name="MyFile" id="MyFile">
<BR><input type ="file" name="MyFile1" id="MyFile1"> <!--Add This Line -->

उपरोक्त लाइन से हमें एक और File Tag लगाया ताकि हम एक और image या File अपलोड कर सके

अब हमें पहले Upload का एक फंक्शन बना लेंगे और फिर उस फंक्शन को 2 बार अलग अलग नाम से Call कर देंगे

Multiple File Upload in PHP

<?php

if (isset($_POST['submit']))
{
	
	function FileUpload($MyDir, $MyFile)
	{

                //1. Comment This and Pass as a Parameter
		//$MyDir          = "upload/";                   

        	//2. Replace First Parameter to a Variable, and pass as a parameter
		$SourceFile     = $_FILES[$MyFile]["tmp_name"];  

                //3. Replace First Parameter to a same Variable
		$SourceFileName = $_FILES[$MyFile]["name"];      
		
		$FileName       = basename($SourceFileName);
		$TargetFileName = $MyDir . $FileName;

		$v = move_uploaded_file($SourceFile, $TargetFileName );
		
		if ($v)
		{
			Echo "\nFile Uploaded Successfully!";	
		}
		else
		{
			Echo "\nFile Not Uploaded";	
		}
	}
	
	FileUpload("upload/", "MyFile");   // For First File
	FileUpload("upload/", "MyFile1");  // For Second File

}

?>

  • //$MyDir = “upload/”; : जो Directory का नाम यहाँ डिफ़ॉल्ट लिया था इसे कमेंट किया हैं और Parameter में Pass किया हैं
  • $SourceFile = $_FILES[$MyFile][“tmp_name”]; : यहाँ पर हमें पहले “MyFile” लिया था उसके स्थान पर अब $MyFile वेरिएबल ले कर उसे भी Function के Parameter के रूप में उपयोग किया हैं।
  • FileUpload(“upload/”, “MyFile”); : यहाँ से हमारे बनाये हुवे function को call किया हैं , यहाँ पर आपको जिस भी Directory में File upload करना हैं वह देना हैं और जिस file tag से File लेना हैं उसका नाम देना हैं , यहाँ पर हमने दो File को एक ही Folder में Upload किया हैं इसलिए हमने Folder/Directory Name को नहीं बदला और File Name को बदल दिया हैं।

हमारे अन्य आर्टिकल


How to Create Directory Automatic

PHP Creating Directory if not Exists

अभी हमें यह ध्यान रखना होता हैं की जो भी हम Default Directory दे रहे हैं वह हमें Manual जा कर बनानी होती है, यदि किसी कारण से हम Directory बनाना भूल जाते हैं तो यह Code Directory Check कर खुद ही बना देगा।

आपको इस कोड को सबसे पहले उपयोग में लेना हैं।

//$MyDir          = "upload/";     //After this line Add 


// For Creating Directory if not Exists

if(!is_dir($MyDir)) 
{
	mkdir($MyDir);
}

अब में आपको सिर्फ जो Code में Change कर रहा हु वही बता रहा हु अंत में सभी Code को Merge कर एक साथ बता दूंगा यदि में बार बार पूरा पूरा Code यहाँ पर लिखूंगा तो article बहुत बड़ा हो जाएगा


File Type Check : किस प्रकार की File ही Upload हो उसके लिए

PHP File Type Checking Before Upload

जब हमें File के Extension पर कोई चेक लगाना होता हैं तो हम इस चेक का उपयोग करते हैं।

इसके लिए हमें सबसे पहले जो फाइल Upload होने वाली हैं उसके नाम में से Extension निकलना होता हैं फिर उसे हमें अपने अनुसार Condition लगाना होती हैं वैसे Simple Logic कुछ इस प्रकार हैं।

//For Get File Extension
$FileType = strtolower(pathinfo($FileName,PATHINFO_EXTENSION));
if ($FileType == 'jpg' or $FileType == 'jpeg' or $FileType == 'png')
{}
else
{
	echo "<BR>Pls upload jpeg, jpg, png File Only";
        return;
}

लेकन हम इसे एक Function में उपयोग कर रहे हैं इसलिए हमें यह Condition यहाँ के बजाये Variable से उपयोग करना होगी इसलिए हम File move upload के पहले निम्न Code को Implement कर देंगे

function FileUpload($MyDir, $MyFile, $AcceptFileType = "")  // Add in Parameter 

function में पैरामीटर में $AcceptFileType = “” Parameter pass करेंगे उसके बाद हम move_uploaded_file function Call करने के पहले हम यह Code लगा देंगे ताकि यदि जो File Type हम Accept करना चाहते हैं वही File Type Accept हो।

if (trim($AcceptFileType) != "")
{	

        $FileType = strtolower(pathinfo($FileName,PATHINFO_EXTENSION));
	$Accept_File_Type=1;
	$ar = explode(",", $AcceptFileType);
	$cnt = count($ar);
	
	for ($i=0; $i<$cnt; $i++)
	{
		$Accept_File_Type=0;
		if (strtolower($ar[$i]) == $FileType)
		{
			$Accept_File_Type=1;
			break;
		}
	}
	
	if ($Accept_File_Type==0)
	{
		echo "<BR>Accept Only (" . $AcceptFileType ." ) Files" ;
		return;
	}
}
FileUpload("upload/", "MyFile", "png,jpg");

MySQL सिखने के लिए क्लिक करे


How to Check File Already Exists or Not (Duplicate File)

यदि यह File पहले से Upload हो और हम चाहते हैं की यह फिर से अपलोड न हो तो हम इस प्रकार से लॉजिक लगा सकते हैं

//, $ShowExistsMsg = false //Add this parameter on Function 

if ($ShowExistsMsg == true)
{	
	if (file_exists($TargetFileName))
	{
		echo "<>$TargetFileName File Already Exists<br>";
         	return;
	}
}
FileUpload("upload/", "MyFile", "png,jpg", true);  

PHP File Upload Size Check

यहाँ पर File की Size Bytes में होती हैं इसलिए हमें उसे KB, MB, GB आदि में बदलना होता हैं। इसके लिए हम इस प्रकार से Function बना सकते हैं।

function GetSizeDesc($val)
{
	if ($val >= (1048 * 1048 * 1048))	
		return 	round($val/(1048 * 1048 * 1048),2) . " GB";
	else if ($val >= (1048 * 1048))		
		return 	round($val/(1048 * 1048),2) . " MB";
	else if ($val >= 1048)		
		return 	round($val/1048,2) . " KB";
	else 
		return 	$val . " Bytes";
}

Function में के Argument बढ़ाना होगा

$MaxFileSize = 0  //Add this Argument in Function 

अब यह हम move_uploaded_flle फंक्शन के पहले कॉल करना हैं

//File Size
if ($MaxFileSize > 0)
{
	$FileSize = $_FILES[$MyFile]["size"];
	if ($FileSize > $MaxFileSize)
	{
	        echo "<BR>Your File Size is ".GetSizeDesc($FileSize).", It is Greater than " . GetSizeDesc($MaxFileSize);
		return;
	}
}

PHP Get Pixel Size of any Image

यदि आप Image Upload कर रहे हैं और आप चाहते हैं की इमेज हमारे द्वारा दी गई Size में ही Accept हो तो आप Width और Height सेट कर सकते हैं , चाहे तो आप इस पुरे Function को अपनी Requirement के अनुसार बदल भी सकते है।

, $PixelW=0, $PixelH=0  // Add Two Arguments 

अब यह फंक्शन जो की सबसे पहले चेक करेगा की Upload की गई File Image है या नहीं , और यदि Image हैं तो उसकी Pixel Check कर लेगा और यदि अपने यह Parameter Pass नहीं किया तो किसी भी प्रकार की Checking नहीं होगी।

// For Pixel Checking
if ( $PixelW > 0 and $PixelH > 0)
{
	$ImagePixel = getimagesize($SourceFile);
	if($ImagePixel !== false)
	{
		$w = $ImagePixel[0];
		$h = $ImagePixel[1];
		
		if ($w != $PixelW or $h != $PixelH)
		{
		      echo "<BR>Accept Only Pixel Size $PixelW X $PixelH.";
		      return;
		}
        }
	else
	{
		echo "<BR>Uploaded File is Not an Image";
		return;
	}
}	

अब हम इस प्रकार से Function को Call करेंगे

FileUpload("upload/", "MyFile", "png,jpg", true, (80 * 1048), 1200, 628);

Image Resolution Check

  • यदि हम Image के Resolution के अनुसार भी कोई Check लगाना चाहते हैं तो इस Code का उपयोग कर सकते हैं
  • इसमें सबसे पहले हम फाइल का Extension का पता लगाते हैं
  • उसके बाद हमें jpeg, png पता लगा कर एक temporary इमेज बनाते हैं
  • और उस Image से हम Resolution को Get करते हैं। आइये समझते हैं।
, $ResH=0, $ResV=0
if ($ResH > 0 and $ResV > 0)
{
	$FileType = strtolower(pathinfo($FileName,PATHINFO_EXTENSION));
	if ($FileType == 'jpeg' or $FileType == 'jpg' or $FileType == 'png')
	{
		$image ="";
		
		if ($FileType == 'png')
			$image = imagecreatefrompng($SourceFile);
		else
			$image = imagecreatefromjpeg($SourceFile);
		
		$v = imageresolution($image);
		$rh = $v[0];
		$rv = $v[1];
					
		if ($rh != $ResH or $rv != $ResV)
		{
		    echo "<BR>Image Resolution (H:$rh V:$rv) is Not Correct Required Resolution is H:$ResH, V:$ResV";
		    return;
		}
	}	
}
FileUpload("upload/", "MyFile", "png,jpg", true, (80 * 1048), 1200, 628, 96,96); 

Show Uploaded Image

How to display image selected by file upload in PHP?

  • यदि आप चाहते हैं की Image Upload होने के बाद दिखाई भी देने लगे तो आप इस Code का उपयोग कर सकते हैं।
  • जब फाइल Successfully Upload हो जाती हैं उसके बाद ही इस Code का उपयोग कर सकते हैं।
, $ImgW=300, $ImgH=150) // Add Function Argument 
  • यहाँ पर हमें डिफ़ॉल्ट वैल्यू दी हैं , आप अपने अनुसार उसमे बदलाव कर सकते हैं।
if ($v)
{
	if ($ShowImgAftUpload == true)
	{
		echo "<BR><img width='$ImgW' height='$ImgH' src='".$TargetFileName."'></img>";
	}
	Echo "<BR>File Uploaded Successfully!";	
}		
FileUpload("upload/", "MyFile", "png,jpg", true, (80 * 1048), 1200, 628, 96,96, true, 300, 150); 

PHP File Upload : A Complete Function (File Upload in PHP Example)

हमने अभी तो जो छोटे छोटे भाग में समझा उनको हमने एक Complete Function बना दिया था

<?php

if (isset($_POST['submit']))
{
	function GetSizeDesc($val)
	{
		if ($val >= (1048 * 1048 * 1048))	
			return 	round($val/(1048 * 1048 * 1048),2) . " GB";
		else if ($val >= (1048 * 1048))		
			return 	round($val/(1048 * 1048),2) . " MB";
		else if ($val >= 1048)		
			return 	round($val/1048,2) . " KB";
		else 
			return 	$val . " Bytes";
	}
	
	
	function FileUpload($MyDir, $MyFile, $AcceptFileType = "", $ShowExistsMsg = false, $MaxFileSize = 0, $PixelW=0, $PixelH=0, $ResH=0, $ResV=0, $ShowImgAftUpload=false, $ImgW=300, $ImgH=150)
	{
		//$MyDir          = "upload/";                   //1. Comment This and Pass as a Parameter
		
		// For Creating Directory if not Exists
		if(!is_dir($MyDir)) 
		{
			mkdir($MyDir);
		}
		
		$SourceFile     = $_FILES[$MyFile]["tmp_name"];  //2. Replace First Parameter to a Variable, and pass as a parameter
		$SourceFileName = $_FILES[$MyFile]["name"];      //2. Replace First Parameter to a same Variable
		$FileName       = basename($SourceFileName);
		$TargetFileName = $MyDir . $FileName;
		
		/*
		//For Get File Extension
		$FileType = strtolower(pathinfo($FileName,PATHINFO_EXTENSION));
		if ($FileType == 'jpg' or $FileType == 'jpeg' or $FileType == 'png')
		{}
		else
		{
			echo "<BR>Pls upload jpeg, jpg, png File Only";
			return;
		}
		*/
		
		if ($ShowExistsMsg == true)
		{	
			if (file_exists($TargetFileName))
			{
				echo "<BR>$FileName File Already Exists";
				return;
			}
		}		
		
		
		if (trim($AcceptFileType) != "")
		{	
			$FileType = strtolower(pathinfo($FileName,PATHINFO_EXTENSION));
			$Accept_File_Type=1;
			$ar = explode(",", $AcceptFileType);
			$cnt = count($ar);
			
			for ($i=0; $i<$cnt; $i++)
			{
				$Accept_File_Type=0;
				if (strtolower($ar[$i]) == $FileType)
				{
					$Accept_File_Type=1;
					break;
				}
			}
			
			if ($Accept_File_Type==0)
			{
				echo "<BR>Accept Only (" . $AcceptFileType ." ) Files" ;
				return;
			}
		}
		
		
		
		//File Size
		if ($MaxFileSize > 0)
		{
			$FileSize = $_FILES[$MyFile]["size"];
			if ($FileSize > $MaxFileSize)
			{
				echo "<BR>Your File Size is ".GetSizeDesc($FileSize).", It is Greater than " . GetSizeDesc($MaxFileSize);
				return;
			}
		}
		
		// For Pixel Checking
		if ( $PixelW > 0 and $PixelH > 0)
		{
			$ImagePixel = getimagesize($SourceFile);
			if($ImagePixel !== false)
			{
				$w = $ImagePixel[0];
				$h = $ImagePixel[1];
				
				if ($w != $PixelW or $h != $PixelH)
				{
					echo "<BR>Accept Only Pixel Size $PixelW X $PixelH.";
					return;
				}
			}
			else
			{
				echo "<BR>Uploaded File is Not an Image";
				return;
			}
		}


		if ($ResH > 0 and $ResV > 0)
		{
			$FileType = strtolower(pathinfo($FileName,PATHINFO_EXTENSION));
			if ($FileType == 'jpeg' or $FileType == 'jpg' or $FileType == 'png')
			{
				$image ="";
				
				if ($FileType == 'png')
					$image = imagecreatefrompng($SourceFile);
				else
					$image = imagecreatefromjpeg($SourceFile);
				
				$v = imageresolution($image);
				$rh = $v[0];
				$rv = $v[1];
					
				if ($rh != $ResH or $rv != $ResV)
				{
					echo "<BR>Image Resolution (H:$rh V:$rv) is Not Correct Required Resolution is H:$ResH, V:$ResV";
					return;
				}
					
			}	
		}
		

		$v = move_uploaded_file($SourceFile, $TargetFileName );
		if ($v)
		{
			if ($ShowImgAftUpload == true)
			{
				echo "<BR><img width='$ImgW' height='$ImgH' src='".$TargetFileName."'></img>";
			}
			
			Echo "<BR>File Uploaded Successfully!";	
		}
		else
		{
			Echo "<BR>File Not Uploaded";	
		}
	}
	
	FileUpload("upload/", "MyFile", "png,jpg", true, (80 * 1048), 1200, 628, 96,96, true, 300, 150);   // For First File
	
	FileUpload("upload/", "MyFile1");  // For Second File
}

?>

आशा हैं मुझे की आपको FileUpload Function को बहुत अच्छे से समझ गए होंगे फिर भी यदि आप को कोई भी Doubt हो तो आप Comment कर सकते हैं।

यह आर्टिकल आपको कैसा लगा हमे जरूर बताए ।

अपना कीमती समय देने के लिए धन्यवाद

One Comment

Add a Comment

Your email address will not be published. Required fields are marked *