การสร้างฟอร์มเพื่ออัปโหลดไฟล์ ครั้งละหลายๆไฟล์

ตัวอย่างโค้ดนี้สามารถอัปโหลดได้ครั้งละหลายๆไฟล์ครับ มีตัวอย่างทั้งฟอร์มสำหรับส่งไฟล์ และไฟล์ upload.php สำหรับการรับไฟล์

ก่อนอื่นมาดูโค้ดฟอร์มสำหรับอัปโหลด ก่อนเลยนะครับ
<form method="post" action="upload.php" enctype="multipart/form-data">
<input type="file" name="fileupload[]"><br>
<input type="file" name="fileupload[]"><br>
<input type="file" name="fileupload[]"><br>
<input type="file" name="fileupload[]"><br>
<input type="file" name="fileupload[]"><br>
<input type="submit" name="Submit" value="อัปโหลด">
</form>

ตัวอย่างนี้จะเห็นว่า  มี input file อยู่ทั้งหมด 5 ตัว เป็นแอเรย์ขื่อ fileupload[] ทำให้สามารถอัปโหลดไฟล์ได้พร้อมกัน 5 ไฟล์ และยังสามารถเพิ่ม input ชนิดไฟล์ได้อย่างไม่จำกัดอีกด้วย

เมื่อมีการ submit form ไป ไฟล์จะถูกส่งไปที่ upload.php ตาม action ของฟอร์ม ซึ่งเราสามารถเขียนโค้ดสำหรับรับค่าจาก input file แบบแอเรย์ได้ดังนี้
<?php
// รับค่าไฟล์อัปโหลดที่ส่งมาจากฟอร์ม
$fileupload = $_FILES['fileupload'];
// วนลูปทีละรายการ
foreach ($fileupload['tmp_name'] as $i => $tmp_name) {
    // ตรวจสอบว่ามีไฟล์ส่งมาหรือไม่
    if ($tmp_name != '') {
        // แสดงผลค่าที่ส่งมา
        echo $fileupload['name'][$i].'<br>';
        echo $tmp_name.'<br>';
        echo $fileupload['type'][$i].'<br>';
        echo $fileupload['size'][$i].'<br>';
        echo '-----------<br>';
        // สำเนาไฟล์ไปยังปลายทาง
        //copy($tmp_name, 'path/to/'.$fileupload['name'][$i]);
    }
}

ตัวอย่างนี้ ผมใช้การวนลูปรับค่าจาก input ไฟล์แต่ละตัวในรูปแบบ แอเรย์ ซึ่งข้อดีของวิธีนี้คือ เราสามารถรับไฟล์เพิ่มได้โดยแค่เพิ่ม input ไฟล์ที่ฟอร์มเท่านั้น โดยไม่ต้องแก้ไขโค้ดที่ upload.php เพิ่มเติม อย่างไรก็ตามการอัปโหลดครั้งละหลายๆไฟล์ มีข้อควรระวัง คือการเกิด time out ระหว่างการอัปโหลด อันเกิดจากเน็ตที่ใช้อยู่ช้าหรือไฟล์มีขนาดใหญ่เกินไปได้

Related

^