การอัพโหลดไฟล์ใน php

PHP Knowledge เป็น บอร์ดรวามความรู้ php เน้นบทความ แนวทางการเขียนโปรแกรม บันทึกกันลืม เพื่อให้สมาชิกได้เขียนความรู้ที่ตัวเองมีให้สมาชิกท่านอื่นๆ ได้ เข้ามาอ่าน และ ไว้อ่านเองกันลืมด้วย

Moderator: mindphp, ผู้ดูแลกระดาน

abdkode
PHP Super Member
PHP Super Member
โพสต์: 361
ลงทะเบียนเมื่อ: 07/01/2019 9:56 am

การอัพโหลดไฟล์ใน php

โพสต์ที่ยังไม่ได้อ่าน โดย abdkode »

การอัปโหลดไฟล์บนเซิร์ฟเวอร์ เราสามารถใช้รูปแบบ Simple HTML และ PHP ซึ่งสามารถอัปโหลดไฟล์ประเภทใดก็ได้เช่น รูปภาพ,วิดีโอ,ไฟล์ ZIP, เอกสาร,ไฟล์ PDF, รวมถึงไฟล์ประเภทอื่น ๆ
ขั้นตอนแรก จะเป็นการสร้าง form HTML อย่างง่ายที่สามารถใช้ในการอัปโหลดไฟล์รูปภาพ

โค้ด: เลือกทั้งหมด

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>File Upload Form</title>
</head>
<body>
    <form action="upload-manager.php" method="post" enctype="multipart/form-data">
        <h2>Upload File</h2>
        <label for="fileSelect">Filename:</label>
        <input type="file" name="photo" id="fileSelect">
        <input type="submit" name="submit" value="Upload">
        <p><strong>Note:</strong> Only .jpg, .jpeg, .gif, .png formats allowed to a max size of 5 MB.</p>
    </form>
</body>
</html>
ต่อมาสร้าง php เพื่อตรวจข้อมูลของไฟล์ และอัพโหลดไปยังเซิฟเวอร์ อาจจะตั้งชื่อไฟล์ว่า upload-manager.php
โค้ดตัวอย่างดังนี้

โค้ด: เลือกทั้งหมด

<?php
// ตรวจสอบการ submit ของ form 
if($_SERVER["REQUEST_METHOD"] == "POST"){
    //ตรวจสอบถ้าไฟล์ที่อัพโหลดไม่มีปัญหา errors
    if(isset($_FILES["photo"]) && $_FILES["photo"]["error"] == 0){
    	//สร้างตัวแปรและกำหนดนามสกุลไฟล์ที่รองรับ jpg,jpeg,gif,png 
        $allowed = array("jpg" => "image/jpg", "jpeg" => "image/jpeg", "gif" => "image/gif", "png" => "image/png");
        $filename = $_FILES["photo"]["name"];
        $filetype = $_FILES["photo"]["type"];
        $filesize = $_FILES["photo"]["size"];
    
        // Verify file extension
        $ext = pathinfo($filename, PATHINFO_EXTENSION);
        if(!array_key_exists($ext, $allowed)) die("Error: Please select a valid file format.");
    
        // กำหนด maximum ของ  file size - 5MB 
        $maxsize = 5 * 1024 * 1024;
        if($filesize > $maxsize) die("Error: File size is larger than the allowed limit.");
    
        // ตรวจสอบนามสกุลไฟล์ ถ้ารองรับ
        if(in_array($filetype, $allowed)){
            // ตรวจว่ามีไฟล์นี้หรือชื่อนี้ในเซิฟเวอร์แล้วหรือยัง
            if(file_exists("upload/" . $filename)){
                echo $filename . " is already exists.";
            } else{
                move_uploaded_file($_FILES["photo"]["tmp_name"], "upload/" . $filename);
                echo "Your file was uploaded successfully.";
            } 
        } else{
           //ถ้าไม่สามารถอัพโหลดได้
            echo "Error: There was a problem uploading your file. Please try again."; 
        }
    } else{
        echo "Error: " . $_FILES["photo"]["error"];
    }
}
?>
ในไฟล์ form เช่น ถ้าเรากำหนด name="photo" หากผู้ใช้รายใดอัปโหลดไฟล์โดยใช้ฟิลด์นี้ ในphp เราสามารถรับข้อมูลของไฟล์ผ่านทาง $_FILES["photo"]
และอาเรย์นี้สามารถแตกย่อยไปหลายตัว แต่ละตัวมีความหมายที่แตกต่างกัน :
$_FILES["photo"]["name"]- สำหรับระบุชื่อดั้งเดิมของไฟล์รวมถึงนามสกุลไฟล์
$_FILES["photo"]["type"] - สำหรับระบุประเภท MIME ของไฟล์หรือ นามสกุลไฟล์
$_FILES["photo"]["size"] - สำหรับนี้ระบุขนาดไฟล์เป็นไบต์
$_FILES["photo"]["tmp_name"] - สำหรับระบุชื่อรวมถึงตำแหน่งที่กำหนดให้เก็บไฟล์เมื่ออัปโหลดไปยังเซิร์ฟเวอร์แล้ว
$_FILES["photo"]["error"] - สำหรับ ระบุข้อผิดพลาดหรือรหัสสถานะที่เกี่ยวข้องกับการอัปโหลดไฟล์ เช่นจะเป็น 0 หากไม่มีข้อผิดพลาด

ตัวอย่าง โค้ด php เพื่อดูรายละเอียดของไฟล์ที่ถูกอัพโหลด

โค้ด: เลือกทั้งหมด

<?php
if($_FILES["photo"]["error"] > 0){
    echo "Error: " . $_FILES["photo"]["error"] . "<br>";
} else{
    echo "File Name: " . $_FILES["photo"]["name"] . "<br>";
    echo "File Type: " . $_FILES["photo"]["type"] . "<br>";
    echo "File Size: " . ($_FILES["photo"]["size"] / 1024) . " KB<br>";
    echo "Stored in: " . $_FILES["photo"]["tmp_name"];
}
?>
เมื่ออัปโหลดไฟล์สำเร็จไฟล์จะถูกเก็บไว้ในไดเรกทอรีชั่วคราวบนเซิร์ฟเวอร์โดยอัตโนมัติ ในการจัดเก็บไฟล์นี้ถาวรเราควรย้ายไฟล์จากไดเรกทอรีชั่วคราวไปยังตำแหน่งถาวรโดยใช้ ฟังก์ชั่น move_uploaded_file() ของ PHP

ช่องทางการศึกษาเพิ่มเติมข่าวที่น่าสนใจเกี่ยวกับ : PHP Programming
-สอนการใช้งาน PHP
-ถาม-ตอบ การใช้งาน php
-บทเรียน php พื้นฐาน

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 44