بستن منو
۱۶۵
تعداد کلیدهای این موضوع
لیست همه کلیدهای این موضوع
مباحث اولیه برای آشنایی با PHP
15
آرایه ها در PHP
11
انواع متغیرها و تبدیلات متغیرها در PHP
11
رشته ها (متن ها - strings) و کاراکترها در PHP
24
توابع در PHP
2
کوکی ها (cookie) در PHP
3
تاریخ و زمان در PHP
3
عملیات های ریاضی در PHP
13
فرم ها در PHP
4
کار با عکس ها در PHP
7
کار با فایل ها و پوشه ها (folder) در PHP
35
کار با ایمیل در PHP
1
برنامه نویسی شیء گرا (OOP) در PHP
4
پردازش فایل های XML ، در PHP
1
امنیت در PHP
1
پیاده سازی درگاه های پرداخت آنلاین، با کدهای PHP
1
خطاها و خطایابی، در PHP
1
کار با نرم افزار شبیه ساز سرور wampserver
1
کار با نرم افزار شبیه ساز سرور XAMPP
1
کتابخانه CURL در PHP
2
ساختار JSON ، در PHP
2
مباحث عمومی در PHP
22
×

دانلود فروشگاه اندروید کلیدستان

478

نویسنده

علیرضا گلمکانی ( admin )

شماره کلید
دسته کلید - دسته بندی

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

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

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


<html>
<body>

<form action="upload_file.php" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>

</body>
</html>

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

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

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


<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 80000)
&& in_array($extension, $allowedExts)){
    if ($_FILES["file"]["error"] > 0){
        echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
    }else{
        echo "Upload: " . $_FILES["file"]["name"] . "<br>";
        echo "Type: " . $_FILES["file"]["type"] . "<br>";
        echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
        echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

        if (file_exists("upload/" . $_FILES["file"]["name"])){
            echo $_FILES["file"]["name"] . " already exists. ";
        }else{
            move_uploaded_file($_FILES["file"]["tmp_name"],
            "upload/" . $_FILES["file"]["name"]);
            echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
        }
    }
}else{
    echo "Invalid file";
}
?>

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

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

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


<html>
<body>

<form action="upload_file.php" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>

</body>
</html>

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


<html>
<body>

<form action="upload_file.php" method="post" enctype="multipart/form-data">
<input type="file" name="file[]" id="file"><br>
<input type="file" name="file[]" id="file"><br>
<input type="file" name="file[]" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>

</body>
</html>

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

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

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

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


<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 80000)
&& in_array($extension, $allowedExts)){
    if ($_FILES["file"]["error"] > 0){
        echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
    }else{
        echo "Upload: " . $_FILES["file"]["name"] . "<br>";
        echo "Type: " . $_FILES["file"]["type"] . "<br>";
        echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
        echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

        if (file_exists("upload/" . $_FILES["file"]["name"])){
            echo $_FILES["file"]["name"] . " already exists. ";
        }else{
            move_uploaded_file($_FILES["file"]["tmp_name"],
            "upload/" . $_FILES["file"]["name"]);
            echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
        }
    }
}else{
    echo "Invalid file";
}
?>

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


<?php
for($i=0;$i<count($_FILES["file"]["name"]);$i++){
    $allowedExts = array("gif", "jpeg", "jpg", "png");
    $temp = explode(".", $_FILES["file"]["name"][$i]);
    $extension = end($temp);
    if ((($_FILES["file"]["type"][$i] == "image/gif")
    || ($_FILES["file"]["type"][$i] == "image/jpeg")
    || ($_FILES["file"]["type"][$i] == "image/jpg")
    || ($_FILES["file"]["type"][$i] == "image/pjpeg")
    || ($_FILES["file"]["type"][$i] == "image/x-png")
    || ($_FILES["file"]["type"][$i] == "image/png"))
    && ($_FILES["file"]["size"][$i] < 80000)
    && in_array($extension, $allowedExts)){
        if ($_FILES["file"]["error"][$i] > 0){
            echo "Return Code: " . $_FILES["file"]["error"][$i] . "<br>";
        }else{
            echo "Upload: " . $_FILES["file"]["name"][$i] . "<br>";
            echo "Type: " . $_FILES["file"]["type"][$i] . "<br>";
            echo "Size: " . ($_FILES["file"]["size"][$i] / 1024) . " kB<br>";
            echo "Temp file: " . $_FILES["file"]["tmp_name"][$i] . "<br>";

            if (file_exists("upload/" . $_FILES["file"]["name"][$i])){
                echo $_FILES["file"]["name"][$i] . " already exists. ";
            }else{
                move_uploaded_file($_FILES["file"]["tmp_name"][$i],
                "upload/" . $_FILES["file"]["name"][$i]);
                echo "Stored in: " . "upload/" . $_FILES["file"]["name"][$i];
            }
        }
    }else{
        echo "Invalid file";
    }
        echo "<br><br>";
}
?>

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


for($i=0;$i<count($_FILES["file"]["name"]);$i++){

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

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

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

خوانده شد
مبحث بالا، مفید بود و سایت کلیدستان را دوست داشتم :
محبوب کردن این مبحث در گوگل :
اون چیزی که میخواستم نبود :
سوال دارم :
ارسال نظر :
نظرات 0 0 0

*** نظر بدهید

دسترسی سریع

×

شماره کلید


کلید
×

شماره دسته کلید


دسته کلید
×

جستجو


جستجو

راهنمای توابع PHP

راهنمای توابع PHP بر اساس حرف اول تابع :

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

بستن منو
۵۳۶
تعداد کلیدهای این موضوع
لیست همه کلیدهای این موضوع
مجموعه ویدئوهای آموزشی PHP - مجموعه PHP Tutorials - از thenewboston.com
200
مجموعه ویدئوهای آموزشی PHP - مجموعه PHP Tutorials
69
مجموعه ویدئوهای آموزشی PHP برای مبتدیان - مجموعه PHP beginners tutorials
55
مجموعه ویدئوهای آموزشی ساخت دانلودر اینستاگرام با استفاده از PHP - مجموعه PHP Instagram Downloader Tutorial - از thenewboston.com
10
مجموعه ویدئوهای آموزشی PHP Stock Market Analyzer - مجموعه PHP Stock Market Analyzer - از thenewboston.com
20
مجموعه ویدئوهای آموزشی امنیت در PHP - مجموعه PHP Security
10
مجموعه ویدئوهای آموزشی امنیت در PHP - مجموعه PHP Security
6
مجموعه ویدئوهای آموزشی برنامه نویسی شیء گرا (OOP) در PHP - مجموعه PHP Object Oriented Programming (OOP)
13
مجموعه ویدئوهای آموزشی ساخت شبکه اجتماعی، با استفاده از PHP - مجموعه Social Network with PHP
37
مجموعه ویدئوهای آموزشی ساخت سیستم شناسایی کاربران، با استفاده از PHP - مجموعه PHP Authentication System
33
مجموعه ویدئوهای آموزشی ساخت آپلودر فایل (برای چندین فایل) با امکان نمایش پیشرفت آپلود، با استفاده از AJAX و بر اساس PHP - مجموعه AJAX Multiple File Uploader & Progress Bar
10
مجموعه ویدئوهای آموزشی ثبت نام و ورود و خروج کاربران، در PHP - مجموعه Register & Login
47
مجموعه ویدئوهای آموزشی PHP و MySQL ، با استفاده از MySQLi - مجموعه PHP and MySQL with MySQLi
9
مجموعه ویدئوهای آموزشی ساخت فایل PDF از HTML و CSS ، در PHP - مجموعه Generating PDF files from HTML and CSS
7
بستن منو
۵۰
تعداد کلیدهای این موضوع
لیست همه کلیدهای این موضوع
مباحث اولیه برای آشنایی با MySQL
13
خواندن اطلاعات کلی پایگاه های داده (databases)، در MySQL
3
خواندن اطلاعات از جدول ها (tables)، در MySQL
13
تغییر دادن اطلاعات جدول ها (tables)، در MySQL
4
شیوه های اشاره به ردیف های (rows) جدول (table)، در MySQL
1
تبدیل های مرتبط با پایگاه داده MySQL
1
query های آماده برای ساخت جدول های دارای اطلاعات، برای تست های کدنویسی، در MySQL
2
کار با اعداد، در MySQL
3
استفاده از کلاس mysqli در PHP ، برای کار با پایگاه داده MySQL
4
برنامه phpMyAdmin ، برای کار با پایگاه داده MySQL
2
مباحث عمومی در MySQL
4
بستن منو
۳۳
تعداد کلیدهای این موضوع
لیست همه کلیدهای این موضوع
مجموعه ویدئوهای آموزشی پایگاه داده MySQL - مجموعه MySQL Database Tutorial - از thenewboston.com
33
بستن منو
۵۸
تعداد کلیدهای این موضوع
لیست همه کلیدهای این موضوع
مباحث اولیه برای آشنایی با HTML
24
نمایش متن، در HTML
5
نمایش عکس، در HTML
5
لینک ها (Link)، در HTML
1
لیست ها (List)، در HTML
1
جدول ها (Table)، در HTML
2
فرم ها (Form)، در HTML
10
مباحث عمومی، در HTML
10

آخرین کلیدهای غیررایگان

شما هم می توانید کلیدهای غیررایگان منتشر کنید (بیشتر بدانید)