مدیریت فایل های ارسالی توسط کاربران

http://www.iranphp.net

1

عنوان مقاله

: مدیریت فایل های ارسالی توسط کاربران

نگارنده

: مهدی ساغری

آدرس پست الکترونیک

: .………………

تاریخ نگارش

: …….…………

http://www.iranphp.net

2

مدیریت فایل های ارسالی توسط کاربران

:

را می دهند به عنوان مثال در قسمت

است و یا نمونه پیغام صوتی خود را به

( Html فایل از طریق صفحات (فرم های Upload حتما تا بحال سایت هایی را دیده اید که به کاربران اجازهJpg یا Gif های یاهو که شما به عنوان یک کاربر عادی می توانید تصویر خود را که یک فایل با فرمت Profile

و یا بصورت

PDF تان اضافه کنید و یا بخش آرشیو سایت های تحقیقاتی که به اعضای خود اجازه می دهند نتایج کار خود را در قالب یک فایل Profile

شده بر روی سایت قرار دهند

. Zip

به مطالب گفته شده در بالا حتما به این نتجه رسیده اید که در اینگونه سیستم ها سه نکته اساسی قرار داد

FTP.

فایل های غیر مجاز

.به جای HTTP ۱-چکونگی ارسال فایل با استفاده از پروتکل. Upload ۲-بررسی فرمت فایل و جلوگیری از

۳

-بررسی اندازه فایل و جلوگیری از ارسال فایلهای حجیم.

برای دریافت فایل از کاربر ابتدا باید فرمی به شکل زیر ایجاد کرد

:

<

<

<

<

form name="form1" method="post" action="_URL_" enctype="multipart/form_data">input type="file" name="userfile">input type="submit" name="Submit" value="Submit">/form>

کادر

مخصوص در یافت فایل قرار گرفته در واقع این همان فایلی است که کاربر قصد ارسال به سرور را دارد

Submit فرم بالا را از فرمهایی که تا بحال با آن کار کرده ایم متمایز می کند . در فرم بالا قبل از دکمه multipart/form_data عبارت.

ای دارد که قصد دارید عمل دریافت فایل را در آنجا انجام دهید

خوانده و بر روی سرور ذخیره کرد

. PHP اشاره به برنامه _URL_ در این فرم. Client تا اینجا فرم مورد نیاز طراحی شده است حال با یک برنامه ساده مثل نمونه زیر می توان فایل را از

<?

if

(isset( $Submit )) {

if

($_FILES['userfile']['type'] == "image/gif"){ copy ($_FILES['imagefile']['tmp_name'],

"files/"

.$_FILES['imagefile']['name'])

or die

("Could not copy");

echo

"";

echo

"Name: ".$_FILES['imagefile']['name']."";

echo

"Size: ".$_FILES['imagefile']['size']."";

echo

"Type: ".$_FILES['imagefile']['type']."";

echo

}

"Copy Done....";

else

{

echo

"";

echo

}

}?>

"Could Not Copy, Wrong Filetype (" .$_FILES['imagefile']['name'].")";

بر روی سرور ذخیره می

کند

Files باشد آنرا با همان نامی که روی کامپیوتر کاربر قرارداشته در شاخه GIF این برنامه در صورتی که فایل ارسالی یک فایل.

و تنظیمات آن متفاوت می باشند

ایجاد می گردند

ایجاد خواند شد

به جای

. PHP فایل تعریف می شوند بسته به نسخه Upload البته همانطور که میدانید متغییر هایی که برای. $HTTP_POST_FILES و $_FILES فعال باشد آرایه های track_vars موفق ، هنگامی که Upload بعد از یک. globals فعال باشد متغییرها به صورت register_globals سرانجام اگر$_FILES به بعد ترجیحا از متغییر عمومی PHP از نسخه ٤,٠,٣ به طور پیش فرض فعال است . از 4.1.0 : track_vars توجه

http://www.iranphp.net

3

استفاده می گردد

. $HTTP_POST_FILES

به منظور مهیا کردن مشخصات فایل

(های (ارسال شده ایجاد شده اند . محتوای این دو متغییر به شرح زیر است $HTTP_POST_FILES/$_FILES :

است

HTML نام انتخابی ما در هنگام ساخت فرم userfileالبته توجه کنید که

<?

$HTTP_POST_FILES

?>

['userfile']['name'];

نام اصلی فایل بر روی کامپیوتر کاربر

.

<?

$HTTP_POST_FILES

?>

['userfile']['type'];

اجازه ذخیره شدن داده می شود حال چنانچه بخواهیم کاربر را محدود به

نماییم

مقایسه کنیم

GIF فایل . در برنامه فوق تنها به فایلهای (MIME type) شناسه محتوایWav ارسال فایل های: "audio/wav" باید مقدار این متغییر را با

<?

.

$HTTP_POST_FILES['userfile']['size'] ?>[code]اندازه فایل برحسب بایت

[

code]<? $HTTP_POST_FILES['userfile']['tmp_name'] ?>

موقتا با آن نام بر روی سرور ذخیره می گردد

حمایت می کند

فعال باشد متغییرهای زیر موجود خواهند بود

. Upload نام موقتی که فایل در هنگام$HTTP_POST_FILES از PHP تنها در نسخه های ٤,١,٠ و بالاتر شناخته شده است و نیز نسخه ٣ $_FILES توجه : متغییر: register_globals پارامتر PHP.INI .همچنین اگر در فایل

<?

$userfile

$userfile_name

$userfile_size

$userfile_type

?>

در فایل

تعیین شده باشد

upload_tmp_dir فایل ها به طور پیش فرض در دایرکتوری فایلهای موقت سرور ذخیره می شوند مگر اینکه مکان دیگری توسط. در پایان اجرای اسکریپت چناچه فایل ارسال شده از طرف کاربر را به مکان دیگری انتقال ندهید و یا نام آن را تغییر ندهید PHP.INI

توسط سیستم این فایل پاک خواهد شد

.

و بالاتر می توانید خط اول برنامه فوق را بصورت زیر بنویسید

: PHP در صورت استفاده از 4.1.0

<?

if

{ <

(is_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'])) <br />br />

//In PHP 4.1.0 or later, $_FILES should be used instead of $HTTP_POST_FILES.

ارسال چندین فایل به طور همزمان

:

همانطور که میدانید یک برنامه را می توان به چنیدن روش مختلف پیاده سازی کرد ولی چه خو

باشد

ب است که این پیاده سازی همراه با استفاده بهینه از گرامر زبان.

برای اینکه کاربر بتواند بیش از یک فایل را در یک لحظه ارسال کند فرمی به شکل زیر طراحی

کنید:

<

<

form name="form1" method="post" action="_URL_" enctype="multipart/form_data">input type="file" name="userfile[]">

http://www.iranphp.net

4

<

<

<

<

input type="file" name="userfile[]">br />input type="submit" name="Submit" value="Submit">/form>

همانطور که مشاهده می شود این فرم دارای دو کادر دریافت فایل است که به نام آنها به صورت یک آرایه است

. پس از ارسال این فرم بر روی سرور متغییر های

:

<?

$HTTP_POST_FILES

['userfile']['name'][0]

$HTTP_POST_FILES

['userfile']['size'][0]

$HTTP_POST_FILES

['userfile']['type'][0]

$HTTP_POST_FILES

?>

['userfile']['tmp_name'][0]

دلالت بر مشخصات فایل اولی و متغییرهای

:

<?

$HTTP_POST_FILES

['userfile']['name'][1]

$HTTP_POST_FILES

['userfile']['size'][1]

$HTTP_POST_FILES

['userfile']['type'][1]

$HTTP_POST_FILES

?>

['userfile']['tmp_name'][1]

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

. همینطور الی آخر می توان چندین فایل را ارسال کرد.

HTTP PUT

روش

روش دیگری نیز برای ارسال فایل به سرور وجود دارد که بسیار ساده تر از روش بالا عمل می کند ولی چون این روش برای حف

خاصی در سرورها دارد از توضی

ظ امنیت سرور نیاز به تنظیماتح آن در اینجا صرف نظر کرده ام . چنانچه مایل به آشنایی با این روش هستید به آدرس زیر مراجعه کنید:

http://www.php-center.de/en-html-manual/features.file-upload.put-method.html

درهنگام نوشتن چنین برنامه هایی مراقب مجوز هایی که به دایرکتوری ذخیره این فایل ها می دهید و همچنین بررسی اینکه فایل ارسال شده از طرف کاربر همان

چیزی است که باید باشد باشید

نگاهی هم به مقاله زیر داشته باشید

.فراموش نکنید که همیشه عده ای بر روی اینترنت به دنبال راهی برای نفوذ به کامپیوتر و یا وب سایت شما هستند بد نیست:

http://securityresponse.symantec.com/avcenter/security/Content/2208.html