การสร้างฟอร์มเพื่ออัปโหลดไฟล์ ครั้งละหลายๆไฟล์
ก่อนอื่นมาดูโค้ดฟอร์มสำหรับอัปโหลด ก่อนเลยนะครับ
<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 ระหว่างการอัปโหลด อันเกิดจากเน็ตที่ใช้อยู่ช้าหรือไฟล์มีขนาดใหญ่เกินไปได้