Thursday, February 17, 2011

Upload File ด้วย PHP

สำหรับคราวนี้ เราจะดูวิธีการในการ Upload File โดยใช้ PHP ซึ่ง ก็เป็นเรื่องง่ายมากครับ และในตัวอย่างนี้ผมใช้ Run กะ IIS บน WindowsXP Professional ซึ่งได้ทำการลง PHP Version 4.3.0 ซึ่ง Download มาจาก www.php.net และสำหรับเพื่อนๆที่ได้ใช้ Windows ตัวอื่นๆ สามารถ อ่านวิธีการติดตั้ง ได้จาก บทความ ที่ผ่านมาของผมครับ (ติดตั้ง PHP 4 บน WINDOWS 9X, Me และ NT(IIS2 และ IIS3), ติดตั้ง PHP 4 บน WINDOWS 2000) แต่สำหรับผู้ใช้ WindowsXP ก็มีวิธีคล้ายกัน ที่เพิ่มเข้ามาก็คือ ให้เข้าไปแก้ไฟล์ php.ini ในหัวข้อ cgi.force_redirect = 0 ครับ ต่อจากนั้นก็ให้ทดสอบ โดยใช้วิธีการทดสอบเดียวกันกับ ติดตั้ง PHP 4 บน WINDOWS 2000 ครับ โดยใช้เพียง function phpinfo(); ในการทดสอบครับ ดังตัวอย่างด้านล่าง
test.php

<?php
     phpinfo();
?>
สำหรับการปรับแต่งการ Upload สามารถปรับเปรียนได้ที่ไฟล์ php.ini โดยดูที่
file_uploads = On
และสำหรับ upload_tmp_dir = จะเป็นการกำหนด path ที่ใช้เป็น Temp เก็บไฟล์ไว้ชั่วคราวเท่านั้น โดยไฟล์ต่างๆ ที่เรา upload มาแล้วจะถูกเก็บไว้ใน Path นี้ ไว้ไม่นาน ก็จะถูกลบโดยอัตโนมัติครับ , ค่าของ upload_tmp_dir นี้ เราไม่ต้องกำหนด ก็ได้ครับ เพราะมันจะใช้ Temp ที่มีในระบบ OS นั้นๆครับ
upload_max_filesize จะเป็นการกำหนด ขนาดของไฟล์สูงสุดที่ สามารถรับได้
เอาละครับงานนี้เรามาดูส่วนของไฟล์ html ที่จะทำหน้าที่เป็นตัว Post ข้อมูลไปยังไฟล์ php โดยมีโค้ดดังนี้
upload.html
<html> 
<form action="upload.php" method=post enctype="multipart/form-data"> 
    File: <input type=file name="userfile"><br> 
   <input type=submit><br> 
</form> 
</html> 
โดยส่วนที่สำคัญ ก็คือส่วนของ enctype="multipart/form-data" และ name="userfile" โดย ส่วนแรกจะเป็นการบอกว่ามีการ ส่งทั้ง ข้อมูลที่เป็นข้อความ และ ที่เป็นไฟล์ครับ ,ส่วนหลังจะเป็นการกำหนดชื่อของ Input ที่ส่งไป ครับ
ตอนนี้ ก็มาถึงเรื่องไฟล์ php ที่เราจะใช้ในการรับ และ จัดการกับ ไฟล์ที่ส่งมา โดยมีโค้ดดังตารางด้านล่าง
upload.php
<?php
  $realname = $HTTP_POST_FILES['userfile']['name'];
  if (is_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name']))
  {
     copy($HTTP_POST_FILES['userfile']['tmp_name'], "./upload/$realname");
     echo "Upload Filename: " . $HTTP_POST_FILES['userfile']['name'];
  }
  else{
     echo "Upload not complete";
   }
?>
***ก่อนเราจะทำการทดสอบโค้ด ให้คุณ สร้าง โฟล์เดอร์ upload ไว้ที่ๆเดียวกับที่คุณเก็บไฟล์ php นะครับ
จากโค้ดข้างต้น จะเป็นการเก็บชื่อไฟล์ที่เรา upload มา เก็บไว้ในตัวแปร $realname จากนั้นจะเป็นการตรวจสอบว่า ในข้อมูลที่ส่งมา (ผ่าน การ Post ) มีไฟล์มาด้วยหรือ ไม่ ถ้าไม่ ก็ให้แสดงข้อความว่า Upload not complete แต่ หากว่า มีการส่งไฟล์มาด้วย ก็จะทำการ คัดลอกไฟล์ดังกว่า ด้วยการใช้ function copy คัดลอกไปไว้ใน โฟล์เดอร์ upload โดยมีชื่อไฟล์ เป็นชื่อเดิมของไฟล์ที่ส่งมา หลังจากนั้นก็แสดงข้อความ Upload File : และชื่อไฟล์ที่ได้รับ
ทิ้งทาย
หากว่าคุณไม่สามารถใช้ $HTTP_POST_FILES ได้ ให้คุณทำการเพิ่มโค้ด
global $HTTP_POST_FILES;
ไว้เป็นบรรทัดแรกของโปรแกรม และสำหรับ ฟังก์ชั่น is_uploaded_file นั้นจะใช้ได้ตั้งแต่ PHP 3>= 3.0.17 และ PHP 4 >= 4.0.3 ครับ แล้วพบกันใหม่กับ 9M

0 comments:

Post a Comment

 
Design by sutoday | Bloggerized by storesu - suvachai | laikeng