آپلود (upload) همزمان چند فایل، در PHP

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

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

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

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

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

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

تغییر کدهای PHP ، برای ایجاد امکان آپلود همزمان چند فایل :

اکنون فرض کنید که می خواهیم به طور همزمان، کاربر بتواند 3 فایل را انتخاب کند، برای این منظور، کدهای مربوط به فرم را که در ابتدا به صورت زیر بوده است :

به این شکل، تغییر می دهیم :

با مقایسه کدها، متوجه خواهید شد که قبلا تنها یک تگ input از نوع file داشتیم، اما اکنون 3 تا داریم. همچنین، مشخصه name برای آنها، دیگر برابر file نیست، بلکه برابر file[] می باشد. همچنین، تگ label را حذف کرده ایم (اهمیتی ندارد، ترجیح دادیم که برای خلوت تر شدن کدها، آن را حذف کنیم).

شکل فرم، به صورت زیر می باشد :

آپلود (upload) همزمان چند فایل، در PHP

کدهای فایل پردازش کننده فرم، قبلا به صورت زیر بود (برای آپلود یک فایل) :

و ما آن را به صورت زیر تغییر می دهیم (برای آپلود همزمان چند فایل) :

اولین تغییر، ساخت یک حلقه for برای کل کدها می باشد :

این حلقه، به تعداد فایل هایی که آپلود می شود، اجرا خواهد شد (مثلا چون 3 فایل را آپلود می کنیم، بنابراین کدهای درون حلقه for ، سه بار اجرا می شوند).

علاوه بر این، به انتهای تمامی عبارت هایی که به متغیر فوق سراسری $_FILE ارجاع داده اند، عبارت [$i] نیز افزوده شده است (زیرا قبلا تنها یک فایل داشتیم، اما اکنون چند فایل داریم و باید مشخص کنیم که اطلاعات مربوط به کدام فایل را می خواهیم از متغیر فوق سراسری $_FILE فراخوانی کنیم).

نویسنده علیرضا گلمکانی
شماره کلید 478
گزینه ها
به اشتراک گذاری (Share) در شبکه های اجتماعی
نظرات 2 2 0
محسن
۱۳۹۹/۰۱/۲۳
۰۲:۴۷

سلام 
بعداز آپلود چند عکس آنها را چگونه در دیتابیس ذخیره و دوباره باز خوانی باید کرد؟
ممنون

بهرور
۱۴۰۳/۰۵/۰۶
۱۹:۰۰

سلام 
معمولا در دیتا بیس نام فایل و مسیر ذخیره سازی فایل بصورت یک رشته ذخیره میشه اما خود فایل ترحیحا در حافظه دیسک در جایی که کدهای برنامه وجود داره مثلا در پوشه images دخیره میشوند. اگر میخواید برای افرادی که دارای کدهای یونیک هستند این عکسها رو اپلود کنید در نام گذاری عکسها از کد یونیک هر فرد استفاده نمایید

ارسال نظر جدید (بدون نیاز به عضو بودن در وب سایت)