logo2

-----------------------------------------------

** (160 جلسه) آموزش کامل و 0 تا 100 برنامه نویسی PHP **

آخرین مطالب ارسال شده

مطالب بر اساس ماه

تبلیغات

تبلیغات

پست ثابت

برای ورود کلیک کنید

تبلیغات

پست ثابت

برای ورود کلیک کنید

معمولا سایت های کاربردی مختلف، قسمتی را برای آپلود (upload) فایل توسط کاربر قرار می دهند تا کاربر بتواند یک عکس، فایل فشرده شده (zip) یا هر نوع فایلی که مد نظر بوده است را بر روی سرور سایت، آپلود نماید. باید دقت داشت که هنگامی که به کاربر اجازه می دهیم که فایلی را بر روی سرور سایت ما آپلود کند، عملا راهی برای نفوذ به سایت خود، در اختیار وی قرار داده ایم، بنابراین برای اینکه از سوء استفاده های احتمالی جلوگیری کنیم، باید یک سری محدودیت را برای آپلود فایل اعمال نماییم. ابتدا یک کد ساده را برای آپلود فایل معرفی می کنیم، اما این کد به درد استفاده واقعی نمی خورد و تنها برای این است که با چگونگی کدنویسی برای آپلود فایل آشنا بشوید، پس از آن، یک کد حرفه ای تر را معرفی می کنیم که با اعمال یک سری محدودیت، امنیت را بیشتر می کند.

برای قسمت آپلود، ابتدا یک فرم HTML می سازیم و سپس اطلاعات حاصل از فرم را به یک فایل PHP می فرستیم تا بر روی آن اطلاعات، پردازش کند (این شیوه کلی ساخت فرم ها است). بنابراین یک فایل با نامی دلخواه می سازیم و کدهای زیر را درون آن می نویسیم (چون یک فرم HTML است، پس می تواند پسوند فایل، html یا php باشد) :

همان طور که از کد بالا مشخص است، این فرم، اطلاعات را با روش POST ، به فایل upload_file.php می فرستد تا این فایل، بر روی اطلاعات دریافتی، پردازش کند. مشخصه enctype برای فرم، مشخص می کند که نوع اطلاعاتی که کاربر ارسال می کند، چه می باشد. با انتخاب multipart/form-data برای این مشخصه، اعلام کرده ایم که اطلاعات ارسالی، به صورت اطلاعات دودویی (binary data) است.

درون تگ input ، مشخصه type را برابر file قرار داده ایم تا اعلام کنیم که نوع ورودی، به صورت فایل می باشد. بنابراین درون فرم، یک دکمه browse به کاربر نمایش داده می شود تا با آن بتواند فایل مورد نظر را از کامپیوتر خود انتخاب نماید.

ظاهر فرم، به صورت زیر خواهد بود :

upload-form

یک فایل با نام upload_file.php می سازیم و کدهای زیر را درون آن می نویسیم :

متغیر $_FILES ، یک متغیر فوق سراسری (superglobal) می باشد.

ایجاد یک سری محدودیت برای آپلود فایل :

همان طور که گفتیم، امکان آپلود فایل در هاست سایت، روزنه ای امنیتی خواهد بود، مثلا یک هکر می تواند فایلی حاوی یک سری کد مخرب (به صورت یک صفحه اینترنتی) را در سایت شما آپلود کرده و سپس با وارد کردن آدرس مسیر آپلود آن فایل در مرورگر خود، آن را اجرا نماید. بنابراین آن کدهای مخرب، به صورت یک صفحه از سایت شما اجرا شده و ممکن است که توسط آن، فرد هکر اطلاعات بخشی از سایت را تخریب کرده و یا به سرقت ببرد. بنابراین باید برای نوع فایل و یک سری ویژگی های دیگر فایل، محدودیت هایی را اعمال کنیم.

این بار، کدهای فایل upload_file.php را به صورت زیر می نویسیم :

در کد بالا تعیین کرده ایم که نوع فایلی که کاربر آپلود می کند، تنها می تواند gif یا jpeg یا png باشد و حداکثر حجم آن نیز باید 20 کیلوبایت (kB) باشد (فایل های بزرگتر، آپلود نخواهند شد). اگر کاربر، فایلی را انتخاب کند که در شرایط فوق صدق نکند، آنگاه یک پیام با عنوان Invalid file به وی نمایش داده می شود.

 

ذخیره فایل آپلود شده :

با کد قبل، تنها یک کپی از فایل، به صورت موقت نگهداری می شود. عمر این نسخه کپی از فایل، تنها تا پایان اجرای کدها می باشد، بنابراین باید کدهایمان را به گونه ای تغییر بدهیم که بتوانیم فایل را در یک فولدر از سایت، ذخیره نماییم. کدهای فایل upload_file.php را به صورت زیر تکمیل می کنیم :

برای اجرای صحیح کد بالا، باید یک فولدر با نام upload بسازیم تا فایل درون آن ذخیره شود (در صورت عدم وجود فولدر upload ، یک پیام خطا نمایش داده می شود).

 

کد بالا ابتدا چک می کند که آیا فایل درون فولدر upload وجود دارد یا خیر و چنانچه فایل وجود نداشته باشد، یک کپی از آن را در فولدر upload ذخیره خواهد کرد. در صورتی که فایلی با آن نام درون فولدر upload وجود داشته باشد، یک پیام نمایش داده می شود که فایل هم اکنون وجود دارد و بنابراین فایل جدید، ذخیره نخواهد شد.

 

نکته : چنانچه بخواهیم که بجای نام اصلی فایل، یک نام دیگر برای آن انتخاب کنیم، باید به جای این بخش از کدها :

کد زیر را بنویسیم :

البته من تنها به عنوان مثال، نام myImage.png را انتخاب کردم تا بدانید که کدام قسمت را باید تغییر بدهید، در صورتیکه یک کد کامل، باید شامل تشخیص نوع فایل نیز باشد تا نام جدید فایل، دارای پسوند مناسب باشد.

 

نکته : اگر بخواهیم که فایل در فولدری غیر از فولدر upload ذخیره شود، باید کلمه upload را در کدها، به نام فولدر مورد نظرمان تغییر بدهیم.

 

توضیحات بیشتر در مورد کدها :

در ادامه، نکاتی را در مورد کدها ذکر خواهیم کرد.

نکته 1 : با استفاده از کدهای زیر، پسوند فایل را تشخیص داده و در یک متغیر ذخیره می کنیم :

تابع explode یک علامت و یک رشته (string) را دریافت می کند و سپس، رشته مورد نظر را بر اساس علامتی که تعیین کرده ایم، به چندین رشته تجزیه کرده و به صورت یک آرایه رشته ای بر می گرداند. دقت کنید که متغیر فوق سراسری $_FILES ، حاوی اطلاعات فایل در حال آپلود می باشد، بنابراین، عبارت زیر، نام فایل در حال آپلود را به ما می دهد :

بنابراین به تابع explode ، نام فایل در حال آپلود را داده ایم و همچنین علامت نقطه (.) را به عنوان علامت مورد نظرمان برای تجزیه رشته (string) انتخاب نموده ایم، بنابراین مثلا فرض کنید که کاربر فایلی با نام myFile.number2.png را برای آپلود انتخاب کند، آنگاه تابع explode ، یک آرایه رشته ای، حاوی سه رشته زیر را بر می گرداند :

این آرایه رشته ای، در $temp ذخیره می شود. سپس با تابع end ، آخرین عنصر تابع را در متغیر $extensionذخیره می کنیم، زیرا پسوند فایل، همان آخرین رشته قرار گرفته در آرایه رشته ای می باشد. بنابراین پسوند را در متغیر $extension خواهیم داشت و با آن، می توانیم نوع فایل انتخاب شده توسط کاربر را تشخیص بدهیم.

 

نکته 2 :

یکی از شرط هایی که برای چک کردن صحیح بودن فایل انتخاب شده برای آپلود، در کدها نوشته ایم، به صورت زیر می باشد :

تابع in_array برای چک کردن وجود یک مقدار در یک آرایه می باشد. اگر مقدار ذخیره شده در متغیر $extensionکه همان پسوند فایل انتخاب شده می باشد، در آرایه $allowedExts موجود باشد، آنگاه تابع in_array ، مقدار 1 را برمی گرداند و در غیر این صورت، مقدار 0 را برمی گرداند. آرایه $allowedExts همان آرایه حاوی پسوندهای مجاز برای آپلود فایل می باشد که قبلا آن را به این صورت تعریف کردیم :

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

 

 

جعبه دانلود

ورژن :

پسورد فایل ها : www.scriptbaran.com

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

  • 1. از نوشتن دیدگاه های غیر مرتبط با پست جدا خودداری کنید ؛ پرسش های غیرمرتبط را در انجمن مطرح کنید
  • 2. در خواست های خود برای اسکریپت ها و افزونه ها را فقط از طریق تماس با ما ارسال کنید.
  • 3. فقط فارسی تایپ کنید و برای سوال مجدد در صفحه از دکمه پاسخ دادن استفاده نمایید.
  • 4. قبل از ارسال کامنت حتما متن پست + نظرات سایر دوستان را بخوانید .
  • 5. نظر شما ممکن است بدون پاسخ تایید شوند که در این صورت باید منتظر پاسخ از سوی دیگر کاربران باشید .

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