ผ่าน PHP สามารถอัพโหลดไฟล์ไปยังเซิร์ฟเวอร์ได้
ตัวอย่างในบทนี้เสร็จสมบูรณ์ภายใต้โครงการทดสอบ และโครงสร้างไดเร็กทอรีคือ:
ทดสอบ|-----upload # Directory สำหรับอัพโหลดไฟล์|-----form.html # ไฟล์แบบฟอร์ม|-----upload_file.php # รหัสอัพโหลด PHP
การอนุญาตให้ผู้ใช้อัปโหลดไฟล์จากแบบฟอร์มมีประโยชน์มาก
ดูแบบฟอร์ม HTML ต่อไปนี้สำหรับการอัปโหลดไฟล์:
<html><head><meta charset="utf-8"><title>บทช่วยสอนการเขียนโค้ด (codercto.com)</title></head><body><form action="upload_file.php" method=" post " enctype="multipart/form-data"> <label for="file">ชื่อไฟล์:</label> <input type="file" name="file" id="file"><br> <ประเภทอินพุต ="ส่ง" ชื่อ="ส่ง" value="ส่ง"></form></body></html>
บันทึกโค้ดข้างต้นลงในไฟล์ form.html
หมายเหตุบางประการเกี่ยวกับแบบฟอร์ม HTML ด้านบนมีดังต่อไปนี้:
แอตทริบิวต์ enctype ของแท็ก <form> ระบุประเภทเนื้อหาที่จะใช้เมื่อส่งแบบฟอร์ม เมื่อแบบฟอร์มต้องการข้อมูลไบนารี เช่น เนื้อหาไฟล์ ให้ใช้ " multipart/form-data "
แอตทริบิวต์ type="file" ของแท็ก <input> ระบุว่าอินพุตควรได้รับการประมวลผลเป็นไฟล์ ตัวอย่างเช่น เมื่อดูตัวอย่างในเบราว์เซอร์ คุณจะเห็นปุ่มเรียกดูถัดจากช่องป้อนข้อมูล
หมายเหตุ: การอนุญาตให้ผู้ใช้อัปโหลดไฟล์ถือเป็นความเสี่ยงด้านความปลอดภัยอย่างมาก โปรดอนุญาตให้เฉพาะผู้ใช้ที่เชื่อถือได้เท่านั้นที่สามารถดำเนินการอัพโหลดไฟล์ได้
ไฟล์ "upload_file.php" มีโค้ดสำหรับการอัพโหลดไฟล์:
<?phpif ($_FILES["file"]["error"] > 0){ echo "Error:" . $_FILES["file"]["error"] . อัพโหลดชื่อไฟล์: " . $_FILES["file"]["name"] . "<br>"; echo "ประเภทไฟล์: " . $_FILES["file"]["type"] . "<br>"; echo "ขนาดไฟล์: " . ($_FILES["file"]["size"] / 1024) . " kB<br>"; $_FILES[ "file"]["tmp_name"];}?>
ด้วยการใช้ $_FILES อาร์เรย์ส่วนกลางของ PHP คุณสามารถอัพโหลดไฟล์จากคอมพิวเตอร์ไคลเอนต์ไปยังเซิร์ฟเวอร์ระยะไกลได้
พารามิเตอร์แรกคือชื่ออินพุตของแบบฟอร์ม และตัวห้อยที่สองอาจเป็น "ชื่อ", "ประเภท", "ขนาด", "tmp_name" หรือ "ข้อผิดพลาด" ดังที่แสดงด้านล่าง:
$_FILES["file"]["name"] - ชื่อของไฟล์ที่อัพโหลด
$_FILES["file"]["type"] - ประเภทของไฟล์ที่อัพโหลด
$_FILES["file"]["size"] - ขนาดของไฟล์ที่อัพโหลด หน่วยเป็นไบต์
$_FILES["file"]["tmp_name"] - ชื่อของสำเนาชั่วคราวของไฟล์ที่เก็บไว้บนเซิร์ฟเวอร์
$_FILES["file"]["error"] - รหัสข้อผิดพลาดที่เกิดจากการอัพโหลดไฟล์
นี่เป็นวิธีอัปโหลดไฟล์ที่ง่ายมาก ด้วยเหตุผลด้านความปลอดภัย คุณควรเพิ่มข้อจำกัดว่าใครได้รับอนุญาตให้อัปโหลดไฟล์
ในสคริปต์นี้ เราได้เพิ่มข้อจำกัดในการอัพโหลดไฟล์ ผู้ใช้สามารถอัปโหลดได้เฉพาะไฟล์ .gif, .jpeg, .jpg, .png และขนาดไฟล์ต้องน้อยกว่า 200 kB:
<?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"||. "file"]["type"] == "image/pjpeg")||. ($_FILES["file"]["type"] == "image/x-png"|| ($_FILES["file"]["type"] == "image/png"))&& ($_FILES["file"]["size"] < 204800) // น้อยกว่า 200 kb&& in_array($extension, $ AllowExts)){ if ($_FILES["file"]["error"] > 0) { echo "Error:: " . $_FILES["file"]["error"] . "<br>"; } else { echo "อัปโหลดชื่อไฟล์: " . $_FILES["file"]["name"] "ประเภทไฟล์: " . $_FILES["file"]["type"] . "<br>"; . " kB<br>"; echo "ตำแหน่งที่เก็บไฟล์ไว้ชั่วคราว: " . $_FILES["file"]["tmp_name"]; }}else{ echo "รูปแบบไฟล์ที่ผิดกฎหมาย";}?>
ตัวอย่างข้างต้นสร้างสำเนาชั่วคราวของไฟล์ที่อัปโหลดในโฟลเดอร์ชั่วคราว PHP ของเซิร์ฟเวอร์
สำเนาชั่วคราวนี้จะหายไปเมื่อสคริปต์สิ้นสุด หากต้องการบันทึกไฟล์ที่อัปโหลด เราจำเป็นต้องคัดลอกไปยังตำแหน่งอื่น:
<?php// คำต่อท้ายรูปภาพที่อนุญาต $allowedExts = array("gif", "jpeg", "jpg", "png");$temp = explode(".", $_FILES["file"][" name "]);echo $_FILES["file"]["size"];$extension = end($temp); // รับส่วนต่อท้ายไฟล์ถ้า ((($_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"] < 204800) // น้อยกว่า 200 kb&& in_array($extension, $allowedExts)){ if ($_FILES["file"]["error"] > 0) { echo "ข้อผิดพลาด: " . $_FILES["file"]["error"] } else { echo "อัปโหลดชื่อไฟล์ : " . $_FILES["file"]["name"] . "<br>"; echo "ประเภทไฟล์: " . $_FILES["file"]["type"] . "<br>"; echo "ขนาดไฟล์: " . ($_FILES["file"]["size"] / 1024) . " kB<br>"; ["tmp_name "] . "<br>"; // ตรวจสอบว่ามีไฟล์อยู่ในไดเร็กทอรีอัปโหลดภายใต้ไดเร็กทอรีปัจจุบันหรือไม่ // หากไม่มีไดเร็กทอรีอัปโหลด คุณต้องสร้างมันขึ้นมา (file_exists("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " ไฟล์นี้มีอยู่แล้ว "; } else { // หากไม่มีไฟล์อยู่ในไดเร็กทอรีอัพโหลด ให้อัพโหลดไฟล์ไปยังไดเร็กทอรีอัพโหลด move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file "][ "name"]); echo "ไฟล์ถูกเก็บไว้ใน: " . "upload/" . $_FILES["file"]["name"]; } }}else{ echo "รูปแบบไฟล์ผิดกฎหมาย";}?>
สคริปต์ด้านบนจะตรวจสอบว่าไฟล์มีอยู่แล้วหรือไม่ หากไม่มี ก็จะคัดลอกไฟล์ไปยังไดเร็กทอรีชื่อ "upload"