Notice: A non well formed numeric value encountered in /datas/bteqir/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118
Notice: A non well formed numeric value encountered in /datas/bteqir/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119
Notice: A non well formed numeric value encountered in /datas/bteqir/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118
Notice: A non well formed numeric value encountered in /datas/bteqir/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119
Notice: A non well formed numeric value encountered in /datas/bteqir/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118
Notice: A non well formed numeric value encountered in /datas/bteqir/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119
Notice: A non well formed numeric value encountered in /datas/bteqir/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118
Notice: A non well formed numeric value encountered in /datas/bteqir/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119
Notice: A non well formed numeric value encountered in /datas/bteqir/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118
Notice: A non well formed numeric value encountered in /datas/bteqir/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119
Notice: A non well formed numeric value encountered in /datas/bteqir/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118
Notice: A non well formed numeric value encountered in /datas/bteqir/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119
Notice: A non well formed numeric value encountered in /datas/bteqir/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118
Notice: A non well formed numeric value encountered in /datas/bteqir/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119
آموزش آپلود فایل در php
امروزه آپلود فایل یکی از امکانات اصلی وبسایتها به حساب می آید. گالری تصاویر، فایل ایمیل شده، ویدئوی آنلاین و … همه به خاطر وجود امکان آپلود فایل از طریق مرورگر کاربرها است که تا این حد گسترش پیدا کرده است.
در این آموزش قصد داریم به این ویژگی مهم در زبان PHP بپردازیم و ببینیم که چطور میتونیم در php فایلها رو آپلود کنیم.
پیشنیاز
آپلود فایل در php کار پیچیده ای نیست، ولی چند مورد هست که باید به آنها توجه کنید. در غیر این صورت احتمالا با مشکل مواجه میشوید.
اول از همه باید مطمئن بشید که تنظیمات آپلود فایل در php فعال است. برای اینکار فایل php.ini
رو بررسی کنید تا مولفه file_uploads
برابر on
باشد.
1 |
file_uploads = On |
ساخت فرم HTML برای آپلود فایل
کد html برای پیاده سازی سمت کاربر استفاده میشود. در المنت form از متد post
استفاده میکنیم. توجه داشته باشید که enctype
برابر multipart/form-data
است.
1 2 3 4 5 |
<form action="upload.php" method="post" enctype="multipart/form-data"> Select image to upload: <input type="file" name="fileToUpload" id="fileToUpload"> <input type="submit" value="Upload Image" name="submit"> </form> |
نکاتی در مورد کد بالا:
multipart/form-data
نوع داده ارسالی را مشخص میکند.type="file"
در تگinput
مشخص میکند که فرم آپلود باید نمایش داده شود.- کد بالا داده های فرم را به سمت
upload.php
میکند که در قدم بعدی پیاده سازی میکنیم.
کد نویسی قسمت PHP
فایل upload.php
دارای کدهای زیر است:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$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
مسیر فایل آپلود شده را مشخص میکند.$uploadOk=1
در ادامه کد استفاده خواهد شد.$imageFileType
پسوند فایل را نگه میدارد.- و بعد بررسی میکنیم که تصویر آپلود شده یک تصویر واقعی است یا خیر. (یک ترفند امنیتی)
حالا میتوانیم کمی به ویژگیهای کدمان اضافه کنیم. ولی قبل از آن بهتر است کمی بیشتر در مورد $_FILES
بدانیم ?
$_FILES["fileToUpload"]["name"]
نام اصلی فایل در سمت کاربر را در خود دارد.$_FILES["fileToUpload"]["type"]
نامmime-type
فایل را در خود دارد.$_FILES["fileToUpload"]["size"]
سایز فایل را بر اساس بایت نمایش میدهد.$_FILES["fileToUpload"]["tmp_name"]
نام فایل موقت را دارد.$_FILES["fileToUpload"]["error"]
هر خطایی که در هنگام انتقال فایل وجود داشته باشد را دارد.
بررسی وجود فایل از قبل
اول از همه بررسی میکنیم که آیا فایلی با این نام از قیل وجود داشته در دایرکتوری مقصد یا خیر، و یک پیغام نمایش میدهیم.
1 2 3 4 5 |
// Check if file already exists if (file_exists($target_file)) { echo "Sorry, file already exists."; $uploadOk = 0; } |
محدود کردن سایز فایل آپلود
توجه کنید که نام فیلد فایل در فرم HTML ما در fileToUpload
است. میخواهیم سایز فایل را بخوانیم و اگر از 500KB بیشتر بود یک پیغام خطا نمایش بدیم.
1 2 3 4 5 |
// Check file size if ($_FILES["fileToUpload"]["size"] > 500000) { echo "Sorry, your file is too large."; $uploadOk = 0; } |
محدود کردن نوع فایل
کد زیر به کاربران اجازه میدهد که فقط فایلهایی با پسوند JPEG، JPG، PNG و GIF را آپلود کنند. هر فایل دیگری باعث میشود پیغام خطا نمایش داده شود.
1 2 3 4 5 6 |
// 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; } |
کد کامل آپلود فایل در php
کد کامل فایل upload.php به این صورت است:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
$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."; } } |
توضیحاتی در مورد کد
move_uploaded_file()
این تابع فایل آپلود شده را از مکان موقت به آدرس مقصد مورد نظر منتقل میکند.