در این مقاله می خواهیم چگونگی آپلودکردن یک فایل از طریق PHP توسط کاربر به سرور را آموزش دهیم. چون در بسیاری از موارد مدیران سایت ها باید برای کاربران امکانی را فراهم کنند تا از طریق آن کاربران بتوانند فایل هایی را به کامپیوتر سرویس گیرنده (Server) ارسال کنند. در این جا ذکر این نکته لازم است که مدیران سایت ها دقت کنند که این مقاله تنها برای آموزش می باشد و به نکات آخر مقاله توجه کنند تا کاربران نتوانند هر فایلی را به سرور ارسال کنند. چون با این کار یک کاربر می تواند با آپلود یک فایل PHP ساده تمام رمزهای عبور شما را به سرقت ببرد!

پس در نوشتن این برنامه دقت کنید!

ادامه ی مقاله در ادامه ی مطلب

آموزش آپلود کردن یک فایل با استفاده از PHP

 

مقدمه و هشدارهای امنیتی

در این مقاله می خواهیم چگونگی آپلودکردن یک فایل از طریق PHP توسط کاربر به سرور را آموزش دهیم. چون در بسیاری از موارد مدیران سایت ها باید برای کاربران امکانی را فراهم کنند تا از طریق آن کاربران بتوانند فایل هایی را به کامپیوتر سرویس گیرنده (Server) ارسال کنند. در این جا ذکر این نکته لازم است که مدیران سایت ها دقت کنند که این مقاله تنها برای آموزش می باشد و به نکات آخر مقاله توجه کنند تا کاربران نتوانند هر فایلی را به سرور ارسال کنند. چون با این کار یک کاربر می تواند با آپلود یک فایل PHP ساده تمام رمزهای عبور شما را به سرقت ببرد!

پس در نوشتن این برنامه دقت کنید!

 

  آشنایی با چگونگی کاربرد کدها در HTML

اگر اندکی با HTML آشنایی داشته باشید می دانید که می توانید محتویات یک Form را از طریق دو متد POST و یا GET با صفحه ی مقصد ارسال کنید و در اینجا باید اضافه کنیم که اگر این دو متد را بدون صفت enctype به کار ببرید تنها می توانید از فرم برای ارسال متن های کوتاه و یا طولانی استفاده کنید و به تنهایی قادر به ارسال یک فایل به صفحه ی مقصد نیستند. پس چون ما می خواهیم یک فایل را به اسکریپت ارسال کنیم ، باید همراه متد POST ، صفت enctype برابر با مقدار multipart/form-data نیز قید شود. بنابراین شکل کلی فرمی که خواهیم نوشت باید به صورت زیر باشد :

 

<form method=POST enctype=multipart/form-data action=URL>

اما باید یک جعبه متن در داخل فرم قرار دهیم که مسیر فایل را در خود ذخیره کند و به اسکریپت صفحه ی مقصد ارسال کند برای این کار HTML یک ابزار مخصوص دارد که شکل کلی آن به صورت زیر است :

 

<input type=FILE name=Your Text Box Name>

حال با توصیحاتی که ارائه شد شکل کلی فایل html ما برای ایجاد یک فرم و ارسال فایل به اسکریپت مقصد به صورت زیر خواهد بود:

 

 

<html>

<head> <title> Upload A File to Server </title>

</head>

<body>

<form method=POST enctype=multipart/form-data action=upload.php>

Please Select Your File Here : <input type=FILE name=testfile>

<input type=submit name=upload value=Upload This File>

</form>

</body>

</html>

توضیح : برنامه را ساده نوشتیم تا به شکل کلی برنامه دست یابید. دقت کنید نام File Input شما برای دریافت فایل در اسکریپتی که خواهیم نوشت بسیار مهم است. در ضمن این برنامه فرمی را طراحی می کند که مسیر فایلی را گرفته و آن را به صفحه ی upload.php ارسال می کند.

 

 

  بررسی متغیرهای PHP برای دریافت و انجام عملیات بر روی فایل

خوب حالا می رویم سراغ کد PHP برنامه !  PHP متغیرهایی را برای فایل های ارسال شده درنظر گرفته است که آن ها را در ادامه بررسی می کنیم.

 1 - با فرض اینکه نام Input file شما testfile باشد محل ذخیره ی موقتی فایل شما به صورت زیر قابل دستیابی است :

 

$_FILES['testfile']['tmp_name']

 2- نام فایل ارسال شده به Script به صورت زیر قابل دستیابی است :

$_FILES['testfile']['name']

 3 - نوع فایل ارسال شده به صورت زیر قابل دستیابی است :

$_FILES['testfile']['type']

برای مثال نوع یک فایل Bitmap توسط PHP این گونه نمایش داده می شود : image/bmp

 4 - اندازه ی فایل ارسال شده (بر حسب کیلوبایت) به صورت زیر قابل دستیابی است :

$_FILES['testfile']['size']

 5 - در صورت ایجاد خطا در آپلود فایل می توانید از متغیر زیر برای نمایش نوع خطای مربوطه استفاده کنید:

$_FILES['testfile']['error']

نکته :  پس از اینکه با این متغیرها نام و دیگر مشخصات فایل را دریافت کردید ، باید با استفاده از دستور کپی آن را به پوشه ی موردنظر کپی (آپلود) کنید. این دستور به صورت زیر قابل استفاده است :

copy(tmpfile, dir/filename)

در قسمت tmpfile باید متغیرشماره ی 1 را جاگذاری کنید (مبدا فایل) و بعد از کاما (و) مقصد فایل را جاگذاری کنید.

تذکر : قبل از آپلود کردن هرگونه فایلی دقت کنید که پوشه ی مقصد امکان نوشتن توسط کاربر در آن فعال باشد و یا به عبارتی Permission آن پوشه را برابر 777 قرار دهید.

 

  نوشتن کد اصلی برنامه ی PHP  

حال با استفاده از توضیحاتی که ارائه شد ، فایل upload.php را به صورت زیر می نویسیم :
 

1    <?php

2    $file = $_FILES['testfile']['tmp_name'];

3    $fname = $_FILES['testfile']['name'];

4    $ftype = $_FILES['testfile']['type'];

5    $fsize = $_FILES['testfile']['size'];

6    $ferror = $_FILES['testfile']['error'];

7    $updir = "upload";

8    $fnameonly = basename($fname);

9    $ok = @copy($file, "$updir/$fnameonly";

10   if(!$ok) {

11   echo "Can't Upload : $fnameonly";

12   echo $ferror;

13   exit;

14   }

15   echo "Your File : $fnameonly Uploaded";

16   echo "Properties Of Your Files : <br>

17   File name : $fnameonly <br>

18   File Size : $fsize <br>

19   File Type : $ftype";

20   ?>

توضیحاتی درباره ی کد : خطوط 2 تا 6 متغیرهای دستیابی به فایل فرستاده شده را کوتاه می کنند. خط 7 پوشه ای را که قرار است فایل به آن آپلود شود را مشخص می کندو خط 8 از تابع basename برای جداکردن نام فایل استفاده شده است. خط 9 عمل اصلی آپلود را انجام می دهد و عملگر @ در جلوی آن از بروز خطا جلوگیری می کند. چون در خطوط پایین آن را شخصی سازی کرده ایم و خطوط 10 تا 14 یک شرط را بررسی می کند تا در صورت عدم موفقیت آپلود فایل پیغامی صادر شود و از برنامه خارج شود و خطوط 15 تا 16 مشخصات فایل ارسال شده را برای کاربر نمایش می دهند.

 

  توسعه ی کد و چند ابتکار جالب  

تا به حال فقط بدنه و کدهای اصلی برای اجرای برنامه را بررسی کردیم و همان طور که در ابتدای مقاله قید شد در این قسمت می خواهیم نحوه ی آپلود فایل را شخصی سازی کنیم تا هرفایلی قابل آپلود نباشد.

با چند دستور شرطی می توانید ابتکارات جالبی انجام دهید مثلا قبل از آپلود فایل مشخص کنید که اگر حجم فایل 0 بود یعنی فایل خالی بود آن را آپلود نکند مثل کد زیر :

if($fsize == 0) echo "Your File is Empty";

و یا اینکه به کاربران خود اجازه دهید که فقط نوع خاصی از فایل ها را به سرور شما آپلود کنند. مثل کد زیر که فقط اجازه ی آپلود عکس های با فرمت Gif را می دهد :

 

if($ftype == "image/gif" {

copy(file, path) }

else {

echo "You Cannot Upload This Format Of File";

exit;

}

و یا اینکه پس از آپلود فایل اگر از نوع عکس بود پیش نمایشی از عکس آپلود شده برای کاربران نمایش داده شود. مثل کد زیر:

 

<img src=<? echo "$updir/$fnameonly" ?> >

و بسیاری از ابتکارات جالب دیگر که خودتان می توانید به برنامه اعمال کنید.

 

  درباره ی مقاله و نویسنده ی آن  

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

با تشکر - بهرام بهرام بیگی

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

 

نوشته شده در تاریخ چهارشنبه 30 فروردین 1385    | توسط: بهرام بهرام بیگی    | طبقه بندی: اسکریپت ها،     |
نظرات()