PHP: PHP Hypertext Preprocessor

Home

PHP Tutorial
Knowledge Developer Database Internet Resource
ไฟล์ และไดเรคทอรี
1. การเปิดและปิดไฟล
2. การเขียนลงไฟล์
3. การอ่านไฟล์
4. ฟังก์ชันไฟล์อื่นที่มีประโยชน์
5. การล็อกไฟล์
6. การเข้าถึงไดเรคทอรี
7. การทำงานกับแม่ข่าย
8. การเปลี่ยนทิศทางเพจ
 
PHP เบื้องต้น
1. เริ่มต้นด้วย PHP
2. ภาษา PHP
3. การทำงานไฟล์ และไดเรคทอรี
4. การทำงานกับ Array
5. การควบคุมข้อความ และนิพจน์ปกติี่
6. คำสั่งใช้ใหม่และฟังก์ชัน
7. Object Oriented Programming
 
PHP
PHP เบื้องต้น
การสร้างโปรแกรมประยุกต์เว็บ
PHP ระดับสูง
 
Internet
PHP
SSI
HTML
AJAX
 
PHP เบื้องต้น > การทำงานไฟล์ และไดเรคทอรี

การอ่านไฟล์

สคริปต์นี้ทำตามลำดับปกติ คือ เปิดไฟล์, อ่านไฟล์ และ ปิดไฟล์ โดยอ่านชื่อ order.txt ที่เก็บในไดเรคทอรี order ภายนอกโครงสร้างเอกสาร

<?php

@ $fp = fopen("$DOCUMENT_ROOT/../../orders/orders.txt", "r");

if (!$fp)
{

echo "<p><strong>ไม่มีใบสั่งซื้อค้าง"
."พยายามอีกครั้งภายหลัง</strong></p></body></html>";
exit;

}

while (!feof($fp))
{

$order= fgets($fp, 100);
echo $order."<br/>";

}

fclose($fp);

?>

ต่อไปดูรายละเอียดฟังก์ชันในสคริปต์

เปิดไฟล์สำหรับการอ่าน

การเปิดไฟล์ใช้ fopen ในกรณีนี้ เปิดไฟล์สำหรับการอ่านอย่างเดียว ดังนั้นใช้โหมดไฟล์ “a”
$fp = fopen ("$DOCUMENT_ROOT/../../orders/orders.txt", "a");

รับรู้การสิ้นสุด

ตัวอย่างนี้ ใช้ while loop อ่านไฟล์จนกระทั่งสิ้นสุดไฟล์ การทดสอบไฟล์สิ้นสุดใน ใช้ฟังก์ชัน feof()
while (!feof ($fp))

ฟังก์ชัน feof ใช้พอยเตอร์ไฟล์เพียงพารามิเตอร์เดียว โดยจะส่งออก TRUE ถ้าพอยเตอร์ไฟล์อยู่ที่ จุดสิ้นสุดไฟล์ feof ย่อมาจาก File End of File

อ่าน 1 บรรทัดต่อครั้ง

ในตัวอย่างนี้ ใช้ฟังก์ชัน fgets() ในการอ่านจากไฟล์
$order = fgets($fp, 100);

ฟังก์ชันนี้ใช้อ่าน 1 บรรทัดต่อครั้งจากไฟล์ ในกรณีนี้จะอ่านจนกระทั่งพบตัวอักษรบรรทัดใหม่ (\n) พบกับ EOF หรืออ่าน 99 ไบต์จากไฟล์ ความยาวการอ่านมากที่สุดคือ ความยาวกำหนดลบด้วย 1 ไบต์

fgetss เป็นอนุพันธ์ที่น่าสนใจของ fgets และมีไวยากรณ์ดังนี้
string fgetss (int fp, int length, string [allawable_tags]);

ฟังก์ชันที่คล้ายกับ fgets() ยกเว้น การตัด tag ของ PHP และ HTML ที่พบในข้อความ ถ้าต้องการเก็บ tag เฉพาะ สามารถระบุใน allawable_tags

fgetcsv () เป็นอีกอนุพันธ์ของ fgets และมีไวยากรณ์ดังนี้
array fgetcsv (int fp, int length, string [delimiter];

ฟังก์ชันนี้ใช้กับการแบ่งบรรทัดของไฟล์ด้วยตัวแบ่ง เช่น ตัวอักษร tab หรือจุลภาค
พารามิเตอร์ length ควรยาวกว่าความยาวตัวอักษรของบรรทัดยาวที่สุดในไฟล์ที่กำลังอ่าน

อ่านทั้งไฟล์

แทนที่จะอ่านไฟล์ที่ละบรรทัด สามารถอ่านไฟล์ทั้งหมดใน 1 ครั้ง มีวิธีการอ่าน 3 วิธี

วิธีที่ 1 ใช้ readfile ()  สามารถแทนที่สคริปต์ข้างบนด้วยคำสั่ง 1 บรรทัด
readfile ("$DOCUMENT_ROOT/../../orders/orders.txt");

การเรียนฟังก์ชัน readfile() เปิดไฟล์ จะส่งข้อมูลตามผลลัพธ์มาตรฐาน browser จากนั้นปิดไฟล์ ไวยากรณ์ของ readfile() คือ
int readfile (string filename, int  [use_include_path]);

พารามิเตอร์ที่ 2 เปิดตัวเลือกระบุให้ PHP มองหาไฟล์ใน include_path และทำงานเหมือนกับ fopen () ฟังก์ชันที่ส่งออกจำนวนไบต์ที่อ่านจากไฟล์

วิธีที่ 2 ใช้ fpassthru วิธีนี้ต้องเปิดไฟล์ด้วยการใช้ fopen() ก่อน จากนั้นส่งผ่านพอยเตอร์ไฟล์เป็นอากิวเมนต์ไปยัง fpassthru() ซึ่งจะเทกองข้อมูลจากตำแหน่งพอยเตอร์ตามผลลัพธ์มาตรฐาน ไฟล์ได้รับการปิดเมื่อเสร็จสิ้น

สคริปต์ข้างต้นสามารถแทนที่ด้วย fpassthru ได้ดังนี้
$fp = fopen ("$DOCUMENT_ROOT/../../orders/orders.txt", "a");
fpassthru ($fp);

ฟังก์ชัน fpassthru ()  ส่งออก TRUE ถ้าอ่านสำเร็จ และ FALSE ถ้าไม่สำเร็จ

วิธีที่ 3 เป็นการอ่านทั้งไฟล์ด้วยฟังก์ชัน file() ฟังก์ชันนี้เหมือนกับ readfile() ยกเว้น ส่งออกเป็น array แทนที่ส่งข้อมูลตามผลลัพธ์มาตรฐาน การเรียกเป็นการอ้างอิง
$filearray = file ($fp);

คำสั่งที่อ่านทั้งไฟล์เข้าสู่ array ชื่อ $filrarray แต่ละบรรทัดของไฟล์เก็บในแต่ละหน่วยข้อมูลของ array

การอ่านตัวอักษร

อีกวิธีในการประมวลผลคือ การอ่านที่ละตัวอักษรจากไฟล์ โดยการใช้ฟังก์ชัน fgetc() ฟังก์ชันที่ใช้พอยเตอร์ไฟล์เพียงพารามิเตอร์เดียว และส่งออกตัวอักษรต่อไปในไฟล์ while loop ในตัวอย่างสามารถใช้ fgetc() ได้ดังนี้

while (!feof($fp))
{

$char= fgetc($fp, 100);
if (!feof($fp))
echo ($char=="\n" ? "<br/>: $char);

}

คำสั่งที่อ่าน 1 ตัวอักษรจากไฟล์ต่อครั้งด้วย fgetc() และเก็บใน $char จนกระทั่งสิ้นสุดไฟล์ จากนั้นทำการประมวลผลเล็กน้อยเพื่อแทนที่ตัวอักษร สิ้นสุดแถวด้วยตัวแบ่งแถว HTML ที่เป็นการจัดรูปแบบ เนื่องจาก browser ไม่จัดบรรทัดใหม่ใน HTML เป็นบรรทัดใหม่ ถ้าปราศจากคำสั่งนี้ ไฟล์ทั้งหมดจะพิมพ์ออกมาเป็น 1 บรรทัด

การอ่านด้วยความยาวตามต้องการ

วิธีสุดท้ายในการอ่านจากไฟล์คือการใช้ฟังก์ชัน fread เพื่ออ่านด้วยจำนวนไบต์ตามความต้องการ ฟังก์ชันนี้มีไวยากรณ์ดังนี้
string fread (int fp, int length);

วิธีที่ทำการอ่านตาม length ไบต์ หรือ สิ้นสุดไฟล์ แล้วแต่ว่ากรณีใดมาถึงก่อน


  

สงวนลิขสิทธิ์ (C) widebase / Julaphak