آموزش آپلود فایل در php
معمولا در بعضی از سایت ها لازم می شود که فرمی را در سایت تعبیه نموده که توسط آن کاربران بتوانند فایل های مورد نظر خود را در سایت آپلود نمایند ( از جمله آپلود فایل رزومه ، عکس و…). حال قبل از آموزش آپلود فایل در php و کدنویسی فرم ارسال فایل لازم است که ابتدا مطمئن شوید که تنظیمات آن فعال است. برای این کار اول باید فایل php.ini را بررسی نمایید و file_uploads را به حالت on قرار دهید. روش دسترسی به فایل php.ini در لوکال هاست و cpanel در ادامه آموزش داده شده است.
Php.ini در لوکال هاست (نرم افزار Xamp)
این فایل در وب سرور Xampp با توجه به نسخه های مختلف ، عموما در مسیر های زیر وجود دارد:
\xampp\php\php.ini
\xampp\apache\bin\php.ini
\xampp\etc\php.ini
این قطعه کد ابتدا یک فرم آپلود ایجاد نموده و سپس اطلاعات موردنظر خود را به فایل upload.php می فرستد تا برروی آن اطلاعات را پردازش کند.
درون تگ input ، مشخصه type را برابر file قرار دادهایم تا اعلام کنیم که نوع ورودی، به صورت فایل میباشد. بنابراین درون فرم، یک دکمه browse به کاربر نمایش دادهمیشود تا با آن بتواند فایل موردنظر را از کامپیوتر خود انتخاب نماید.
آموزش آپلود فایل در php به همراه مثال
فایل upload.php را ایجاد کنید و قطعه کد زیر را در آن قرار دهید.$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
توضیحاتی در مورد کد بالا
$target_dir = “uploads/” دایرکتوری که فایلها در آن ذخیره می شوند را مشخص میکند.
$target_file مسیر فایل آپلود شده را مشخص می نماید.
$imageFileType پسوند فایل را نگه میدارد.
$_FILES[“fileToUpload”][“name”] نام اصلی فایل در سمت کاربر را در خود دارد.
$_FILES[“fileToUpload”][“size”]سایز فایل رابه بایت نمایش می دهد.
$_FILES[“fileToUpload”][“tmp_name”] نام فایل موقت را دارد.
البته باید دقت داشت که هنگامی که به کاربر اجازه می دهید فایلی را بر روی سرور سایت شما آپلود کند، عملا راهی برای نفوذ به سایت خود را در اختیار وی قرار داده اید. بنابراین برای جلوگیری از هک شدن سایت باید یک سری محدودیت هایی را برای آپلود فایل در php در نظر بگیرید.
امنیت در آپلود فایل در php
بررسی موجود بودن فایل از قبل
قاعدتا باید فایل آپلود شده توسط کاربر موجود باشد. قطعه کد زیر موجود بودن یا نبودن فایل را بررسی می نماید و در صورت موجود نبودن فایل به کاربر پیغام “فایل موجود نیست “را نمایش می دهد.// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
محدود کردن سایز فایل
در کد زیر تعیین کرده ایم که اگر فایلی که کاربر آپلود می کند بیشتر از 300KB بود برای آن پیغام “فایل شما بزرگ است” را به نمایش در بیاورد.// Check file size
if ($_FILES["fileToUpload"]["size"] > 300000) {echo "Sorry, your file is too large.";
$uploadOk = 0;
}
محدود کردن نوع فایل
در کد زیر بیان کرده ایم که اگر کاربر هر نوع فایلی به جز GIF, JPG, JPEG, PNG را آپلود نمود برای او پیغام خطا نمایش داده شود.
// 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;
}
لذا کد کامل شده ی امنیت به صورت زیر می باشد.$target_dir = "uploads/";
$target_file = $target_dir . basename( $_FILES["fileToUpload"]["name"] );
$uploadOk = 1;
$imageFileType = strtolower( pathinfo( $target_file, PATHINFO_EXTENSION ) );
// Check if image file is a actual image or fake image
if ( isset( $_POST["submit"] ) ) {
$check = getimagesize( $_FILES["fileToUpload"]["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["fileToUpload"]["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 {
if ( move_uploaded_file( $_FILES["fileToUpload"]["tmp_name"], $target_file ) ) {
echo "The file " . basename( $_FILES["fileToUpload"]["name"] ) . " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
استفاده از کد کپچا
کدهای کپچا یا تصاویر امنیتی ، کلمات به هم ریخته ای هستند که با یک الگوریتم خاص تولید می شوند. با قرار دادن این عبارات به هم ریخته در فرم و شرط صحیح وارد کردن آن ها توسط کاربر ، به راحتی می توان انسان را از ربات تشخیص داده و امنیت فرم های php را دوچندان کرد. برای ایجاد کدهای کپچا در php و وردپرس پیشنهاد می کنیم که حتما مقالات مربوط به آن ها را در بخش آموزش کد کپچا در php و افزونه کد کپچا وردپرس مطالعه فرمایید.
نتیجه گیری
ما با این آموزش قصد داشتیم که به شما آپلود فایل در php و راهکارهای امنیتی را نشان دهیم. از آنجایی که امنیت سایت با آپلود فایل ممکن است به خطر بیفتد باید فرمهای آپلود خود را به یک تیم حرفه ایی و کاربلد بسپارید. تیم وب یار آمادهی هرگونه کمک رسانی به شما دوستان عزیز در زمینهی طراحی وب سایت و سئو سایت است.
در اینستاگرام هم ما را دنبال کنید!