การสร้างฟอร์มเพื่ออัปโหลดไฟล์ ครั้งละหลายๆไฟล์
ตัวอย่างโค้ดนี้สามารถอัปโหลดได้ครั้งละหลายๆไฟล์ครับ มีตัวอย่างทั้งฟอร์มสำหรับส่งไฟล์ และไฟล์ upload.php สำหรับการรับไฟล์
ก่อนอื่นมาดูโค้ดฟอร์มสำหรับอัปโหลด ก่อนเลยนะครับ
ตัวอย่างนี้จะเห็นว่า มี input file อยู่ทั้งหมด 5 ตัว เป็นแอเรย์ขื่อ fileupload[] ทำให้สามารถอัปโหลดไฟล์ได้พร้อมกัน 5 ไฟล์ และยังสามารถเพิ่ม input ชนิดไฟล์ได้อย่างไม่จำกัดอีกด้วย
เมื่อมีการ submit form ไป ไฟล์จะถูกส่งไปที่ upload.php ตาม action ของฟอร์ม ซึ่งเราสามารถเขียนโค้ดสำหรับรับค่าจาก input file แบบแอเรย์ได้ดังนี้
ตัวอย่างนี้ ผมใช้การวนลูปรับค่าจาก input ไฟล์แต่ละตัวในรูปแบบ แอเรย์ ซึ่งข้อดีของวิธีนี้คือ เราสามารถรับไฟล์เพิ่มได้โดยแค่เพิ่ม input ไฟล์ที่ฟอร์มเท่านั้น โดยไม่ต้องแก้ไขโค้ดที่ upload.php เพิ่มเติม อย่างไรก็ตามการอัปโหลดครั้งละหลายๆไฟล์ มีข้อควรระวัง คือการเกิด time out ระหว่างการอัปโหลด อันเกิดจากเน็ตที่ใช้อยู่ช้าหรือไฟล์มีขนาดใหญ่เกินไปได้
ก่อนอื่นมาดูโค้ดฟอร์มสำหรับอัปโหลด ก่อนเลยนะครับ
<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 ระหว่างการอัปโหลด อันเกิดจากเน็ตที่ใช้อยู่ช้าหรือไฟล์มีขนาดใหญ่เกินไปได้