آموزش آپلود فایل در php همراه با امنیت

خدمت شما کاربران محترم وبسایت آموزش برنامه نویسی و طراحی وب سلام عرض می کنم. امروز هم با یک آموزش ویژه در خدمت شما هستم. امروز با آموزش آپلود تصویر توسط php در خدمت شما هستیم.
پیش نیازها:
آپلود فایل توسط php
همانطور که می دانید آپلود و بارگزاری تصویر از ابزارهایی بسیار کاربردی برای مدیریت یک وبسایت است. توسط PHP به راحتی می توانید فایل ها را در سرور آپلود کنید. البته همین راحتی در آپلود فایلها می تواند امنیت سایت را به خطر بیاندازد پس حتما باید مراقب فایل های ارسالی باشید. در این آموزش ابتدا فایل آپلود شده را از نظر نوع و حجم بررسی می کنیم و در صورت صحت اطلاعات آن را روی سرور آپلود می کنیم.
پیکره بندی فایل "php.ini"
file_uploads = On
ساخت فرم HTML
<!DOCTYPE html>
<html>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
Select image to upload: <input type="file" name="myFile" id="myFile">
<input type="submit" value="Upload Image" name="submit">
</form>
</body>
</html>
در فرم بالا دقت داشته باشید که دو نکته زیر را حتما رعایت کنید:
- فرم حتما با روش post ارسال شود.
- فرم حتما بایستی از خصوصیت enctype="multipart/form-data" استفاده کند. این خصوصیت مشخص می کند که فرم چه نوع محتوایی را ارسال می کند.
ساخت فایل آپلود در PHP
<?php
$upload_dir = "uploads/";
$upload_file = $upload_dir . basename($_FILES["myFile"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($upload_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["myFile"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
?>
توضیج کدهای PHP بالا:
- $upload_dir = "uploads/": تعیین کننده پوشه یا دایرکتوری محل ذخیره فایل است
- $upload_file: تعیین کننده مسیره ذخیره فایل است.
- $uploadOk: مقدار پیشفرض 1 دارد و اگر در هنگام آپلود فایل خطایی صورت گرفت مقدار آن برابر 0 می شود و سپس پیام اخطار نمایش داده میشود.
- $imageFileType: توسط تابع pathinfo پسوند فایل فرستاده شده را در خود ذخیره میکند.( حروف بزرگ به کوچک تبدیل می شوند)
if (file_exists($upload_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
این کار توسط تابع file_exists() روی مسیر تعیین شده توسط $upload_file انجام می شود. این تابع موجودیت یک فایل را در مسیر داده شده بررسی می کند و مقدار true یا false را بر می گرداند.
بررسی اندازه فایل
if ($_FILES["myFile"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
محدودیت برای نوع فایل
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
تکمیل فایل upload.php
در نهایت مقدار $uploadOk را بررسی می کنیم. اگر 0 بود پیام خطای آپلود فایل به کاربر نمایش داده می شود. و اگر برابر با 1 بود توسط تابع move_uploaded_file() تصویر مورد نظر را آپلود می کنیم. این تابع دو پارامتر اجباری دریافت می کند. اولین پارامتر فایل آپلود شده در پوشه مقوت tmp سرور و دومین پارمتر مسیر تعیین شده برای آپلود فایل روی سرور است.
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["myFile"]["tmp_name"], $upload_file)) {
echo "The file ". basename( $_FILES["myFile"]["name"]). " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
نظرات کاربران