การจัดการไฟล์: 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 ไฟล์ ซึ่งเป็นวิธีการนำโค้ดจากไฟล์อื่นมาใช้ในไฟล์ปัจจุบัน