حتما تا بحال سايت هايي را ديده ايد كه به كاربران اجازه Upload فايل از طريق صفحات (فرم هاي) Html را مي دهند به عنوان مثال در قسمت Profile هاي ياهو كه شما به عنوان يك كاربر عادي مي توانيد تصوير خود را كه يك فايل با فرمت Gif يا Jpg است و يا نمونه پيغام صوتي خود را به Profile تان اضافه كنيد و يا بخش آرشيو سايت هاي تحقيقاتي كه به اعضاي خود اجازه مي دهند نتايج كار خود را در قالب يك فايل PDF و يا بصورت Zip شده بر روي سايت قرار دهند .
به مطالب گفته شده در بالا حتما به اين نتجه رسيده ايد كه در اينگونه سيستم ها سه نكته اساسي قرار داد .
1- چكونگي ارسال فايل با استفاده از پروتكل HTTP به جاي FTP.
2- بررسي فرمت فايل و جلوگيري از Upload فايل هاي غير مجاز.
3- بررسي اندازه فايل و جلوگيري از ارسال فايلهاي حجيم.

براي دريافت فايل از كاربر ابتدا بايد فرمي به شكل زير ايجاد كرد :



<form>

<input>
<input>
</form>


عبارت multipart/form_data فرم بالا را از فرمهايي كه تا بحال با آن كار كرده ايم متمايز مي كند . در فرم بالا قبل از دكمه Submit كادر مخصوص در يافت فايل قرار گرفته در واقع اين همان فايلي است كه كاربر قصد ارسال به سرور را دارد.
در اين فرم _URL_ اشاره به برنامه PHP اي دارد كه قصد داريد عمل دريافت فايل را در آنجا انجام دهيد .تا اينجا فرم مورد نياز طراحي شده است حال با يك برنامه ساده مثل نمونه زير مي توان فايل را از Client خوانده و بر روي سرور ذخيره كرد.


<if>


اين برنامه در صورتي كه فايل ارسالي يك فايل GIF باشد آنرا با همان نامي كه روي كامپيوتر كاربر قرارداشته در شاخه Files بر روي سرور ذخيره مي كند .البته همانطور كه ميدانيد متغيير هايي كه براي Upload فايل تعريف مي شوند بسته به نسخه PHP و تنظيمات آن متفاوت مي باشند .
بعد از يك Upload موفق ، هنگامي كه track_vars فعال باشد آرايه هاي $_FILESو $HTTP_POST_FILES ايجاد مي گردند . سرانجام اگر register_globals فعال باشد متغييرها به صورت globals ايجاد خواند شد.

توجه : track_vars از نسخه 4.0.3 به طور پيش فرض فعال است . از PHP 4.1.0 به بعد ترجيحا از متغيير عمومي $_FILES به جاي $HTTP_POST_FILES استفاده مي گردد .

$HTTP_POST_FILES/$_FILES : به منظور مهيا كردن مشخصات فايل (هاي) ارسال شده ايجاد شده اند . محتواي اين دو متغيير به شرح زير است البته توجه كنيد كه ‘userfile’ نام انتخابي ما در هنگام ساخت فرم HTML است .

<HTTP_POST_FILES>


نام اصلي فايل بر روي كامپيوتر كاربر.


<HTTP_POST_FILES>


شناسه محتواي (MIME type) فايل . در برنامه فوق تنها به فايلهاي GIF اجازه ذخيره
شدن داده مي شود حال چنانچه بخواهيم كاربر را محدود به ارسال فايل هاي Wavنماييم
بايد مقدار اين متغيير را با \"audio/wav\" مقايسه كنيم .


<HTTP_POST_FILES>[code]
اندازه فايل برحسب بايت .

[code]<HTTP_POST_FILES>


نام موقتي كه فايل در هنگام Upload موقتا با آن نام بر روي سرور ذخيره مي گردد
.

توجه : متغيير $_FILES تنها در نسخه هاي 4.1.0 و بالاتر شناخته شده است و نيز نسخه 3 PHP از $HTTP_POST_FILES حمايت نمي كند .

همچنين اگر در فايل PHP.INI پارامتر register_globals فعال باشد متغييرهاي زير موجود خواهند بود :


<userfile>


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

در صورت استفاده از PHP4.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>

<input>
<input>
<br>
<input>
</form>


همانطور كه مشاهده مي شود اين فرم داراي دو كادر دريافت فايل است كه به نام آنها به صورت يك آرايه است . پس از ارسال اين فرم بر روي سرور متغيير هاي :


<HTTP_POST_FILES>


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

<HTTP_POST_FILES>


دلالت بر مشخصات فايل دوم دارند .
همينطور الي آخر مي توان چندين فايل را ارسال كرد .

روش HTTP PUT
روش ديگري نيز براي ارسال فايل به سرور وجود دارد كه بسيار ساده تر از روش بالا عمل مي كند ولي چون اين روش براي حفظ امنيت سرور نياز به تنظيمات خاصي در سرورها دارد از توضيح آن در اينجا صرف نظر كرده ام . چنانچه مايل به آشنايي با اين روش هستيد به آدرس زير مراجعه كنيد

http://www.php-center.de/en-html-manual ... ethod.html

درهنگام نوشتن چنين برنامه هايي مراقب مجوز هايي كه به دايركتوري ذخيره اين فايل ها مي دهيد و همچنين بررسي اينكه فايل ارسال شده از طرف كاربر همان چيزي است كه بايد باشد باشيد .فراموش نكنيد كه هميشه عده اي بر روي اينترنت به دنبال راهي براي نفوذ به كامپيوتر و يا وب سايت شما هستند بد نيست نگاهي هم به مقاله زير داشته باشيد
http://securityresponse.symantec.com/av ... /2208.htm