Skip to main content

เนื้อหาภาษาไทย / Thai content

System guide Content reviewed

การจัดการไฟล์: is_file, is_dir, file_exists

บทความนี้อธิบายถึงการจัดการไฟล์เบื้องต้นใน PHP โดยเน้นที่การตรวจสอบสถานะของไฟล์และไดเรกทอรีด้วยฟังก์ชัน `file_exists()`, `is_file()` และ `is_dir()` เพื่อป้องกัน...

การจัดการไฟล์: is_file, is_dir, file_exists

ในบทเรียนก่อนหน้า เราได้เรียนรู้การอ่านและเขียนไฟล์ด้วยฟังก์ชัน file_get_contents() และ file_put_contents() ซึ่งเป็นวิธีที่ง่ายและสะดวกในการจัดการไฟล์ขนาดเล็กถึงปานกลาง แต่ก่อนที่เราจะอ่านหรือเขียนไฟล์ใดๆ การตรวจสอบว่าไฟล์นั้นมีอยู่จริงหรือไม่ หรือเป็นไฟล์ประเภทใด (ไฟล์ธรรมดา หรือ directory) เป็นสิ่งสำคัญมาก เพื่อป้องกันข้อผิดพลาดที่อาจเกิดขึ้น ในบทนี้ เราจะมาเรียนรู้ฟังก์ชันที่ใช้ในการตรวจสอบไฟล์และ directory ใน PHP ได้แก่ file_exists(), is_file(), และ is_dir()

การตรวจสอบการมีอยู่ของไฟล์ด้วย file_exists()

ฟังก์ชัน file_exists() เป็นฟังก์ชันที่ง่ายที่สุดในการตรวจสอบว่าไฟล์หรือ directory ที่ระบุมีอยู่จริงหรือไม่ ฟังก์ชันนี้จะคืนค่า true ถ้าไฟล์หรือ directory นั้นมีอยู่ และคืนค่า false ถ้าไม่มี

<?php
$filename = 'my_file.txt';

if (file_exists($filename)) {
    echo "ไฟล์ {$filename} มีอยู่จริง";
} else {
    echo "ไฟล์ {$filename} ไม่มีอยู่";
}
?>

ตัวอย่างการใช้งาน:

สมมติว่าเราต้องการตรวจสอบว่าไฟล์ config.php มีอยู่หรือไม่ ก่อนที่จะทำการ include ไฟล์นั้น:

<?php
$configFile = 'config.php';

if (file_exists($configFile)) {
    include $configFile;
    echo "ไฟล์ config.php ถูก include เรียบร้อยแล้ว";
} else {
    echo "ไม่พบไฟล์ config.php! โปรดตรวจสอบการติดตั้ง";
}
?>

ข้อควรระวัง:

  • file_exists() จะคืนค่า true ทั้งสำหรับไฟล์และ directory
  • ระวังเรื่อง Permission: หาก PHP process ไม่มีสิทธิ์ในการเข้าถึงไฟล์หรือ directory นั้น file_exists() อาจคืนค่า false แม้ว่าไฟล์นั้นจะมีอยู่จริง

การตรวจสอบว่าเป็นไฟล์หรือไม่ด้วย is_file()

ฟังก์ชัน is_file() ใช้เพื่อตรวจสอบว่า path ที่ระบุเป็นไฟล์ธรรมดาหรือไม่ ฟังก์ชันนี้จะคืนค่า true ถ้า path นั้นเป็นไฟล์ และคืนค่า false ถ้าไม่ใช่ (เช่น เป็น directory, link, หรือไม่มีอยู่)

<?php
$filename = 'my_file.txt';

if (is_file($filename)) {
    echo "{$filename} เป็นไฟล์";
} else {
    echo "{$filename} ไม่ใช่ไฟล์";
}
?>

ตัวอย่างการใช้งาน:

สมมติว่าเราต้องการอ่านข้อมูลจากไฟล์เท่านั้น และไม่ต้องการอ่านข้อมูลจาก directory:

<?php
$path = 'data'; // อาจเป็น directory หรือ ไฟล์

if (is_file($path)) {
    $content = file_get_contents($path);
    echo "เนื้อหาของไฟล์ {$path}: " . htmlspecialchars($content); // htmlspecialchars ป้องกัน XSS
} else {
    echo "{$path} ไม่ใช่ไฟล์ ไม่สามารถอ่านได้";
}
?>

ข้อควรระวัง:

  • is_file() จะคืนค่า false ถ้าไฟล์นั้นไม่มีอยู่
  • is_file() จะคืนค่า false ถ้า path นั้นเป็น directory
  • Permission ก็มีผลเช่นเดียวกับ file_exists()

การตรวจสอบว่าเป็น Directory หรือไม่ด้วย is_dir()

ฟังก์ชัน is_dir() ใช้เพื่อตรวจสอบว่า path ที่ระบุเป็น directory หรือไม่ ฟังก์ชันนี้จะคืนค่า true ถ้า path นั้นเป็น directory และคืนค่า false ถ้าไม่ใช่ (เช่น เป็นไฟล์, link, หรือไม่มีอยู่)

<?php
$dirname = 'my_directory';

if (is_dir($dirname)) {
    echo "{$dirname} เป็น directory";
} else {
    echo "{$dirname} ไม่ใช่ directory";
}
?>

ตัวอย่างการใช้งาน:

สมมติว่าเราต้องการสร้าง directory ใหม่ ถ้า directory นั้นยังไม่มีอยู่:

<?php
$directory = 'new_directory';

if (!is_dir($directory)) {
    if (mkdir($directory)) {
        echo "สร้าง directory {$directory} สำเร็จ";
    } else {
        echo "สร้าง directory {$directory} ไม่สำเร็จ";
    }
} else {
    echo "directory {$directory} มีอยู่แล้ว";
}
?>

ข้อควรระวัง:

  • is_dir() จะคืนค่า false ถ้า directory นั้นไม่มีอยู่
  • is_dir() จะคืนค่า false ถ้า path นั้นเป็นไฟล์
  • Permission ก็มีผลเช่นเดียวกับ file_exists() และ is_file()

สรุปและการใช้งานจริง

ฟังก์ชัน file_exists(), is_file(), และ is_dir() เป็นเครื่องมือพื้นฐานที่สำคัญในการจัดการไฟล์และ directory ใน PHP การใช้งานฟังก์ชันเหล่านี้อย่างถูกต้อง จะช่วยให้เราเขียนโปรแกรมที่ปลอดภัยและมีประสิทธิภาพมากขึ้น

ตัวอย่างการใช้งานจริง: การสร้างระบบจัดการไฟล์อย่างง่าย

สมมติว่าเราต้องการสร้างสคริปต์ที่แสดงรายการไฟล์และ directory ใน directory ที่กำหนด:

<?php
$directory = './'; // Directory ปัจจุบัน

if (is_dir($directory)) {
    echo "<ul>";
    if ($handle = opendir($directory)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                echo "<li>";
                if (is_dir($directory . '/' . $entry)) {
                    echo "[DIR] " . htmlspecialchars($entry);
                } elseif (is_file($directory . '/' . $entry)) {
                    echo "[FILE] " . htmlspecialchars($entry);
                } else {
                    echo "[UNKNOWN] " . htmlspecialchars($entry);
                }
                echo "</li>";
            }
        }
        closedir($handle);
    }
    echo "</ul>";
} else {
    echo "{$directory} ไม่ใช่ directory";
}
?>

โค้ดนี้จะทำการตรวจสอบก่อนว่า directory ที่ระบุมีอยู่จริงหรือไม่ จากนั้นจะทำการเปิด directory และอ่านรายการไฟล์และ directory ภายใน directory นั้น โดยใช้ฟังก์ชัน is_dir() และ is_file() เพื่อแยกแยะประเภทของแต่ละ entry และแสดงผลลัพธ์ในรูปแบบ unordered list

ข้อผิดพลาดที่พบบ่อย:

  • Permission denied: PHP process ไม่มีสิทธิ์ในการเข้าถึงไฟล์หรือ directory นั้น ทำให้ฟังก์ชันคืนค่า false หรือเกิดข้อผิดพลาด
  • Path ไม่ถูกต้อง: Path ที่ระบุไม่ถูกต้อง หรือไม่มีอยู่จริง
  • การใช้ file_exists() แทน is_file() หรือ is_dir(): หากต้องการตรวจสอบว่าเป็นไฟล์หรือ directory ควรใช้ฟังก์ชันที่เจาะจงมากกว่า

ในบทเรียนถัดไป เราจะมาเรียนรู้เกี่ยวกับการ include และ require ไฟล์ ซึ่งเป็นวิธีการนำโค้ดจากไฟล์อื่นมาใช้ในไฟล์ปัจจุบัน

Office.in.th Custom Service

Want to build or adapt a system from this structure?

Office.in.th designs and develops enterprise web applications, API integrations, and public- and private-sector management systems, with long-term support.

See our software development service