ใน Module นี้ เราจะมาเรียนรู้เกี่ยวกับการทำงานกับไฟล์ (File Handling) ใน PHP ซึ่งเป็นสิ่งจำเป็นสำหรับการอ่าน เขียน และจัดการไฟล์บน Server ไม่ว่าจะเป็นไฟล์ข้อความ รูปภาพ หรือไฟล์ประเภทอื่นๆ
การเปิดและปิดไฟล์ (Opening and Closing Files)
ในการทำงานกับไฟล์ PHP มีฟังก์ชันหลักๆ ที่ใช้คือ fopen() สำหรับเปิดไฟล์ และ fclose() สำหรับปิดไฟล์
fopen()
ฟังก์ชัน fopen() ใช้เพื่อเปิดไฟล์หรือ URL โดยมีรูปแบบการใช้งานดังนี้:
resource fopen ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] )$filename: ชื่อไฟล์หรือ URL ที่ต้องการเปิด$mode: โหมดการเปิดไฟล์ ซึ่งกำหนดวิธีการทำงานกับไฟล์ (เช่น อ่าน, เขียน, เพิ่ม)$use_include_path(optional): กำหนดว่าจะค้นหาไฟล์ใน include path หรือไม่$context(optional): ชุดของตัวเลือกสำหรับ Stream
โหมดการเปิดไฟล์ที่สำคัญ:
| โหมด | คำอธิบาย | ตำแหน่ง Pointer | สร้างถ้าไม่มี |
|---|---|---|---|
'r' | เปิดสำหรับอ่านอย่างเดียว | เริ่มต้นที่ต้นไฟล์ | No |
'w' | เปิดสำหรับเขียนอย่างเดียว ลบเนื้อหาเดิม หรือสร้างไฟล์ใหม่ | เริ่มต้นที่ต้นไฟล์ | Yes |
'a' | เปิดสำหรับเขียนอย่างเดียว เพิ่มเนื้อหาต่อท้ายไฟล์ หรือสร้างไฟล์ใหม่ | เริ่มต้นที่ท้ายไฟล์ | Yes |
'x' | สร้างและเปิดสำหรับเขียนอย่างเดียว หากไฟล์มีอยู่แล้ว fopen() จะคืนค่า false | เริ่มต้นที่ต้นไฟล์ | Yes |
'r+' | เปิดสำหรับอ่านและเขียน เริ่มต้นที่ต้นไฟล์ | เริ่มต้นที่ต้นไฟล์ | No |
'w+' | เปิดสำหรับอ่านและเขียน ลบเนื้อหาเดิม หรือสร้างไฟล์ใหม่ | เริ่มต้นที่ต้นไฟล์ | Yes |
'a+' | เปิดสำหรับอ่านและเขียน เพิ่มเนื้อหาต่อท้ายไฟล์ หรือสร้างไฟล์ใหม่ | เริ่มต้นที่ท้ายไฟล์ | Yes |
'x+' | สร้างและเปิดสำหรับอ่านและเขียน หากไฟล์มีอยู่แล้ว fopen() จะคืนค่า false | เริ่มต้นที่ต้นไฟล์ | Yes |
ฟังก์ชัน fopen() จะคืนค่าเป็น File Handle (Resource) หากเปิดไฟล์สำเร็จ หรือ false หากเกิดข้อผิดพลาด
<?php
$file = fopen("example.txt", "r");
if ($file) {
echo "เปิดไฟล์สำเร็จ";
} else {
echo "ไม่สามารถเปิดไฟล์ได้";
}
?>fclose()
ฟังก์ชัน fclose() ใช้เพื่อปิดไฟล์ที่เปิดด้วย fopen()
bool fclose ( resource $handle )$handle: File Handle ที่ได้จากการเปิดไฟล์ด้วยfopen()
การปิดไฟล์เป็นการปลดปล่อยทรัพยากรที่ใช้โดยไฟล์ และควรทำทุกครั้งหลังจากการทำงานกับไฟล์เสร็จสิ้น
<?php
$file = fopen("example.txt", "r");
// ... ทำงานกับไฟล์ ...
fclose($file);
?>การอ่านไฟล์ (Reading Files)
PHP มีหลายฟังก์ชันสำหรับการอ่านเนื้อหาจากไฟล์:
fread()
อ่านจำนวนไบต์ที่ระบุจาก File Handle
string fread ( resource $handle , int $length )$handle: File Handle ที่ได้จากการเปิดไฟล์$length: จำนวนไบต์ที่ต้องการอ่าน
<?php
$file = fopen("example.txt", "r");
if ($file) {
$content = fread($file, filesize("example.txt"));
fclose($file);
echo $content;
}
?>fgets()
อ่านหนึ่งบรรทัดจาก File Handle
string fgets ( resource $handle [, int $length ] )$handle: File Handle ที่ได้จากการเปิดไฟล์$length(optional): จำนวนไบต์สูงสุดที่จะอ่าน (รวมถึงบรรทัดใหม่) หากไม่ระบุจะอ่านจนจบบรรทัด
<?php
$file = fopen("example.txt", "r");
if ($file) {
while (($line = fgets($file)) !== false) {
echo $line . "<br>";
}
fclose($file);
}
?>file_get_contents()
อ่านเนื้อหาทั้งหมดของไฟล์เป็น String
string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = 0 [, int $maxlen ]]]] )<?php
$content = file_get_contents("example.txt");
echo $content;
?>การเขียนไฟล์ (Writing to Files)
PHP มีฟังก์ชันสำหรับการเขียนข้อมูลลงในไฟล์:
fwrite()
เขียน String ลงใน File Handle
int fwrite ( resource $handle , string $string [, int $length ] )$handle: File Handle ที่ได้จากการเปิดไฟล์ในโหมดเขียน (เช่น'w','a')$string: String ที่ต้องการเขียน$length(optional): จำนวนไบต์สูงสุดที่จะเขียน
<?php
$file = fopen("newfile.txt", "w");
if ($file) {
fwrite($file, "Hello World.\n");
fwrite($file, "This is some text.");
fclose($file);
echo "เขียนไฟล์สำเร็จ";
}
?>file_put_contents()
เขียน String ลงในไฟล์ (จะสร้างไฟล์ใหม่หรือลบเนื้อหาเดิม)
int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )<?php
$data = "Some information\nAnother line.";
file_put_contents("anotherfile.txt", $data);
echo "เขียนไฟล์ด้วย file_put_contents สำเร็จ";
?>การจัดการไฟล์และไดเรกทอรีอื่นๆ
PHP ยังมีฟังก์ชันอื่นๆ สำหรับการจัดการไฟล์และไดเรกทอรี เช่น:
file_exists(): ตรวจสอบว่าไฟล์หรือไดเรกทอรีมีอยู่หรือไม่is_file(): ตรวจสอบว่าเป็นไฟล์หรือไม่is_dir(): ตรวจสอบว่าเป็นไดเรกทอรีหรือไม่rename(): เปลี่ยนชื่อไฟล์หรือไดเรกทอรีunlink(): ลบไฟล์mkdir(): สร้างไดเรกทอรีrmdir(): ลบไดเรกทอรีscandir(): แสดงรายการไฟล์และไดเรกทอรีภายในไดเรกทอรีที่ระบุ
<?php
if (file_exists("example.txt")) {
echo "ไฟล์ example.txt มีอยู่<br>";
}
if (is_file("example.txt")) {
echo "example.txt เป็นไฟล์<br>";
}
// ... ฟังก์ชันอื่นๆ ...
?>การอัปโหลดไฟล์ (File Uploading)
PHP สามารถจัดการการอัปโหลดไฟล์จากผู้ใช้ผ่าน Form ได้ โดยต้องตั้งค่า enctype="multipart/form-data" ในแท็ก <form> และใช้ Superglobal Array $_FILES ในการรับข้อมูลไฟล์ที่อัปโหลด
<!-- HTML Form -->
<form action="upload.php" method="post" enctype="multipart/form-data">
Select file to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload File" name="submit">
</form><?php
if (isset($_POST["submit"])) {
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "The file ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>การอัปโหลดไฟล์เกี่ยวข้องกับเรื่องความปลอดภัยที่ต้องให้ความสำคัญ เช่น การตรวจสอบชนิดไฟล์ ขนาดไฟล์ และการป้องกันการโจมตีต่างๆ
กิจกรรมใน Module 9
- สร้างไฟล์ข้อความ (
.txt) และใช้ PHP ในการเปิด อ่าน และแสดงเนื้อหา - เขียนโปรแกรม PHP ที่สร้างไฟล์ใหม่และเขียนข้อความลงในไฟล์นั้น
- ใช้
file_get_contents()และfile_put_contents()ในการอ่านและเขียนไฟล์ - ตรวจสอบว่าไฟล์หรือไดเรกทอรีที่กำหนดมีอยู่หรือไม่
- (Optional) สร้าง Form สำหรับอัปโหลดไฟล์ และเขียนโค้ด PHP เพื่อรับและบันทึกไฟล์ที่อัปโหลด
ใน Module ถัดไป เราจะมาเรียนรู้เกี่ยวกับการทำงานกับฐานข้อมูล MySQL เบื้องต้น ซึ่งเป็นส่วนสำคัญในการสร้างเว็บไซต์แบบไดนามิกที่เก็บข้อมูลครับ!