ตัวอย่างง่ายๆกับการอับโหลดไฟล์ด้วย PHP ใครๆก็ทำได้ [ตอนที่2 ความเหมือนที่แตกต่าง]
มาพบกันในตอนที่สองครับ ยังไม่ทันได้เขียนตอนสองก็มีคนท้วงติงมาว่า ทำไม่ไม่ใช้ move_upload_file(ผู้ท้วงติงบอกว่าใช้ copy() แล้วมีไฟล์ temp ค้างอยู่ไม่ถูลบทำให้เปลืองพื้นที่ server ) ผมตอบง่ายๆเลยนะครับเพราะว่า copy มันเขียนสั้นกว่า move_uploaded_file ไงครับและตัวมันก็สื่อความหมายได้ดีว่าก็อปปี้ บทความตอนแรกจึงเสนอในรูปแบบการใช้ copy ให้ดูง่ายเหมือนกับชื่อบทความที่ตั้งไว้ แล้วถามต่อว่า ระหว่าง copy() กับ move_upload_file ต่างกันอย่างไร ผมก็ขอตอบท่านผู้ถามดังนี้ ความแตกต่างกันก็ระหว่าง move_uploaded_file() คือ copy() สามารถ clone file และเคลื่อนย้ายไปสู่เป้าหมายที่เรากำหนดได้โดย clone ไฟล์มาจากแหล่งใดก็ได้ที่เรากำหนดเช่น เมื่อเราอับโหลดไฟล์ผ่าน form ที่มี method เป็น POST ไฟล์ก็จะถูกเก็บไว้เป็นไฟล์ temp ในเครื่องคอมพิวเตอร์ของเรานั้นเอง เมื่อเราใช้ ฟังชั่น copy ก็เท่ากับเราทำการ clone ไฟล์ temp ในคอมพิวเตอร์ของเราขึ้นสู่ server พูดอย่างนี้มือใหม่อาจจะงงว่ารู้ได้ไงว่าไฟล์ temp ถูกเก็บในเครื่องของเราเองอันนี้ก็ต้องพิสูจน์ลงมือทำให้เห็นตาจะได้สว่างโดยทำดังนี้
สร้างไฟล์ upload.php ในไฟล์มี 2 ส่วนคือ form html และส่วนของโค้ด php ดังนี้
Code:
<html>
<head>
<title>ตัวอย่างแสดงที่อยู่ของไฟล์ temp ก่อนถูกอับโหลดขึ้น server By www.thainetdev.com</title>
</head>
<body>
<form enctype="multipart/form-data" method="post" action="">
<input type="file" name="fileupload" id="fileupload">
<input type="submit" value="upload">
</form>
</body>
</html>
<?php
echo "นี้คือที่อยู่ของไฟล์ temp ก่อนอับโหลดขึ้น server --> ". $_FILES['fileupload']['tmp_name'];
//ผลลัพธ์ที่ได้
//นี้คือที่อยู่ของไฟล์ temp ก่อนอับโหลดขึ้น server --> C:\WINDOWS\TEMP\phpF8.tmp
?>
จากผลการลงมือพิสูจน์ด้วยตัวเองก็เห็นได้ว่าไฟล์ ถูกเก็บไว้ในเครื่องก่อนถูก clone ไปอยู่บน server ด้วย ฟังค์ชั่น copy() แล้วจะทำให้เปลื่องเนื้อที่บน server ได้ยังไงครับ
ขอดีของ copy() ก็อย่างที่บอกสามารถ clone file จากแหล่งที่เรากำหนดได้ทุกที่ ให้ไปอยู่ในส่วนของเป้าหมายที่เรากำหนด
เช่น copy("http://forums.thainetdev.com/style_emoticons/default/rolleyes.gif","file.gif"); เป็นต้น
ส่วนที่ว่า copy() ต่างจาก move_uploaded_file ยังไงในเมื่อวิธีการใช้เหมือนๆกัน ตอบก็คือ move_uploaded_file ไม่สามารถย้ายหรือ clone ไฟล์จากแหล่งอ่างอิงอื่นได้นอกจาก HTTP POST เท่านั้นก็คือทาง form ที่กำหนด method=POST นั้นเอง
แล้วอย่างนี้จะไม่ใช้ copy ได้ไง ผมสรุปตามความรู้สึกของผมถ้าให้เทียบระหว่า copy() กับ move_uploaded_file() ในการใช้อับโหลดไฟล์แบบง่ายๆผมขอเลือกใช้ copy() ครับ
เพิ่มเติมสำหรับมือใหม่
Code:
เราใช้ $_FILES array เพื่อแยกแยะค่าพารามิเตอร์ต่างๆ ของไฟล์ ได้ดังนี้:
$_FILES["file"]["name"] - ชื่อของไฟล์
$_FILES["file"]["type"] - ชนิดของไฟล์ เช่น image/jpg เป็นต้น
$_FILES["file"]["size"] - ขนาดไบต์ (bytes) ของไฟล์
$_FILES["file"]["tmp_name"] - ไฟล์ชั่วคราวเพื่อรอไปเก็บไว้บนเซิร์ปเวอร์
$_FILES["file"]["error"] - โค้ดแสดงข้อผิดพลาดจากไฟล์ที่อัพโหลด
ตอนต่อไปเรามาพบกับ การอับโหลดไฟล์อย่างไรให้ปลอดภัยมากขึ้นกันครับ (เราจะใช้ move_uploaded_file กันละคราวนี้)
บทความโดย thainetdev.com