keyboard_return  چسبون مقالات آموزشی آپلود تصویر در PHP
  1. آپلود تصویر در PHP

چطور یک تصویر را در PHP آپلود کنیم

سلام خدمت شما دوستان عزیز. در این پست آموزشی قصد داریم نحوه آپلود یک تصویر در PHP را آموزش دهیم. در این آموزش سعی شده تا فایل انتخاب شده از لحاظ نام، حجم، نوع تصویر بررسی گردد تا از بار گذاری فایل های مخرب جلوگیری به عمل آید.

PHP-Image-Uploading

خب در این آموزش ما از دو فایل با نام index.php و upload.php استفاده کردیم. فایل ایندکس حاوی یک فرم بوده که برای انتخاب تصویر و ارسال آن به سرور به کار می رود. در فایل upload.php نیز فایل ارسال شده را مورد بررسی قرار می دهیم در صورتیکه فایل از قوانین لحاظ شده پیروی کند بارگذاری شده و در غیر اینصورت پیغام خطایی نمایش داده خواهد شد.

قدم اول: یک فایل با نام index.php بسازید و کد زیر را در آن کپی کنید.

<!DOCTYPE html>
<html>
<head>
	<title>chasboon.ir - Upload file in php</title>
</head>
<body>
<form action="Upload.php" method="POST" name="uploadForm" enctype="multipart/form-data">
	<input type="file" name="fileToUpload">
	<input type="submit" name="submit" value="Send">
</form>
</body>
</html>

خب یک فرم ساختیم که دارای یک کادر برای انتخاب تصویر و یک دکمه جهت ارسال تصویر انتخاب شده به سرور می باشد. قبل از آپلود تصویر باید تصویر رو از لحاظ صحت و درستی مورد بررسی قرار دهیم بنابراین خاصیت اکشن فرم را Upload.php قرار دادیم همچنین داده ها با استفاده از متد POST به صفحه upload.php ارسال می شود. جهت آپلود فایل حتما باید خاصیت enctype فرم را برابر با multipart/form-data قرار دهید در غیر اینصورت آپلود کار نخواهد کرد. در ادامه با استفاده از نامی که برای تگ input انتخاب کردیم به مقادیر آن در سایر صفحات دسترسی خواهیم داشت (name="fileToUpload") در وارد کردن خاصیت name این عنصر دقت داشته باشید.

قدم دوم: یک فایل با نام Upload.php بسازید و کد زیر را در آن کپی کنید:

<!DOCTYPE html>
<html>
<head>
	<title></title>
	<meta charset="UTF-8">
</head>
<body>
<?php 
$fileDir= "images/";
$fileName= $fileDir. basename($_FILES['fileToUpload']['name']);
$uploadOk= 1;

$fileType= pathinfo($fileName, PATHINFO_EXTENSION);

if (isset($_POST['submit'])) {
	echo "درخواست معتبر است.";// Delete this line later
	// check not empty file name.
	if (empty(basename($_FILES['fileToUpload']['name']))) {
		echo "<br>هیچ فایلی انتخاب نشده است.";
		$uploadOk= 0;
	}
	else {
		//Check file size:
		if ($_FILES['fileToUpload']['size'] > 600000) {
			echo "<br>اندازه فایل زیاد است. فایل کوچکتری انتخاب کنید.";
			$uploadOk= 0;
		}
		//check existing file
		if (file_exists($fileName)) {
			echo "<br>فایل تکراری است.";
			$uploadOk= 0;
		}
		//check image- an actual image or fake
		$check= getimagesize($_FILES['fileToUpload']['tmp_name']);
		//if actual image:
		if ($check !== false) {
			//check file extensions: you can select only (jpg, jpeg, png, gif) file
			if ($fileType != 'jpg' && $fileType != 'jpeg' && $fileType != 'png' && $fileType != 'gif') {
				echo "<br>فایل انتخاب شده معتبر نیست. پسوند jpg, jpeg, png, gif انتخاب کنید.";
				$uploadOk= 0;
			}
		}
		//if fake image:
		else {
			echo "<br>فایل انتخاب شده تصویر نیست.";
			$uploadOk= 0;
		}
	}
	//check $uploadok variable
	if ($uploadOk !== 0) {
		if (move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $fileName)) {
					echo "<br>تصویر با موفقیت آپلود شد.";
		}
		else {
			echo "<br>خطایی هنگام بارگذاری رخ داده است";
			$uploadOk= 0;
		}
		
	}
	//If Error, show 'Go back' link
	else {
		echo "<a href='index.php'>Go back</a>";
	}
}
else {
	//Ohhhh, return to main menu.
	header('location:index.php');
	exit();
}
?>
</body>
</html>

ابتدا چهار متغیر تعریف کردیم:

fileDir$ : نام پوشه ای که تصویر در آن ذخیره خواهد شد.

fileName$ : نام فایل انتخاب شده توسط کاربر

uploadOk$ : به منظور بررسی وضعیت آپلود- آپلود موفقیت آمیز بوده یا خیر

fileType$ : برای بررسی نوع فایل (پسوند فایل)

POST_$ یک متغیر سراسری در PHP می باشد که برای جمع آوری و کار با داده های ارسال شده فرمی که از روش POST برای ارسال داده ها استفاده کرده به کار می رود. می توانید نام عنصرهای فرم ارسال کننده را جلوی این متغیر اضافه کنید تا به مقادیر آن عنصر دسترسی پیدا کنید.

if (isset($_POST['submit'])) {
	// کاربر فایل یرا جهت اپلود ارسال کرده
}
else {
	//دسترسی غیر مجاز.
	header('location:index.php');
	exit();
}

تابع ()isset در PHP بررسی می کند آیا مقداری برای متغیر تعیین شده یا خیر. در صورتیکه کاربر روی دکمه "آپلود" کلیک کند داده ها با روش POST به صفحه Upload.php ارسال می شود. اگر isset مقدار ۱ را برگرداند یعنی کاربر روی دکمه آپلود کلیک کرده و در غیر اینصورت مقدار صفر را بر میگرداند. با استفاده از این شرط بررسی می کنیم آیا عمل submit اتفاق افتاده است یا خیر (ممکن است کاربر بدون کلیک روی دکمه آپلود، با استفاده از وارد کردن آدرس صفحه Upload.php در مرورگر به طور مستقیم به این صفحه آمده باشد که باید جلوی آن گرفته شود). با استفاده از تابع header کاربر را به صفحه index.php هدایت می کنیم.

if (empty(basename($_FILES['fileToUpload']['name']))) {
		echo "<br>هیچ فایلی انتخاب نشده است.";
		$uploadOk= 0;
	}

سپس بررسی میکنیم آیا فایلی انتخاب شده است یا کاربر بدون انتخاب تصویر روی دکمه آپلود کلیک کرده. در صورتیکه نام فایل خالی باشد یک پیغام خطا ظاهر شده و وضعیت آپلود نیز روی صفر تنظیم می شود تا از آپلود اشتباهی فایل جلوگیری به عمل آید. تابع empty در صورتیکه متغیر خالی باشد مقدار ۱ را بر می گرداند و در غیر اینصورت خروجی آن صفر خواهد بود.

FILES_$ نیز یک متغیر سراسری در PHP می باشد که می توانید برای دسترسی به فایل آپلود شده از آن استفاده کنید با استفاده از این متغیر نام فایل، سایز فایل و نوع آن را بررسی می کنیم.

if ($_FILES['fileToUpload']['size'] > 600000) {
			echo "<br>اندازه فایل زیاد است. فایل کوچکتری انتخاب کنید.";
			$uploadOk= 0;
		}

حداکثر حجم مجاز برای تصویر آپلود شده در این مثال ۶۰۰ کیلو بایت (۶۰۰۰۰۰) در نظر گرفته شد که شما می توانید آن را تغییر دهید.

//check existing file
if (file_exists($fileName)) {
	echo "<br>فایل تکراری است.";
	$uploadOk= 0;
}

هنگام آپلود تصویر باید دقت داشته باشید فایلی با این نام در پوشه مقصد وجود نداشته باشد چرا که در اینصورت فایل قبلی حذف شده و فایل جدید جایگزین آن خواهد شد. به همین منظور با استفاده از تابع file_exists بررسی میکنیم که فایلی با این نام از قبل وجود دارد یا خیر.

$check= getimagesize($_FILES['fileToUpload']['tmp_name']);

تابع ()getimagesize نیز اندازه تصویر آپلود شده را بر می گرداند با استفاده از این تابع می توانیم تشخیص دهیم آیا فایلآپلود شده یک تصویر واقعی است یا کاربر پسوند فایل را تغییر داده و قصد دارد یک فایل جعلی را آپلود کند.

if ($fileType != 'jpg' && $fileType != 'jpeg' && $fileType != 'png' && $fileType != 'gif') {
	echo "<br>فایل انتخاب شده معتبر نیست. پسوند jpg, jpeg, png, gif انتخاب کنید.";
	$uploadOk= 0;
}

درصورتیکه فایل از نوع تصویر بود پسوند های مورد نظر که کاربر می تواند آپلود کند را تعیین کردیم (jpeg, jpg, png, gif)

if ($uploadOk !== 0) {
	if (move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $fileName)) {
		echo "<br>تصویر با موفقیت آپلود شد.";
	}
	else {
		echo "<br>خطایی هنگام بارگذاری رخ داده است";
		$uploadOk= 0;
	}
}

در هر مرحله با استفاده از دستورات شرطی و مقدار دهی متغیر uploadok وضعیت آپلود را می توانیم کنترل کنیم. در صورتیکه این متغیر مقدار ۱ داشته باشد فایل مجاز به آپلود شدن می باشد و در غیر اینصورت از آپلود فایل جلوگیری بعمل می آید. در صورتیکه که این متغیر مقدار ۱ داشته باشد با استفاده از تابع ()move_uploaded_file تصویر را در مسیر مشخص (در این مثال پوشه image) ذخیره می کنیم. خب امیدوارم این آموزش رو پسندیده باشید. چسبون - مرجع برنامه نویسی و طراحی وب

آپلود تصویر در PHP - 4.2 از 5 بر اساس 150 رای

امتیاز کاربران

آپلود تصویر در PHP
دیدگاه‌ها

دیدگاهی وجود ندارد

2024 © Copyright کليه حقوق مادی و معنوی براي چسبون محفوظ است و هرگونه کپی برداری پیگرد قانونی دارد.