ปัญหา
Cannot modify header information
- headers already sent by
ในขณะที่พยายาม export ข้อมูลจาก
Moodle database ให้เป็น Excel ไฟล์
สาเหตุ
ุ
header()
จะต้องถูกเรียกก่อนเอาต์พุตอื่น ๆ ฉะนั้นจะถูกเรียกหลังจากมีแท๊ก html
หรือมีบรรทัดว่าง (blank lines) ไม่ได้
ตัวอย่างโค๊ดที่ทำให้มีปัญหา
1:
2: <?php
3: header("Location: welcome.php"); /* Redirect browser */
4:
5: exit;
6: ?>
เพราะว่ามีบรรทัดว่างที่บรรทัดที่ 1 และมีการเรียก header ในบรรทัดที่
3
1: <html>
2: <?php
3: header('Location: welcome.php');
4: ?
เพราะว่ามีแท๊ก html ที่บรรทัดที่ 1 ในขณะที่มีการเรียกใช้ header
ในบรรทัดที่ 3
วิธีแก้
คุณสามารถใช้วิธี output buffering
เพืี่อที่จะแก้ปัญหานี้
ob_start();
header('Location: welcome.php');
ob_end_flush();
exit;
?>
วิธีนี้จะเก็บข้อมูลลงใน output
buffer
บนเซิรฟ์เวอร์และจะไม่แสดงข้อมูลอะไรออกมาทางบราวเซอร์จนกระทั่งเราเรียก
ob_end_flush() ในบางครั้งการเติม exit; หลังคำสั่ง header
จะช่วยแก้ปัญหาของบางคน
แหล่งข้อมูล
http://www.siteinaweek.com/howto/headerproblems/headerproblems.html