Thursday, February 17, 2011

การ Upload File มาที่ Web Server โดยใช้ php ทำยังไง

สวัสดีครับ วันนี้จะขอเขียนตัวอย่างง่ายๆ ในการ Upload ไฟล์จากเครื่องผู้ใช้ มาที่ web server โดยใช้ php ซึ่งท่านสามารถเอาไปดัดแปลงเพื่อให้ใช้งานได้ตามความต้องการครับ

ในตัวอย่างนี้จะมีไฟล์ด้วยกัน 2 ไฟล์ครับ ไฟล์แรก จะเป็นฟอร์มในการ ใส่ชื่อไฟล์ที่จะ Upload ครับ ชื่อว่า main.htm code เป็นดังนี้ครับ

<HTML>
<FORM ENCTYPE="multipart/form-data" ACTION="add_file.php" METHOD="post">
Upload ไฟล์นี้มาที่ Server: <INPUT TYPE="file" NAME="userfile"><BR>
<INPUT TYPE="submit" VALUE="Upload"><BR>
</FORM>
</HTML>


ซึ่งก็จะเห็นว่าไม่มีอะไรยาก มีเพียงแค่ ENCTYPE="multipart/form-data" ที่จะบอกว่า ข้อมูลใน form นี้เป็น mime format เท่านั้นเอง

คราวนี้ลองมาดูอีกไฟล์ที่เป็นส่วนในการจัดการ upload มาที่ server ชื่อ add_file.php ครับ หน้าตาเป็นดังนี้
<?php
$Upload_Dir = "d:"; //กำหนดว่าจะให้ copy ไฟล์ที่มาจากเครื่องผู้ใช้ไปที่ใด ระบุที่นี่ได้ครับ
$Max_File_Size = 100000; //กำหนดขนาดไฟล์ที่ใหญ่ที่สุดที่อนุญาตให้ upload มาที่ Server มีหน่วยเป็น byte
$File_Type_Allow = array("application/x-zip-compressed" /*.zip*/,
                    "text/plain" /*.txt*/,
                    "image/bmp" /* .bmp, .ico*/,
                    "image/gif" /* .gif*/,
                    "image/pjpeg" /*.jpg, .jpeg*/,
                    "image/jpeg" /* .jpg, .jpeg*/); //กำหนดประเภทของไฟล์ว่าไฟล์ประเภทใดบ้างที่อนุญาตให้ upload มาที่ Server

function validate_form($file_input,$file_size,$file_type) { //เป็น function ที่เอาไว้ตรวจสอบว่าไฟล์ที่ผู้ใช้ upload ตรงตามเงื่อนไขหรือเปล่า
   global $Max_File_Size,$File_Type_Allow;
   if ($file_input == "none") {
      $error = "ไม่มี file ให้ Upload";
   } elseif ($file_size > $Max_File_Size) {
      $error = "ขนาดไฟล์ใหญ่กว่า $Max_File_Size ไบต์";
   } elseif (!check_type($file_type,$File_Type_Allow)) {
      $error = "ไฟล์ประเภทนี้ ไม่อนุญาตให้ Upload";
   } else {
      $error = false;
   }

   return $error;
}

function check_type($type_check) { //เป็นฟังก์ชัน ที่ตรวจสอบว่า ไฟล์ที่ upload อยู่ในประเภทที่อนุญาตหรือเปล่า
   global $File_Type_Allow;
   for ($i=0;$i<count($File_Type_Allow);$i++) {
      if ($File_Type_Allow[$i] == $type_check) {
         return true;
      }
   }
   return false;
}

$error_msg = validate_form($userfile,$userfile_size,$userfile_type); // ตรวจดูว่า ไฟล์ที่ upload ตรงตามเงื่อนไขหรือเปล่า
if ($error_msg) {
   echo $error_msg;
} else {
   if (copy($userfile,$Upload_Dir."/$userfile_name")) { //ทำการ copy ไฟล์มาที่ Server
      echo "ไฟล์ Upload เรียบร้อย";
   } else {
      echo "ไฟล์ Upload มีปัญหา";
   }
}
?>

ครับสำหรับตัวอย่างนี้ก็คงไม่ยากอะไรในการที่จะ upload ไฟล์มาที่ Server นะครับ แต่มีข้อระวังอยู่นิดหน่อยก็คือ ในตัวอย่างจะเป็น code ที่ ทดสอบที่เครื่องของผู้เขียนเอง โดยใช้ Apache และ php บน Win98 หากจะเปลี่ยนมาใช้บน Unix Server ก็ให้แก้ตัวแปร $Upload_Dir เป็น ของ unix และที่สำคัญท่านอาจพบปัญหาเกี่ยวกับ permission ท่านต้องแน่ใจว่า directory ที่ท่านระบุเปิดสิทธิ์ให้ทุกคนมีสิทธิ์เขียนไปที่ Directory นั้นด้วย หากพบปัญหาอะไรก็ถามมาได้ครับ

0 comments:

Post a Comment

 
Design by sutoday | Bloggerized by storesu - suvachai | laikeng