ปวดหัวไปหลายวันทีเดียวสำหรับการเปิดปิดไฟล์เพื่ออ่านและเขียนโดยใช้โปรแกรมภาษา PHP สำหรับโปรแกรมนี้ที่ผู้เขียนพัฒนาสำหรับอุปกรณ์ Thai GPSTRACKER รุ่นหนึ่งที่หากมีการรูดบัตรผ่านเครื่องอ่านใบอนุญาตขับรถ จะต้องนำข้อมูลรหัสบัตรไปเก็บที่ไฟล์ แต่ถ้านำบัตรใบนั้นไปรูดซ้ำให้ถือว่าเป็นการล็อกเอาท์ ส่วนหากรูดบัตรใหม่ถือว่าเป็นการเปลี่ยนบัตรให้ลบข้อมูลเดิมออกและนำข้อมูลบัตรใบใหม่จัดเก็บไว้แทน
โดยผู้เขียนสรุปการทำงานดังต่อไปนี้
1. หากไฟล์ยังไม่ถูกสร้างขึ้นมาให้ทำการเขียนใหม่ได้เลย
2. หากไฟล์มีข้อมูลอยู่แล้ว ให้อ่านข้อมูลเก่าขึ้นมาก่อน จากนั้นทำการเปรียบเทียบกับข้อมูลใหม่
2.1 หากข้อมูลใหม่กับข้อมูลเก่าเหมือนกันให้ทำการลบไฟล์เก่าออก
2.2 หากข้อมูลใหม่ต่างกันกับข้อมูลเก่าให้เขียนไฟล์ด้วยข้อมูลใหม่
ฟังดูจากโจทย์แล้วไม่น่ายากแต่พอได้ทำงานจริงพบว่า รันไทม์เออเรอ(runtime error) ตลอดเวลาหากเราไม่ทำการตรวจสอบข้อมูลดูก่อนว่ามีไฟล์ที่ต้องการเปิดอยู่จริง หรือไฟล์ที่มีอยู่กับไม่มีข้อมูลอยู่ในนั้นเลย ทำให้ฟังก์ชั่นการอ่านไฟล์ขึ้นมาเกิดข้อผิดพลาดได้
การดำเนินการข้อที่ 1 ตรวจสอบไฟล์เก่าดูก่อน หากยังไม่มีให้สร้างหรือเขียนไฟล์ใหม่
if ( file_exists("$imei")===false ) {
$fh = fopen("$imei",'w+') or die('Cannot open file:');
fwrite($fh,$newdriverid);
fclose($fh);
}
การดำเนินการข้อที่ 2 หากไฟล์เก่ามีอยู่แล้ว ให้อ่านข้อมูลของไฟล์เก่า
$fh = fopen("$imei",'r+') or die('Cannot open file:');
$p_driverid = stream_get_contents($fh);
fclose($fh);
การดำเนินการข้อที่ 2.1 ให้ทำการเปรียบเทียบข้อมูลเก่ากับข้อมูลใหม่ หากเหมือนกันให้ลบไฟล์เก่าออก
if (strcmp($newdriverid,$p_driverid)==0) {
unlink("$imei");
}
การดำเนินการข้อที่ 2.2 ส่วนหากข้อมูลต่างกันให้เขียนทับด้วยข้อมูลใหม่
$fh = fopen("$imei",'w+') or die('Cannot open file:');
fwrite($fh,$newdriverid);
fclose($fh);
สำหรับการนำไปพัฒนาต่อยอดก็สามารถดำเนินการได้เองโดยไม่ยาก โดยสาระสำคัญของบทความนี้ก็คือวิธีการเปิดไฟล์เพื่อเขียนทับ วิธีการเปิดไฟล์เพื่ออ่าน และวิธีการลบไฟล์ ทำยังไงให้ไม่เกิดข้อผิดพลาดและหยุดการทำงานของโปรแกรมนั่นเอง
ไม่มีความคิดเห็น:
แสดงความคิดเห็น