آموزش آپلود فایل در PHP - کد آپلود عکس در PHP + ویدئو آموزش

shape
shape
shape
shape
shape
shape
shape
shape
آپلود فایل در php

آموزش آپلود فایل در PHP - کد آپلود عکس در PHP + ویدئو آموزش

آپلود عکس یا فایل در PHP کار ساده ای هست که قرار در چند جلسه از روش های ساده تا حرفه ای تر عمل کنیم.

تو این جلسه ابتدا ساده ترین روش رو انجام میدیم که در انتها شما میتونین ویدئو آموزش رو مشاهده و یا دانلود کنید.

برای آپلود فایل ما دو تا صفحه ایجاد کردیم به نام های index.php که قرار است فرم انتخاب فایل یا عکس داخلش انجام بشه و فایل upload.php که قرار عملیات آپلود فایل انجام بشه.

صفحه index

تو صفحه ایندکس ما یک فرم برای آپلود طراحی کردیم که همین فرم رو به صورت آماده از این سایت گرفتیم و برای اینکه کلاس های bootstrap خونده بشه bootstrap رو به صورت CDN فراخوان کردیم.

کد صفحه index.php

								
	

قبل از رفتن به صفحه آپلود نیاز هست چند مورد رو توضیح بدیم.

ویژگی های فرم : برای آپلود فایل، فرم ما سه ویژگی داره. اولین action هست که باید بگیم عملیات آپلود قرار است کجا انجام بشه که ما اسم صفحه رو گذاشتیم upload.php که شما میتونید هر اسمی دوست داشتین انتخاب کنید. ویژگی بعدی method فرم هست که میگیم به چه روشی فرم ارسال بشه که انتخای ما به صورت POST می باشد. حالا چرا با روش POST؟ چون ویژگی enctype فقط با متد POST قابل ارسال می باشد. و اما خود enctype چیه؟ زمانی بخوایم فایلی آپلود کنیم حتما باید استفاده بشه تا فایل ارسال بشه.

ویژگی name : دقت داشته باشید هر زمان قرار است فرمی submit بشه حتما باید ویژگی name رو برای تگ های input تعریف کنیم چون قرار است در صفحه ای که پردازش کنیم مقدار های name رو دریافت کنیم. که اینجا input از نوع file رو ویژگی name ش رو image گذاشتیم. و name دکمه submit رو گذاشتیم upload.

تو صفحه index کار دیگه ای نداریم. بریم صفحه upload رو توضیح بدیم.

صفحه upload.php



$target_dir = "images/";
$target_file = $target_dir . basename($_FILES["image"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

// Check if image file is a actual image or fake image

if(isset($_POST["upload"])) {
  $check = getimagesize($_FILES["image"]["tmp_name"]);
  if($check !== false) {
    echo "File is an image - " . $check["mime"] . ".";
    $uploadOk = 1;
  } else {
    echo "File is not an image.";
    $uploadOk = 0;
  }
}

// Check if file already exists

/*if (file_exists($target_file)) {
  echo "Sorry, file already exists.";
  $uploadOk = 0;
}*/

// Check file size

if ($_FILES["image"]["size"] > 500000) {
  echo "Sorry, your file is too large.";
  $uploadOk = 0;
}

// Allow certain file formats

if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
  echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
  $uploadOk = 0;
}

// Check if $uploadOk is set to 0 by an error

if ($uploadOk == 0) {
  echo "Sorry, your file was not uploaded.";
  
// if everything is ok, try to upload file

} else {
	$ds = DIRECTORY_SEPARATOR;
	$storeFolder = 'images';
	$temp = explode(".", $_FILES["image"]["name"]);//seperate extension
	$logo = round(microtime(true)) . '.' . end($temp);//1253525989 . jpg
	$tempFile = $_FILES['image']['tmp_name'];
	$targetPath = dirname( 'FILE' ) . $ds. $storeFolder . $ds; // /images/
	$targetFile =  $targetPath. $logo; // images/newimageName.extension
	
	if (file_exists($targetFile)) {
	  echo "Sorry, file already exists.";
	  $uploadOk = 0;
	}
	move_uploaded_file($tempFile,$targetFile);
	
	
	
  /*if (move_uploaded_file($_FILES["image"]["tmp_name"], $target_file)) {
    echo "The file ". htmlspecialchars( basename( $_FILES["image"]["name"])). " has been uploaded.";
  } else {
    echo "Sorry, there was an error uploading your file.";
  }*/
}

برای کد این صفحه از سایت w3schools آپلود فایل رو کپی کردیم و توضیح خواهیم داد و مقداری از کدها رو خودمون اضافه کردیم که اونها رو هم تشریح میکنیم.



$target_dir = "images/";
$target_file = $target_dir . basename($_FILES["image"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

متغیر target_dir : این متغیر برای ذخیره مسیری که قرار فایل آپلود بشه ایجاد کردیم و مسیری که ما بهش دادیم پوشه images هست و شما هم باید کنار فایل upload.php پوشه ای به نام images ایجاد کنید.

متغیر target_file : این متغیر قرار که مسیر کل و همچنین نام فایل ما رو ذخیره کنه. توی این خط کد از تابع basename استفاده شده که کار این تابع برگرداندن اسم نام فایل از یک مسیر هست. یعنی اینکه اگر مسیری به این صورت بهش بدیم :



 basename("/webcamp/images/test.jpg");

خروجی این تابع میشه :
test

متغیر uploadOk : در زمان آپلود فایل شرط های متفاوتی استفاده کردیم که اگر یکی از شرط ها false بشه مقدار این متغیر رو صفر میکنیم که در نهایت فایل آپلود نمیشه.

متغیر imageFileType : ما در متغیر های بالاتر مسیر فایل و نام فایل رو گرفتیم و اینجا پسوند یا extension فایل رو میگیریم که بعد قرار به مسیر بالا اضافش کنیم.



// Check if image file is a actual image or fake image
if(isset($_POST["upload"])) {
  $check = getimagesize($_FILES["image"]["tmp_name"]);
  if($check !== false) {
    echo "File is an image - " . $check["mime"] . ".";
    $uploadOk = 1;
  } else {
    echo "File is not an image.";
    $uploadOk = 0;
  }
}

تو این شرط چک کردیم که اگر فرمی با متد POST و با نام upload اومد برو سایز اون رو بگیر و داخل متغیر $check ذخیره کن.

تابع getimagesize چکار میکنه ؟

این تابع یک پارامتر اجباری داره که آدرس عکس رو بهش میدیم و خروجیش به این صورت هست :



$image_info = getimagesize("https://webcamp.tech/assets/img/logo/logo-60.png");
print_r($image_info);
   
 //خروجی
   Array ( [0] => 60 [1] => 59 [2] => 3 [3] => width="60" height="59" [bits] => 8 [mime] => image/png )

اگر دقت کنیم میبینیم که اطلاعات زیادی درباره عکس به ما میده که با شرط پایین تر چک میکنیم ببینیم از نوع عکس ارسال شده یا نه

اگر عکس بود که متغیر uploadOk مقدارش یک میمونه و از شرط خارج میشه و اگه عکس نبود وارد else میشه و مقدار uploadOk صفر میشه.



if (file_exists($target_file)) {
  echo "Sorry, file already exists.";
  $uploadOk = 0;
}

تابع file_exists : با این تابع و شرط قبل از آن چک میکنیم که آیا فایل با این نام قبلا وجود داشته؟ و اگر داشته که شرط true می شود و مجدد uploadOk مقدار صفر میگیرد.



if ($_FILES["image"]["size"] > 500000) {
  echo "Sorry, your file is too large.";
  $uploadOk = 0;
}

بررسی حجم فایل : تو این شرط بررسی میکنیم که آیا حجم عکس اون مقداری که مشخص کردیم هست یا نه. اینجا ما 5 مگابایت مشخص کردیم که اگر بیش از این مقدار بود وارد شرط شده و مقدار uploadOk صفر می شود.



if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
  echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
  $uploadOk = 0;
}

بررسی نوع فایل : اگر نوع فایلی که قرار است آپلود کنید تصویر باشه با این شرط چک میکنیم که فایلی غیر از فرمت های تصویر آپلود نشه. اگر قرار بود نوع دیگری اضافه کنیم کافیه در ادامه شرط نوع فایل رو اضافه کنیم.



if (move_uploaded_file($_FILES["image"]["tmp_name"], $target_file)) {
    echo "The file ". htmlspecialchars( basename( $_FILES["image"]["name"])). " has been uploaded.";
  } else {
    echo "Sorry, there was an error uploading your file.";
  }
  

تابع move_uploaded_file : این تابع فایل مورد نظر ما رو در مسیر مشخص شده آپلود میکنه که اگر دقت کنید دو پارامتر ورودی دارد. اولی فایلی که قرار آپلود بشه و دومی مسیری که قرار آپلود بشه که ما مسیر رو قبلا در متغیر target_file ذخیره کردیم.



// Check if $uploadOk is set to 0 by an error

if ($uploadOk == 0) {
  echo "Sorry, your file was not uploaded.";
} else {
	$ds = DIRECTORY_SEPARATOR;
	$storeFolder = 'images';
	$temp = explode(".", $_FILES["image"]["name"]);
	$logo = round(microtime(true)) . '.' . end($temp);
	$tempFile = $_FILES['image']['tmp_name'];
	$targetPath = dirname( 'FILE' ) . $ds. $storeFolder . $ds; 
	$targetFile =  $targetPath. $logo; 
	
	if (file_exists($targetFile)) {
	  echo "Sorry, file already exists.";
	  $uploadOk = 0;
	}
	move_uploaded_file($tempFile,$targetFile);
  

این بخش از کد رو خودمون به کد آپلود اضافه کردیم که توضیحات کامل رو تو ویدئو گفتیم. بعد از چک کردن شرط که متغیر uploadOk تمام مسیر رو با مقدار 1 طی کرده باشه در نهایت فایل آپلود خواهد شد. این تکه از کد یک اسم جدید بر اساس زمان جاری انتخاب میکنه تا از آپلود فایل با نام تکراری جلوگیری کنه.

این آموزش با قسمت های حرفه ای تر ادامه خواهد داشت.

فایل های ضمیمه

دیدگاه های شما:

خوشحال میشویم نظر خودتان را درباره این مقاله با ما به اشتراک بگذارید :

اطلاعات شما منتشر نخواهد شد. لطفا فیلد های ستاره دار را تکمیل نمایید. *

آموزش طراحی سایت

عضویت در خبرنامه وب کمپ

با عضویت در خبرنامه وب کمپ آموزش های جدید رایگان برای شما ارسال خواهد شد

shape
shape
shape
shape