ใช้ header('location : ') แล้วไม่เวอร์คเกิดจากอะไร?

ใช้ header('location : ') แล้วไม่เวอร์คเกิดจากอะไร? 
เปิดหัวมาแบบนี้บางคนงงว่า อยู่ๆมันโพล่งอะไรของมันออกมา ก็ต้องแนะนำกันนิด(ส์)นึง ฟังก์ชั่น header() นั้นเป็นฟังก์ชั่นใน PHP ที่เอาไว้จัดการกับ header ของผลลัพธ์ที่จะส่งจากเว็บของเราออกไปให้โปรแกรม Browser ครับ ดังนั้นจึงสามารถทำอะไรได้หลายอย่างและอย่างนึงที่มีประโยชน์คือการ Redirect หรือการเปลี่ยนทิศทาง จากไฟล์นึงไปทำงานต่อหรือแสดงผลในอีกไฟล์นึงนั่นเอง เช่น เมื่อ PHP ทำงานมาจนถึงคำสั่งว่า header('location : www.anysite.com/anyfile.php') มันจะถือเป็นการจบงานที่กำลังทำอยู่แล้วไปเรียก www.anysite.com/anyfile.php ขึ้นมารับช่วงงานต่อทันที ซึ่งคุณจะส่ง parameter ผ่านไปให้แบบ cookie , session , post ก็สุดแล้วแต่ครับเจ๋งมั๊ย ซึ่งกรณีทำระบบใหญ่ๆนั้นฟังก์ชั่นนี้มีบทบาทมากพอสมควรเลยล่ะครับ

ทีนี้ปัญหาก็คือ การทำงานของ header('location : ') นี่มันมีข้อแม้อยู่ว่า ห้ามส่งข้อความอะไรออกไปก่อน พวกคำสั่ง print aprint echo อะไรนี่ไม่ได้เลย แต่บางครั้งเราก็ไม่รู้เหมือนกันว่าเราส่งอะไรออกไป เพราะมันอยู่ในไฟล์ include มั่ง ระหว่างทางมั่ง รวมถึงพวก editor ที่ใช้ mode : utf8 with bom ก็สร้างปัญหานี้ด้วย เพราะมีอักขระพิเศษที่ถือเป็นข้อความด้วยเหมือนกัน ดังนั้นทางแก้ก็คือ
1.ไปแก้ไอ้ที่ว่าๆมานั่นแหละก่อน แล้วถ้าไม่เจอก็...

2.ปิดบังเอาไว้ไม่แสดงผลออกมาด้วยฟังก์ชั่น ob_start(); และ ob_end_flush(); โดย ob_start(); จะทำหน้าที่เอาข้อความที่จะส่งออกไปเก็บในหน่วยความจำแทนซะ และ ob_end_flush(); มันจะเอาที่อยู่ในหน่วยความจำออกไปทิ้งครับ เมื่อใช้ร่วมกันก็เป็นอันว่าไม่ต้องหาที่ผิด แต่เอามันออกไปเลย ^_^ วิธีใช้ก็วางหัววางท้ายแบบนี้แหละครับ

<?
ob_start();

// include ต่างๆ
// ทำนู่นทำนี่

header("location: c.php");

ob_end_flush();
?>

เวลาหมด หมดเวลา ไปทำงานต่อก่อนครับ ก็ขอจบลงสั้นๆตรงนี้
ไว้เจอกันใหม่ สวัสดีครับ
กิตติศักดิ์ บุญราศรี

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

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