کامپیوترهاانواع پرونده ها

پی اچ پی: آپلود یک فایل به سرور

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

چنین چیزی باید به پایان برسد، حتی اگر طولانی مدت طول بکشد. اگر سوراخ را در کد نگه دارید، کل سرور شما ممکن است در معرض خطر باشد.

امنیت

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

خطر این است که اگر شما هر گونه چک را انجام ندهید، هر مهاجم قادر خواهد بود اسکریپت های خود را به سرور خود دانلود کند. در این حالت او دسترسی کامل خواهد داشت. او می تواند هر کاری که بخواهد انجام دهد:

  • پایگاه داده را حذف کنید
  • فایل های سایت را حذف کنید
  • تغییر فایل های سایت؛
  • تبلیغات خود را به سایت خود اضافه کنید
  • ویروس ها را دانلود کنید
  • همه کاربران را به سایتهای خود هدایت کنید
  • و خیلی بیشتر که سرقت وارد ذهن خواهد شد.

شما همیشه باید بررسی کنید چه نوع فایل مورد نظر کاربر بارگذاری شده است. اگر، برای مثال، فقط عکس ها را آپلود کنید، باید بررسی کنید که این فایل دقیقا همان تصویر است. در غیر این صورت، با هر چیزی بارگذاری می شود.

چگونه می توان پیاده سازی تست را بعدا نشان داد، هنگامی که شما مستقیما اسکریپت دانلود فایل را بررسی می کنید.

ایجاد فرم پی اچ پی

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

ما ایجاد فرم را توصیف نمی کنیم، زیرا آسان است. دستورالعمل های بیشتر فرض کنید که شما قبلا مفاهیم اساسی HTML را دارید (در غیر این صورت شما اطلاعاتی در مورد بارگیری در PHP نخواهید دید).

اما توجه داشته باشید که برای انتقال اطلاعات در فرم، شما باید ویژگی enctype را اضافه کنید.

در غیر این صورت، داده های مربوط به پردازنده فایل انتقال نخواهد یافت.

این کار چگونه انجام می شود؟

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

پس از آن، مسیر باید در جایی که فایل واقع شده است ظاهر شود.

اگر مسیر به نظر نمی رسد، دوباره این کار را انجام دهید.

پس از کلیک کردن بر روی دکمه دانلود با فایل handler، می توانید اطلاعاتی را بیابید.

به عنوان مثال، شما می توانید یک خط بنویسید که یک فایل با نام "مانند و غیره" با موفقیت به یک پوشه "such-and-such" آپلود شده باشد. البته نام فایل همیشه متفاوت خواهد بود.

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

منطقی است که داده های مربوط به نام را فقط در صورتی که کاربر چندین فایل را بارگذاری می کند، بیان کند. ما این مورد را کمی بیشتر بررسی خواهیم کرد. ما پیش نخواهیم برد

سفارشی کردن

در PHP، آپلود یک فایل به سرور نیاز به تنظیمات خاصی در فایل php.ini دارد. تنظیمات زیادی در این فایل وجود دارد. همه ما به آنها نیاز نداریم. ما علاقه مند به سه خط هستیم: file_uploads، upload_tmp_dir و upload_max_filesize.

لطفا توجه داشته باشید که این تنظیمات بر روی تمام سایت های شما بر روی سرور تاثیر می گذارد نه فقط یکی از آنها. بنابراین، حداکثر اندازه بر اساس آنچه کاربران آپلود می کنید، تنظیم کنید. توصیه نمی شود که مقادیر بیش از اندازه مقدار را تنظیم کنید.

پس از تغییر مقادیر در این تنظیمات، سرور باید راه اندازی مجدد شود. در غير اينصورت، تنظيمات تأخير نخواهند گرفت، زيرا در زمان بارگذاري سرور، آنها خوانده مي شوند.

با اتصال از طریق SSH به سرور می توانید این را در کنسول انجام دهید. به اندازه کافی برای ورود به سرویس فرمان httpd restart، و پس از آن تنظیمات اثر می گذارد.

راه دیگر این است که از طریق پانل ISP یا از طریق پانل صورتحساب ارائه دهنده راه اندازی مجدد کنید.

آرایه با فایل

در PHP، فایل با استفاده از آرایه $ _FILES بارگذاری می شود. این شامل تمام اطلاعاتی درباره فایل هایی است که ما بارگیری خواهیم کرد.

برای دیدن اینکه چه نوع اطلاعاتی در این آرایه وجود دارد، کافی است که در فایل handler زیر را بنویسید:

هر فایل را انتخاب کنید و روی "دانلود" کلیک کنید. صفحه دستیار اطلاعات اطلاعات ذخیره شده در $ _FILES را نمایش می دهد. متغیر به طور کامل با حروف بزرگ نوشته شده است. PHP یک زبان حساس به حروف است

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

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

فیلد خطا کد خطا را ذخیره می کند. درباره این کمی بیشتر. اندازه - اندازه در بایت.

خطاها

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

مقادیر تمام خطاها را در نظر بگیرید:

در مورد پارامتر فوق می توان گفت که در HTML معمولی مشخص می شود.

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

پی اچ پی: اسکریپت دانلود فایل

چگونه همه چیز را در عمل انجام می شود؟ در PHP، فایل با دستور کپی بارگذاری می شود. اگر به سوال از چگونگی آپلود یک فایل علاقه مندید، پاسخ به سادگی کپی است، که از دو پارامتر - فایل منبع و فایل مقصد استفاده می کند.

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

بگذارید بگوییم شما میخواهید کاربران عکسهایی با رزولوشن GIF، JPEG یا PNG آپلود کنند. شما می توانید آن را مانند این مشخص کنید.

اگر ($ _ FILES ['file_upload'] ['type']! = "Image / gif") {
اکو "با عرض پوزش، ما فقط از فایل های GIF پشتیبانی می کنیم"؛
خروج؛
}

اگر می خواهید تمام 3 نوع را بفرستید، به سادگی یک شرایط اضافی با نوع دیگری از تصویر اضافه کنید.

کپی کردن به این صورت انجام می شود: کپی (فایل 1، فایل 2).

در مورد ما، هنگامی که کار با دانلود از کامپیوتر به سرور ادامه می یابد، می توانید این کار را انجام دهید

کپی ($ _ FILES ['file_upload'] ["tmp_name"]، "1.jpg")

یعنی، فایل با نام 1.jpg کپی می شود. این کاملا درست نیست در این مورد، این فقط یک مثال است. نام فایل همیشه باید متفاوت باشد، و پسوند باید بسته به فایل مشخص شود.

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

$ Path_info = pathinfo ($ _ FILES ['photo1'] ["name"])؛

$ Ext = $ path_info ['extension']؛

در متغیر $ ext، پسوند مورد نیاز را ذخیره می کنیم. و نام فایل را می توان به صورت تصادفی با استفاده از md5. اگر قصد دارید چندین فایل را دانلود کنید، بهتر است آنها را در پوشه های مختلف بارگذاری کنید. پس راحت تر خواهد بود. به ویژه اگر میخواهید آن را تمیز کنید.

کد برای دانلود به شرح زیر است.

/// در دسترس بودن عکس ها

اگر ($ _FILES ['photo1'] ['tmp_name'] == null)

{

Echo ("

فایل مشخص نشده است.

بازگشت ... ")

خروج؛

}

/// بگذارید بگوییم شما مجوز آپلود فایل های بزرگ (ویدئو) برای یک پروژه در سرور دارید، اما تنها عکس ها وجود دارد و کاربران باید محدودیت ها را محدود کنند

اگر (($ _FILES ["photo1"] ["size"]> 1024 * 1024 * 2)

{

؟>

حداکثر اندازه تصویر مجاز است 2 مگابایت باشد

بازگشت ...

خروج؛

}

// ایجاد پوشه ها

// ایجاد پوشه ماه جاری

اگر (! File_exists ("img /". تاریخ ("M")))

{

Mkdir ("img /". تاریخ ("M"))؛

}

// یک پوشه از روز جاری ایجاد کنید

اگر (! File_exists ("img /". تاریخ ("M"). "/". تاریخ ("d")))

{

Mkdir ("img /". تاریخ ("M"). "/". تاریخ ("d"))؛

}

/// extension file

$ Path_info = pathinfo ($ _ FILES ['photo1'] ["name"])؛

$ Ext = $ path_info ['extension']؛

/// نام فایل را تولید کنید

$ Id = md5 (تاریخ ("YMd"))؛

اگر (کپی ($ _ FILES ['photo1'] ["tmp_name"]، "img /" تاریخ ("M"). "/". تاریخ ("d"). "/". $ Id. $ Ext) )

{

اکو ("فایل با موفقیت دانلود")؛

}

/// هرگونه فعالیت بیشتر (نوشتن به پایگاه داده و غیره)

}

چندین فایل

دانلود فایل های متعدد (پی اچ پی) با استفاده از زمینه های اضافی در فرم رخ می دهد.

این روش بسیار خوب نیست، زیرا تعداد فایل هایی را که برای بارگیری محدود می شود محدود می کند. علاوه بر این، آن را یک لحظه بد در برنامه نویسی در نظر گرفته شده است. سعی کنید همه چیز را پویا کنید.

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

برای این، فرم را با این کد ایجاد می کنیم.

<فرم فرم = "POST" action = "پیوند به فایل handler" name = "upload_form" enctype = "multipart / form-data">

توجه داشته باشید که کلمه multiple اضافه شده است، و نام به صورت آرایه [] تعریف شده است. در این حالت آرایه $ _FILES کمی متفاوت خواهد بود. شما آرایه را در آرایه دریافت خواهید کرد.

برای بررسی، می توانید دوباره از var_dump ($ _ FILES) استفاده کنید؛

تمام فایل های شما در آرایه ای مثل این قرار می گیرد:

  1. $ _FILES ["file1"] ["name"] [0]
  2. $ _FILES ["file1"] ["name"] [1]
  3. و غیره

در پرانتز، شماره فایل در آرایه نوشته شده است. شمارش از ابتدا. ما آنها را به همان شیوه پردازش می کنیم، فقط حلقه را تنظیم می کنیم و در هنگام دسترسی به کد بالا، شاخص [$ i] را در انتهای اضافه می کنیم.

$ I = 0؛

در حالی که ($ _FILES ["file1"] ["name"] [$ i] <> '')

{

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

}

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

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 fa.birmiss.com. Theme powered by WordPress.