เก็บ Error ไว้ในไฟล์ Log เพื่อตรวจสอบ

หลังจากพัฒนาเว็บแอพเสร็จแล้ว การเอาโปรแกรมที่พัฒนาแล้วขึ้นไปใช้ใน Production Server นั้น เรามักจะปิดการแสดงผล Error เอาไว้ให้ห่างจาก User เพื่อไม่ให้เกิดภาพลักษณ์ที่ไม่น่าเชื่อถือ หรือต้องการป้องกันว่าจะมี ชื่อตัวแปร ชื่อฟังก์ชั่น อะไรหลุดรอดออกไปเป็นเครื่องมือให้ Cracker หยิบฉวยเอาไปใช้โจมตีเว็บเราได้โดยง่าย

แต่เอาเข้าจริงแล้ว Developer เองก็ต้องเก็บ Error เหล่านี้ไว้เพื่อติดตามแก้ไขหรือพัฒนาระบบให้แข็งแรงขึ้นไปกว่าเดิมอีกด้วย หรือบางครั้งอาจเป็นการแจ้งเตือนจากระบบ เช่น เมื่อเรา Update PHP เป็น Version ใหม่ๆ ก็อาจจะมีฟังก์ชั่นเก่าๆบางตัวกำลังจะถูกถอดออก (Deprecated) ใน PHP รุ่นถัดไป ฉะนั้นแล้วเมื่อมีเวลาว่าง ผมจึงสร้างฟังก์ชั่นช่วยเก็บข้อมูลการ Error เหล่านี้เอาไว้ใน Text ไฟล์ซะก่อน หลังจากนั้นผมค่อยกลับมาวินิจฉัยและ Service ภายหลัง ไฟล์ของผมเป็นดังนี้ครับ


File : save_error_log.inc.php
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
<?php
function save_error_log(){
// อ้างอิง : http://nyphp.org/PHundamentals/7_PHP-Error-Handling
// พัฒนาโดย : kaisoft@hotmail.com
// ใช้ตรวจจับและสร้าง error.log ในชื่อไฟล์เดียวกับที่กำลังทำงาน

// หาชื่อไฟล์ที่เรียก function และเตรียมให้เป็นชื่อไฟล์เก็บ log
$backtrace = debug_backtrace();
$suffix = '_error';
$extension = '.log';
$logfile = dirname($backtrace['1']['file']).'/';
$logfile .= basename($backtrace['1']['file'],'.php').$suffix.$extension;

// ตั้งค่า php ให้เก็บ error ลงไปยังไฟล์ที่กำหนด
ini_set ('error_reporting', E_ALL);
ini_set ('log_errors','on');
ini_set ('error_log',$logfile);
}
save_error_log();
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

วิธีใช้
ใช้ง่ายใช้สะดวกเลยครับงานนี้ เพราะแค่ include หรือ require_once เข้าไปร่วมใน Project แค่นั้นครับ ไม่ต้องตั้งค่าอะไรอีกเลย มันจะดักจับ Error และเอาไปเก็บไว้ที่โฟลเดอร์เดียวกันกับไฟล์ที่ include มันเข้าไป ต่อท้ายด้วย error.log เช่น หากไฟล์ที่เรียก include เข้าไปชื่อ index.php เวลาเกิด Error มันจะนำข้อมูลการ Error ครั้งนี้ไปเก็บไว้ที่ index_error.log ไว้ให้เลยครับ

คำแนะนำเพิ่มเติม
1. บางท่านอาจทราบว่าที่จริงแล้วในหน้า Hosting Control Panel ต่างๆก็เก็บ Log ไว้แล้วเหมือนกันนะทำไมต้องมาเก็บเอง ใช่ครับมันมีแบบนั้น แต่หากคุณไม่ใช่ Admin หรือเค้า Set ให้คุณเป็นแค่คนพัฒนาร่วม บางครั้งก็จะไม่สามารถเข้าถึงส่วนนี้ได้ครับ และหากคุณนำระบบของคุณไปใช้กับ Server ที่เค้าตั้ง Config ไว้เรียบร้อยแล้ว เค้าอาจไม่แก้ไขอะไรให้คุณ คุณก็จะยุ่งยากหน่อยกว่าที่จะได้ข้อมูล Log มาตรวจสอบ ด้วยวิธีที่แนะนำนี้คุณสามารถทำด้วยตัวเองทันทีครับ
2. การจัดเก็บลงไฟล์ ชื่อของไฟล์ และการจัดเก็บลงในโฟลเดอร์เดียวกับไฟล์ PHP นี้เป็นแค่ idea นะครับ เพราะอันที่จริงแล้วการนำไปใช้จริงเราไม่ควรให้อยู่ใน Folder เดียวกันหรือชื่อของไฟล์คาดเดาได้ง่าย เช่นเปลี่ยนค่าของ Suffix และ Extension ให้มันเรียกชื่อยากๆเข้าไว้หน่อย ไม่งั้นถ้าเหล่า Cracker เดาทางชื่อไฟล์เก็บ Error ของคุณได้ เค้าจะไปเปิดดูแล้วหาทางเล่นงานเว็บแอพของคุณได้ง่ายๆเลยครับ บางทีคุณอาจพัฒนาไปเก็บลง Table ของ Database ใดๆก็เป็นได้

ขอบคุณสำหรับการเข้ามาอ่าน หากมีอะไรสอบถามหรือแบ่งปันไอเดียกันก็ยินดีนะครับ สำหรับตอนนี้ก็ขอกล่าวคำว่า สวัสดี..ราตรีสวัสดิ์ครับ

แสดงความคิดเห็น

0 ความคิดเห็น