Thaimisc.com : เล่นกับไฟล์ (3)
ThaiMisc.Com : Free Webboard | Free GuestBook | Free Poll | Free Ecard Server | Free Java Chat Room | Advertising | Contact Us | Colocation | Web Hosting | เปิดร้านค้าฟรี


Category : Php Developer Print Article Only Print Aticle With Comment
เล่นกับไฟล์ (3)
เขียนโดย เดอะกาฝากไดอารี่ (ball@bbznet.com) , 09-09-2004
ห่างหายไปนานพอสมควรครับ แต่ผมก็กลับมาแล้วนะ ถือโอกาสฤกษ์ครบรอบ 5 ปี ของ Thaimisc มาอัพเดตตอนที่ 3 เลยแล้วกันครับ

fopen() & fclose()
2 ฟังก์ชันที่จะพูดถึงต่อไปนี้ เป็นเหมือนฟังก์ชันต่อเนื่องครับ คือต้องพูดถึง 2 ฟังก์ชันนี้พร้อมๆ กัน นั่นก็คือ fopen() และ fclose() นั่นเอง... ตัว f นั้น ย่อมาจากคำว่า file หรือ ไฟล์ครับ ส่วน open ก็แปลว่าเปิด และ close ก็แปลว่าปิด

ดังนั้นอ่านจากชื่อฟังก์ชันนี้แล้ว ก็น่าจะพอเดาได้ว่า 2 ฟังก์ชันนี้ก็มีเอาไว้เพื่อ เปิด และปิด การใช้ไฟล์นั่นเอง... แต่อย่าเพิ่งคิดว่ามันมีเอาไว้แค่นี้นะครับ ลูกเล่นจริงๆ ของฟังก์ชัน 2 ตัวนี้ จะอยู่ที่ fopen() เสียมากกว่า

เอาล่ะ มาดูกันดีกว่า ว่ารูปแบบการใช้งานของ fopen() และ fclose() นั้นเป็นยังไง... ตรงนี้ขอออกตัวก่อนว่า ผมจะขอพูดถึงแค่คร่าวๆ เอาที่พอใช้งานนะครับ จะไม่ลงลึกลับซับซ้อนอะไรมากมาย ใครที่สนใจศึกษาในเชิงลึก คงต้องรบกวนพึ่ง google หรือ PHP Manual เอาละครับ แหะ แหะ

fopen (ชื่อไฟล์, โหมดของไฟล์)

ค่าที่ return ได้จากฟังก์ชันนี้ คือ resource number ที่ได้จากการเปิดไฟล์นั้นๆ ครับ ซึ่งเราจะนำไปใช้อ้างอิงต่อ ในฟังก์ชันอื่นๆ เช่น fwrite() หรือ fclose() เป็นต้น ซึ่งจะกล่าวถึงในภายหลัง

fclose(resource number)

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

  • r หมายถึง เปิดไฟล์นั้นๆ ขึ้นมาเพื่ออ่านอย่างเดียว โดยกำหนด file pointer ให้อยู่ ณ จุดเริ่มต้นของไฟล์
  • r+ หมายถึง เปิดไฟล์นั้นๆ ขึ้นมาเพื่อทั้งอ่าน และเขียน โดยกำหนด file pointer ให้อยู่ ณ จุดเริ่มต้นของไฟล์
  • w หมายถึง เปิดไฟล์นั้นๆ ขึ้นมาเพื่อเขียนอย่างเดียว โดยกำหนด file pointer ให้อยู่ ณ จุดเริ่มต้นของไฟล์ และทำการลบข้อมูลของไฟล์ให้เหลือเป็นศูนย์... หากไฟล์นั้นไม่มีอยู่ก่อนหน้า ก็ให้พยายามสร้างไฟล์นั้นขึ้นมา
  • w+ หมายถึง เปิดไฟล์นั้นๆ ขึ้นมาเพื่อทั้งอ่าน และเขียน โดยกำหนด file pointer ให้อยู่ ณ จุดเริ่มต้นของไฟล์ และทำการลบข้อมูลของไฟล์ให้เหลือเป็นศูนย์... หากไฟล์นั้นไม่มีอยู่ก่อนหน้า ก็ให้พยายามสร้างไฟล์นั้นขึ้นมา
  • a หมายถึง เปิดไฟล์นั้นๆ ขึ้นมาเพื่ออ่านอย่างเดียว โดยกำหนดให้ file pointer ไปอยู่ ณ จุดสุดท้ายของไฟล์ หากไม่มีไฟล์นั้นอยู่ก่อนหน้า ก็ให้พยายามสร้างไฟล์นั้นขึ้นมา
  • a+ หมายถึง เปิดไฟล์นั้นๆ ขึ้นมาเพื่อทั้งอ่าน และเขียน โดยกำหนดให้ file pointer ไปอยู่ ณ จุดสุดท้ายของไฟล์ หากไม่มีไฟล์นั้นอยู่ก่อนหน้า ก็ให้พยายามสร้างไฟล์นั้นขึ้นมา

ถามว่า ฟังก์ชันนี้จะมีประโยชน์อะไร?!?
ก่อนที่ผมจะบอกอะไร เราลองมาดูกรณีศึกษา ในการใช้งานจริงดีกว่าครับ

ขอให้ลองใช้โปรแกรม notepad สร้างข้อความใดๆ (หรือไป copy ไฟล์ .txt มาจากที่ไหนก็ได้) แล้วเซฟลงในโฟลเดอร์ทดลองเขียน PHP ของเรา (ในกรณีของผมก็คือ C:/AppServ/www/test/) ในชื่อ sample.txt แล้วกัน จากนั้นก็เขียนโปรแกรมที่มีโค้ดตามนี้เลย

<?php

$filename = "sample.txt"; //กำหนดตัวแปรที่อ้างอิงถึงไฟล์
$handle = fopen ($filename, "r"); //ทำการเปิดไฟล์ แล้วเก็บค่า resource number เอาไว้
$contents = fread ($handle, filesize($filename)); //อ่านไฟล์ แล้วเก็บข้อมูลเอาไว้ในตัวแปร
echo $contents; //แสดงข้อมูลที่เก็บเอาไว้ออกมา
fclose ($handle); //ปิดไฟล์

?>

รูปด้านล่างนี่คือ ตัวอย่างข้อความที่อยู่ในไฟล์ sample.txt ของผมครับ

พอรันโค้ดที่ผมเขียนเสร็จ ผมก็จะได้ผลลัพธ์ดังรูปครับ

พูดง่ายๆ ก็คือ เอาข้อความในไฟล์นั้นๆ มาแสดงออกโดยตรงๆ นั่นเอง... ถามว่าลักษณะแบบนี้เราเอาไปทำอะไรได้?!? อืมมม... สมมติ ผมเขียนโค้ดโปรแกรมอะไรขึ้นมา เป็นไฟล์ html หรือ php หรืออะไรก็ได้ หากผมต้องการจะแสดงโค้ดนั้นๆ ให้ผู้ที่มาเยี่ยมชมเว็บได้อ่าน โดยไม่อยากเรื่องมาก ที่จะต้องมาสร้างไฟล์ html ขึ้นมา แล้วพิมพ์โค้ดลงไปอีกรอบ สิ่งที่ผมจะทำคือแบบนี้ครับ

<?php

$filename = "index.php";
$handle = fopen ($filename, "r");
$contents = fread ($handle, filesize($filename));
echo htmlspecialchars($contents);
fclose ($handle);

?>

ผลลัพธ์ที่ได้ ก็คือ

ข้อสังเกตนิดหนึ่ง อยู่ตรงที่เวลาผมจะแสดงข้อความโค้ดที่เขียน แทนที่ผมจะ echo $contents; ออกมาตรงๆ ผมจะต้องใส่ฟังก์ชัน htmlspecialchars() เพิ่มเข้าไปด้วย ทั้งนี้เพื่อให้ PHP แสดงตัว < และ > ด้วย < และ > แทน เพราะในภาษา HTML นั้นหากเอา < และ > ไปวางคร่อมข้อความใดๆ บราวเซอร์จะพาลนึกว่าเป็นแท็ก HTML ไปซะหมด แล้วจะพยายามประมวลผลออกมา ซึ่งหากประมวลผลไม่ได้ ก็จะไม่แสดงค่าครับ (ลองคลิก View -> Source ดู เราจะเห็น source code ของ HTML หน้านี้)

มาว่ากันต่อตอนหน้านะครับ

(ติดตามตอนต่อไป)

<- Back | Next ->

ThaiMisc.Com : Free Webboard | Free GuestBook | Free Poll | Free Ecard Server | Free Java Chat Room | Advertising | Contact Us
Copyright 1999-2006 Thailand Miscellaneous. Allrights reserved. webmaster@thaimisc.com