بحث آپلود فایل در PHP نکاتی دارد که باید به آن دقت کنید. پیش از هر چیز هشدار میدهیم که یک فیلد آپلود فایل، اولین جایی است که یک هکر برای نفوذ به سایت، به آن فکر میکند!
پس به شدت مراقب باشید و نکات ایمنی که توضیح خواهم داد را رعایت کنید.
ما بحث آپلود فایل روی سرور را به چند مرحله تقسیم میکنیم:
ابتدا به این کد دقت کنید و سعی کنید آنرا تحلیل کنید:
<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>
فرم به این صورت دیده خواهد شد:
مشخص است که این فرم، یک فیلد برای دریافت فایل و یک دکمه ارسال دارد. اطلاعات فرم به فایل upload.php فرستاده میشود و در آنجا تحلیل میشود.
در این مرحله توجه به نکات زیر الزامی است:
- در فرمی که قرار است یک فایل را به صفحه پردازشگر ارسال کند، نوشتن عبارت enctype="multipart/form-data" الزامی است. (خط اول در کد بالا)
- متود این نوع فرمها حتماً باید post باشد. (خط اول در کد بالا)
- یک تگ input با نوع file نیاز دارید. (خط سوم در کد بالا)
- خط دوم کد بالا فیلدی مخفی (hidden) برای تعیین حجم مجاز فایل در سمت کلاینت. اگر از این فیلد استفاده نکنید، کاربر ممکن است یک فایل حجیم را انتخاب کند و زمان زیادی منتظر بماند تا آپلود شود و بعد شما در سمت سرور حجم را بررسی کنید و بگویید که حجم آن زیاد است!! از این فیلد استفاده کنید تا بدون معطلی، اگر حجم فایل، بیش از حد مجاز بود، به کاربر هشدار داده شود. (حجم را بر حسب بایت وارد کنید)
هشدار: دور زدن این فیلد بسیار ساده است! پس فقط به استفاده از این فیلد اکتفا نکنید و در سمت سرور نیز حجم فایل را بررسی کنید!
حالا باید فایل 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 باشد.';
?>
مراحل:
- ابتدا در خط دوم یک متغیر در نظر گرفتهایم که مسیر آپلود را مشخص میکند.
- در خط سوم، نام فایل را به دست آوردهایم و به انتهای مسیر آپلود چسباندهایم.
- در خط چهارم گفتهایم اگر عملیات آپلود فایل با موفقیت انجام شد، پیغام "فایل با موفقیت آپلود شد" را نمایش بده. در غیر اینصورت، خطاهای احتمالی را.
اگر میخواهید فایل را محدود به یک پسوند خاص کنید (مثلاً jpg) از قطعه کد زیر استفاده کنید:
این کد را باید قبل از echoی اول در کد بالا به کار بگیرید.
اگر میخواهید اطلاعات فایلی که آپلود شده است را بخوانید و احتمالاً بررسی کنید که حاوی کدهای مخرب و ... نباشد، از قطعه کد زیر استفاده کنید:
این کد را باید بعد از echoی اول در کد فایل پردازشگر به کار بگیرید.
حالا تمام محتوای فایل در متغیر theData است. میتوانید آن را به هر صورت که خواستید پردازش کنید...
توجه: در این مقاله، کلماتی مثل MAX_FILE_SIZE و name در $_FILES['attachment']['name'] کلمات کلیدی هستند و نباید تغییر یابند. (بهتر است اگر در ابتدای راه هستید، نامها را تغییر ندهید)موفق باشید؛
حمید رضا نیرومند
11- parviz:
بوسیله: , در: Thursday, 2013 April 18-کد: 6643
mer30!
12- :
بوسیله: , در: Wednesday, 2013 August 21-کد: 7728
خوب بود ممنون
فقط منم نفهمیدم چطور باید تو پوشه ذخیره بشه؟؟؟؟؟؟؟؟؟
13- رضا:
بوسیله: , در: Tuesday, 2014 January 14-کد: 9188
سلام
اگر بخواهیم یک فرم تماس بسازیم که توش علاوه بر ذکر مشخصات (نام و نام خانوادگی و شماره تماس) یه فایل رو آپلود کنه و به ایمیلمون بفرسته چه کدی باید بنویسیم؟
لطفا کدش رو توی سایتتون بزارید
ایمیل من :
irtarjome@yahoo.com
14- علی:
بوسیله: , در: Tuesday, 2014 January 28-کد: 9353
عالی بود
15- pln:
بوسیله: , در: Wednesday, 2014 April 30-کد: 10163
ممنون
16- Arash:
بوسیله: , در: Sunday, 2014 June 08-کد: 10497
salam kheyli khob bod mamanon
17- نعیمه:
بوسیله: , در: Tuesday, 2014 July 08-کد: 10835
مشکلم حل شد ممنون
18- zohre:
بوسیله: , در: Monday, 2015 October 26-کد: 13931
mercCcCccccc