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 เบื้องต้น > การทำงานไฟล์ และไดเรคทอรี

การเปิดและปิดไฟล์

การประมวลผลไฟล์เริ่มต้นและสิ้นสุดด้วยการเปิดไฟล์และปิดไฟล์

การเปิดไฟล์

การเปิดไฟล์ใน PHP ใช้ฟังก์ชัน fopen ไฟล์ที่เปิดต้องระบุลักษณะการเปิดหรือโหมดไฟล์ (file mode)

โหมดไฟล์

ระบบปฏิบัติการบนแม่ข่าย จำเป็นต้องทราบถึงการทำงานกับไฟล์ที่มีการเปิด โดยต้องทราบว่าถ้าไฟล์ได้รับการเปิดโดยอีกสคริปต์ ขณะที่มีการเปิดและทำงาน ถ้าผู้เปิด (เจ้าของสคริปต์) มีสิทธิในการทำงานนั้น

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

ทางเลือกในการทำงานเมื่อเปิดไฟล์มี 3 ทางเลือก

  1. เปิดไฟล์สำหรับอ่านอย่างเดียว เขียนอย่างเดียว หรือทั้งการอ่านและการเขียน
  2. ถ้าเขียนไฟล์ อาจจะมีการเขียนทับข้อมูลเดิมของไฟล์ หรือเพิ่มข้อมูลต่อท้ายไฟล์
  3. ถ้ากำลังพยายามเขียนไฟล์บนระบบที่ต่างกันระหว่างไฟล์ไบนารีกับไฟล์ข้อความ ควรระบุ

ฟังก์ชัน fopen() สนับสนุนตัวเลือกทั้ง 3 แบบ

fopen

fopen() มีไวยากรณ์เป็น
$handle = fopen (filename, mode, [include_path]);

filename เป็นข้อความระบุพาร์ทของไฟล์ สามารถเป็นพาร์ทสมบูรณ์
'/home/book/orders/orders.txt'

หรือ พาร์ทสัมพัทธ์กับไดเรคทอรีปัจจุบัน
'../orders/orders.txt'

ตัวอย่างชุดนี้เรียกใบสั่งซื้อเป็น
$fp = fopen ("$DOCUMENT_ROOT/../../orders/orders.txt", "w");

ถ้าไม่ระบุพาร์ท ไฟล์จะได้รับการสร้างหรือค้นหาในไดเรคทอรีเดียวกับสคริปต์

พารามิเตอร์ที่ 2 ของ fopen () คือโหมดไฟล์ และต้องเป็นข้อความ การระบุนี้บอกถึงความต้องการทำงานกับไฟล์ ในกรณีที่ส่งผ่าน "w" ไปยัง fopen () หมายความว่า เปิดไฟล์สำหรับการเขียนการสรุปโหมดไฟล์ แสดงในตาราง 1.3.1

ตาราง 1.3.1 สรุปโหมดไฟล์สำหรับ fopen

โหมด ความหมาย

r

โหมดอ่าน – เปิดไฟล์สำหรับการอ่าน เริ่มทำงานจากตอนต้นไฟล์

r+

โหมดอ่าน – เปิดไฟล์สำหรับการอ่านและเขียน เริ่มทำงานจากตอนต้นไฟล์

w

โหมดเขียน – เปิดไฟล์สำหรับการเขียน เริ่มทำงานจากตอนต้นไฟล์ ถ้าไฟล์มีอยู่แล้วจะลบข้อมูลที่มีอยู่ ถ้าไม่มีไฟล์จะสร้างขึ้นใหม่

w+

โหมดเขียน – เปิดไฟล์สำหรับการเขียนและอ่าน เริ่มทำงานจากตอนต้นไฟล์ ถ้าไฟล์มีอยู่แล้วจะลบข้อมูลที่มีอยู่ ถ้าไม่มีไฟล์จะสร้างขึ้นใหม่

a

โหมดเพิ่ม – เปิดไฟล์สำหรับการเพิ่ม (เขียน) เริ่มทำงานจากจุดสิ้นสุดของข้อมูลที่มีอยู่ ถ้าไม่มีไฟล์จะได้รับการสร้างขึ้นใหม่

a+

โหมดเพิ่ม – เปิดไฟล์สำหรับการเพิ่ม (เขียน) และอ่าน เริ่มทำงานจากจุดสิ้นสุดของข้อมูลที่มีอยู่ ถ้าไม่มีไฟล์จะได้รับการสร้างขึ้นใหม่

b

โหมดไบนารี – ใช้ร่วมกับโหมดอื่น โดยอาจจะจำเป็น ถ้าระบบไฟล์แยกระหว่างไฟล์ไบนารีและไฟล์ข้อความ ระบบ Windows มีการแยก แต่ระบบ Unix ไม่มีการแยก

ตามตัวอย่างมีการโหมด “w” ซึ่งจะยอมให้มีเพียง 1 ใบสั่งซื้อในไฟล์ แต่ละครั้งเมื่อมีใบสั่งซื้อใหม่จะ เขียนทับใบสั่งซื้อเก่า ดูเหมือนว่าจะไม่มีเหตุผล ดังนั้นควรระบุเป็นโหมดเพิ่ม
$fp = fopen ("../orders /orders.txt.", "a");

พารามิเตอร์ที่ 3 ของ fopen() เป็นตัวเลือก สามารถใช้พารามิเตอร์นี้ ถ้าต้องการค้นหา include_path  ของไฟล์ ถ้าต้องการทำให้ตั้งค่าพารามิเตอร์เป็น 1 ถ้าบอก PHP ให้ค้นหา include_path จะไม่จำเป็นให้ชื่อไดเรคทอรีหรือพาร์ท
$fp = fopen ("orders.txt ", "a", 1);

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

เปิดไฟล์สำหรับ FTP หรือ HTTP

นอกจากการเปิดไฟล์สำหรับการอ่านและเขียนแล้ว สามารถเปิดไฟล์ผ่าน FTP และ HTTP ด้วยฟังก์ชัน fopen()
ถ้าชื่อไฟล์เริ่มต้นด้วย ftp:// การเชื่อมต่อ FTP ในโหมด Passive จะได้รับการเปิดด้วยแม่ข่ายตามการระบุและพอยเตอร์เพื่อเริ่มต้นไฟล์ที่ส่งออก

ถ้าชื่อไฟล์เริ่มต้นด้วย http:// การเชื่อมต่อ HTTP จะได้รับการเปิดด้วยแม่ข่ายตามการระบุและพอยเตอร์ที่ตอบสนองการส่งออก เมื่อใช้โหมด HTTP ต้องมี slash ต่อท้ายบนชื่อไดเรคทอรีดังนี้
http: //www.server.com/

ไม่ใช่
http://www.server.com

เมื่อระบุตามรูปแบบหลัง (ไม่มี slash) แม่ข่ายเว็บ จะใช้ HTTP redirect เพื่อส่งไปยัง address แรก (มี slash) เหมือนความพยายามของ browser

ฟังก์ชัน fopen() ไม่สนับสนุน HTTPredirect ดังนั้นต้องระบุ URL ที่อ้างถึงไดเรคทอรีกับ slash ท้าย
ชื่อโดเมนใน URL ไม่มีผลจากตัวพิมพ์ แต่พาร์ทและชื่อไฟล์มีผล

ปัญหาการเปิดไฟล

ถ้าการเรียก fopen() ล้มเหลว ฟังก์ชันจะส่งออก FALSE ทำให้สามารถทำงานกับความผิดพลาด แบบผู้ใช้คุ้นเคย (user-friendly) โดยการปิดข่าวสารผิดพลาดของ PHP และกำหนดคำอธิบายที่สื่อความหมายเอง

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

if (!$fp)
{

echo "<p><strong> ใบสั่งซื้อของท่านไม่สามารถประมวลในขณะนี้  "
."โปรดทำคำสั่งซื้อใหม่ภายหลัง</strong></p></body></html>";
exit;

}

สัญลักษณ์ @ หน้าการเรียก fopen() บอก PHP ให้ปิดผลลัพธ์ความผิดพลาดจากฟังก์ชัน

หมายเหตุ   สัญลักษณ์ @ ต้องอยู่ที่จุดเริ่มต้นของบรรทัดที่อาจจะเกิดความผิดพลาด

การปิดไฟล์

เมื่อเสร็จสิ้นการใช้ไฟล์ ควรปิดไฟล์ด้วยฟังก์ชัน  fclose ()
fclose ($fp);

ฟังก์ชันนี้ส่งออก TRUE ถ้าปิดสำเร็จ หรือ FALSE ถ้าปิดไม่ได้ ความผิดพลาดโดยทั่วไปเกิดขึ้นน้อยกว่าการเปิดไฟล์ ดังนั้นในกรณีที่จึงเลือกไม่ทดสอบ


  

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