วันศุกร์ที่ 1 มิถุนายน พ.ศ. 2555

File Upload


การสร้างแบบฟอร์มส่งไฟล์

เราจะสร้างแบบฟอร์ม HTML ง่ายๆ ตามนี้:
<html>
<body>
<form action="upload_file.php" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"> 
<br>
<input type="submit" name="submit" value="Submit">
</form>
</body>
</html>
จากแบบฟอร์ม HTML ข้างบนนี้อธิบายได้ว่า:

  • แท็ก form ต้องใส่ enctype = "multipart/form-data" เพื่ออัพโหลดข้อมูลเป็นแบบไบนารี่ (binary)
  • แท็ก input ต้องเลือก type = "file" เพราะจะมีปุ่มให้ browse file ได้
    Note: การปล่อยให้ใครก็ตามสามารถอัพโหลดไฟล์ได้เป็นความเสี่ยงในด้านความปลอดภัยอย่างมาก ดังนั้นควรอนุญาติให้คนที่ไว้ใจได้เท่านั้นทำการอัพโหลดไฟล์

    การสร้างสคริปต์อัพโหลด

    ไฟล์ชื่อ upload_file.php เขียนสคริปต์เพื่ออัพโหลดไฟล์ตามนี้:
    <?php
    if ($_FILES["file"]["error"] > 0)
      {
      echo "Error: " . $_FILES["file"]["error"] . "<br>";
      }
    else
      {
      echo "Upload: " . $_FILES["file"]["name"] . "<br>";
      echo "Type: " . $_FILES["file"]["type"] . "<br>";
      echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br>";
      echo "Stored in: " . $_FILES["file"]["tmp_name"];
      }
    ?>
    ใช้ $_FILES array แยกแยะค่าพารามิเตอร์ต่างๆ ของไฟล์ ดังนี้:

  • $_FILES["file"]["name"] - ชื่อของไฟล์
  • $_FILES["file"]["type"] - ชนิดของไฟล์ เช่น image/gif
  • $_FILES["file"]["size"] - ขนาดเป็นไบต์ (bytes) ของไฟล์
  • $_FILES["file"]["tmp_name"] - ไฟล์ชั่วคราวเพื่อรอไปเก็บไว้บนเซิร์ปเวอร์
  • $_FILES["file"]["error"] - โค้ดแสดงข้อผิดพลาดจากไฟล์ที่อัพโหลด
    นี่เป็นแค่การแสดงข้อมูลไฟล์ที่อัพโหลดเท่านั้น เพื่อเพิ่มความปลอดภัยแก่เซิร์ปเวอร์ คุณต้องเพิ่มเงื่อนไขเข้าไปอีก

    ข้อจำกัดในการอัพโหลด

    ในสคริปต์นี้ เราจะจำกัดผู้ใช้ให้อัพโหลดได้เฉพาะไฟล์รูปภาพ .gif กับ .jpeg เท่านั้น และขนาดไฟล์ต้องไม่เกิน 20 kb ด้วย:

    <?php
    if ((($_FILES["file"]["type"] == "image/gif")
    || ($_FILES["file"]["type"] == "image/pjpeg"))
    && ($_FILES["file"]["size"] < 20000))
      {
      if ($_FILES["file"]["error"] > 0)
        {
        echo "Error: " . $_FILES["file"]["error"] . "<br>";
        }
      else
        {
        echo "Upload: " . $_FILES["file"]["name"] . "<br>";
        echo "Type: " . $_FILES["file"]["type"] . "<br>";
        echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br>";
        echo "Stored in: " . $_FILES["file"]["tmp_name"];
        }
      }
    else
      {
      echo "Invalid file";
      }
    ?>

    การเซฟไฟล์

    จากสคริปต์ข้างบน ไฟล์ได้ถูกส่งไปเก็บไว้ที่โฟลเดอร์ชั่วคราวบนเซิร์ปเวอร์แล้ว

    แต่ไฟล์ชั่วคราวนั้นจะถูกลบทิ้งหลังจากสคริปต์สิ้นสุด ดังนั้นเราต้องก็อปปี้ไฟล์ชั่วคราวนั้นไปเก็บไว้ที่เราต้องการ

    <?php
    if (($_FILES["file"]["type"] == "image/gif")
    || ($_FILES["file"]["type"] == "image/pjpeg")
    && ($_FILES["file"]["size"] < 20000))
      {
      if ($_FILES["file"]["error"] > 0)
        {
        echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
        }
      else
        {
        echo "Upload: " . $_FILES["file"]["name"] . "<br>";
        echo "Type: " . $_FILES["file"]["type"] . "<br>";
        echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br>";
        echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
        if (file_exists("upload/" , $_FILES["file"]["name"]))
          {
          echo $_FILES["file"]["name"] . " already exists. ";
          }
        else
          {
          move_uploaded_file($_FILES["file"]["tmp_name"],
          "upload/" , $_FILES["file"]["name"]);
          echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
          }
        }
      }
    else
      {
      echo "Invalid file";
      }
    ?>
    สคริปต์ข้างบนจะตรวจสอบว่ามีไฟล์ชื่อนี้อยู่แล้วหรือไม่ ด้วยฟังก์ชั่น file_exists() ถ้าไฟล์ชื่อนี้ไม่มีอยู่ก็จะก็อปปี้ไฟล์ ไปไว้โฟลเดอร์ที่ระบุในที่นี้คือโฟลเดอร์ชื่อ "Upload/" ด้วยฟังก์ชั่น move_uploaded_file()

    คุณสามารถตั้งชื่อไฟล์ได้เอง โดยการเปลี่ยน "upload/" , $_FILES["file"]["name"] ในฟังก์ชั่น move_uploaded_file() ไปเป็น "upload/ชื่อไฟล์พร้อมนามสกุล"

    ไม่มีความคิดเห็น:

    แสดงความคิดเห็น