بلاگ محمد کاظم بهرام

برنامه نویس وب

بلاگ محمد کاظم بهرام

برنامه نویس وب

خاطرات ، دست نوشته ها ، آموزش های خودم رو در اینجا قرار میدم .

طبقه بندی موضوعی
آخرین نظرات

آپلود همزمان چند فایل

سه شنبه, ۲۹ بهمن ۱۳۹۲، ۱۱:۱۸ ق.ظ

با سلام

 

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

 

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

 

ابتدا سعی میکنم تا اصول این چنین آپلودر هایی رو بررسی کنیم و بعد به سراغ روش ها بریم .

 


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


برای مثال ما میتونیم که چند Input قرار بدیم که بتونیم فایل های متفاوتی رو انتخاب کنیم :/.. کدمون رو به صورتی بنویسیم که اگر مثلا آپلود اولی تموم شد دومی رو شروع کن که از سرعت آپلود فایل های دیگه کم نکنه و دومین راه هم همین هست که کاری کنیم که همزمان آپلود بشند که این راه به نظر من توصیه نمیشه .

خوب من الان یه نمونه برنامه قرار میدم تا ببیند چطوری میتونیم راه حل اول رو شروع کنیم :


لینک نمایش عکس کد

 

 


تمام توضیحات رو در خود کد به صورت کامنت قرار دادم .

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

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

 


 

یه جوره دیگه هم میشه این کد رو نوشت با foreach که به این صورت هست :

 

 

<!DOCTYPE html>
<html>
    <head>
        <meta content="charset=utf-8" />
        <title>PHP Uploader</title>
    </head>
    <body>
        <?php
        if (isset($_POST['submit'])) {

            foreach ($_FILES['file']['name'] as $key => $name) {
                $file_name = $key . $_FILES['file']['name'][$key];
                $file_size = $_FILES['file']['size'][$key];
                $file_tmp = $_FILES['file']['tmp_name'][$key];
                $file_type = $_FILES['file']['type'][$key];
                move_uploaded_file($file_tmp, "uploads/" . time() . $file_name);
            }
        }
        ?>
        <form action="" method="post" enctype="multipart/form-data">
            <input type="file" name="file[]" /><br>
            <input type="file" name="file[]" /><br>
            <input type="file" name="file[]" /><br>
            <input type="submit" name="submit" />
        </form>
   </body>
</html>



سوالی بود در خدمت هستم .



با تشکر

 

نظرات  (۵)

سلام،
اصلا باورم نمیشه که اینقدر زود به درخواستم پاسخ دادید، خیلی خیلی ممنونم.
---
ببخشید من این اسکریپت رو اونجوری که شما گفتید نوشتم : http://fbanner.ir/download/script.txt

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

خواهش میکنم ، شما میتونید کد رو به صورت دیگه هم بنویسید که من اشتباه کردم و باید از اول به همون صورت مینوشتم .

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

باز هم سوالی بود در خدمت هستم .

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

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


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

با تشکر
سلام جناب،
ببخشید باز من مزاحمتون شدم.
باز به مشکل خوردم!
ببینید کد رو : http://fbanner.ir/download/script2.txt

همه ی شرط ها به خوبی کار می کنند اما شرط بررسی فرمت فایل مشکل داره !
الان اگه هیچ فایلی انتخاب نشده باشه و روی دکمه ی submit کلیک بشه ، خطای format نمایش داده میشه !
میخوام در این زمان یک خطا نمایش داده بشه و بگه که کاربر باید یه فایل رو انتخاب کنه.

راستی خطای فرمت به تعداد input ها تکرار میشه ، من میخوام فقط یک بار نمایش داده بشه . مثلا اگه سه تا فیلد داشته باشیم خطا سه بار نمایش داده میشه.

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


می بخشید دیر شد .

برای اینکه اول چک کنه که فایلی انتخاب شده یا نه شما باید شرط هاتون رو درست و به ترتیب استفاده کنید . اگر میخواید که اول چک کنه که فایلی انتخاب شده یا نه ، بعد از اون شرط اول ، شما باید چک کنید که فایلی انتخاب شده یا نه و بعد از پایان شرط با یک else پیغامی رو به نمایش بزارید که مثلا فایلی انتخاب نشده .
میتونید از این هم استفاده کنید

if(empty($_FILES['file']['name']))
اگر میخواید که پیغام فقط یه بار نشون داده باشه باید شرط رو بیرون از حلقه ببندید تا چند بار تکرار نشه .

با تشکر

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

با تشکر
پاسخ:
با سلام دوست عزیز

عذر خواهی میکنم ، یک مقدار سرم شلوغ شده ، سعی میکنم هر زمان که وقت ازاد پیدا کردم سریعا نظرتون رو بررسی کنم .

با تشکر از صبر شما
با سلام ،
به تازگی کار با MySQL رو شروع کردم.
---
یه فرم LOGIN ساختم. توی فیلد username فقط اعداد رو قبول میکنه ! یعنی وقتی حروف مثلا admin رو وارد میکنم خطا میده :

Unknown column 'admin' in 'where clause'

با اینکه من نوع فیلد رو VARCHAR تنظیم کردم !
ممنون میشم کمکم کنید.
پاسخ:
با سلام دوست عزیز


من فکر میکنم در دستور mysql ایی که استفاده کردید اشتباه کردید .

اگر امکان داره کدتون رو به صورت خصوصی برام بفرستید .


با تشکر

ارسال نظر

کاربران بیان میتوانند بدون نیاز به تأیید، نظرات خود را ارسال کنند.
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.
تجدید کد امنیتی