شنبه ۱ دی ۱۴۰۳ |  عضویت / ورود

آموزش آپلود فایل از طریق یک فرم در پی.اچ.پی (How to upload a file in PHP)


Thursday, 2011 April 21   نویسنده: Hamid   تعداد بازدید: 22533 بار  #آموزش PHP‏   امتیاز متوسط: امتیازی داده نشده است

بحث آپلود فایل در PHP نکاتی دارد که باید به آن دقت کنید. پیش از هر چیز هشدار می‌دهیم که یک فیلد آپلود فایل، اولین جایی است که یک هکر برای نفوذ به سایت، به آن فکر می‌کند!
پس به شدت مراقب باشید و نکات ایمنی که توضیح خواهم داد را رعایت کنید.

ما بحث آپلود فایل روی سرور را به چند مرحله تقسیم می‌کنیم:

1- طراحی فرم برای دریافت فایل از کاربر:

ابتدا به این کد دقت کنید و سعی کنید آن‌را تحلیل کنید:

<form enctype="multipart/form-data" action="upload.php"  method="post">
  <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
  <input type="file" name="attachment" />

  <input type="submit" value="ارسال" />

</form>

فرم به این صورت دیده خواهد شد:

http://tutorials.aftab.cc/web_designing/php/upload_file_on_server_php/upload_form1.png

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

در این مرحله توجه به نکات زیر الزامی است:

- در فرمی که قرار است یک فایل را به صفحه پردازشگر ارسال کند، نوشتن عبارت enctype="multipart/form-data"‎ الزامی است. (خط اول در کد بالا)

- متود این نوع فرم‌ها حتماً باید post باشد. (خط اول در کد بالا)

- یک تگ input با نوع file نیاز دارید. (خط سوم در کد بالا)

- خط دوم کد بالا فیلدی مخفی (hidden) برای تعیین حجم مجاز فایل در سمت کلاینت. اگر از این فیلد استفاده نکنید، کاربر ممکن است یک فایل حجیم را انتخاب کند و زمان زیادی منتظر بماند تا آپلود شود و بعد شما در سمت سرور حجم را بررسی کنید و بگویید که حجم آن زیاد است!! از این فیلد استفاده کنید تا بدون معطلی، اگر حجم فایل، بیش از حد مجاز بود، به کاربر هشدار داده شود. (حجم را بر حسب بایت وارد کنید)
هشدار: دور زدن این فیلد بسیار ساده است! پس فقط به استفاده از این فیلد اکتفا نکنید و در سمت سرور نیز حجم فایل را بررسی کنید!

2- کدنویسی فایل پردازشگر فرم:

حالا باید فایل upload.php را کدنویسی کنید.

به کد زیر دقت کنید و سعی کنید آن‌را تحلیل کنید:

<?php
$uploaddir='backup/'; $uploadfile=$uploaddir . basename($_FILES['attachment']['name']); if (move_uploaded_file($_FILES['attachment']['tmp_name'], $uploadfile)) { echo 'فایل با موفقیت آپلود شد'; } else echo 'مشکلی در آپلود فایل به وجود آمد.
- حجم فایل باید کمتر از 1000 کیلوبایت باشد.
- پوشه backup باید دارای سطح دسترسی 777 باشد.'
; ?>

مراحل:

- ابتدا در خط دوم یک متغیر در نظر گرفته‌ایم که مسیر آپلود را مشخص می‌کند.

- در خط سوم، نام فایل را به دست آورده‌ایم و به انتهای مسیر آپلود چسبانده‌ایم.

- در خط چهارم گفته‌ایم اگر عملیات آپلود فایل با موفقیت انجام شد، پیغام "فایل با موفقیت آپلود شد" را نمایش بده. در غیر اینصورت، خطاهای احتمالی را.

3- بررسی پسوند:

اگر می‌خواهید فایل را محدود به یک پسوند خاص کنید (مثلاً jpg) از قطعه کد زیر استفاده کنید:

این کد را باید قبل از echoی اول در کد بالا به کار بگیرید.

if (substr(basename($_FILES['attachment']['name']), -4) != ".jpg") { die 'پسوند فایل، معتبر نیست. پسوند باید .jpg باشد.'; }

4- خواندن فایل:

اگر می‌خواهید اطلاعات فایلی که آپلود شده است را بخوانید و احتمالاً بررسی کنید که حاوی کدهای مخرب و ... نباشد، از قطعه کد زیر استفاده کنید:

$file='backup/' . basename($_FILES['attachment']['name']); $handle=fopen($file, 'r'); $theData=fread($handle, filesize($file)); fclose ($handle);

این کد را باید بعد از echoی اول در کد فایل پردازشگر به کار بگیرید.

حالا تمام محتوای فایل در متغیر theData است. می‌توانید آن را به هر صورت که خواستید پردازش کنید...

توجه: در این مقاله، کلماتی مثل MAX_FILE_SIZE و name در $_FILES['attachment']['name']‎ کلمات کلیدی هستند و نباید تغییر یابند. (بهتر است اگر در ابتدای راه هستید، نام‌ها را تغییر ندهید)

موفق باشید؛
حمید رضا نیرومند


.



ارسال سؤال یا نظر


1- سینا:
بوسیله: , در: Friday, 2011 September 30-کد: 3522
خوب بود گرچه ساده بود ولی کلفی بوده واسه شروع...


2- afshin:
بوسیله: , در: Wednesday, 2011 October 26-کد: 3602
عالی بود مرسی


3- مینایی:
بوسیله: , در: Monday, 2011 December 26-کد: 3767
باسلام و خسته نباشید
خیلی عالی بود .
فقط من نفهمیدم که فایلی که قرار است در هاست اپ بشه تو کدو پوشه و به چه نامی و در داخل php کدوم آدرس و کجا باید بکار گیری شود .
ممنونم اگر راهنمائی بفرمائید .
مرسی و زنده باشید
مینایی


4- am:
بوسیله: , در: Tuesday, 2012 May 08-کد: 4279
very good


5- محسن:
بوسیله: , در: Monday, 2012 June 11-کد: 4427
مرسیییییییییییییی


6- محسن:
بوسیله: , در: Monday, 2012 June 11-کد: 4428
مرسیییییییییییییی


7- behzad:
بوسیله: , در: Monday, 2012 October 29-کد: 5187
با سلام
این کوتاه ترین و بهترین کد ممکن بود
واقعا ممنونم


8- ali:
بوسیله: , در: Saturday, 2013 March 09-کد: 6387
خیلی کمکم کردید ممنون.


9- نادر:
بوسیله: , در: Monday, 2013 March 18-کد: 6443
مرسی


10- hooman:
بوسیله: , در: Friday, 2013 March 29-کد: 6519
یاد گرفتیم! دمت جیز

مشاهده ادامه نظرات
Tutorials ©