ปัญหา
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 เพืี่อที่จะแก้ปัญหานี้
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 จะช่วยแก้ปัญหาของบางคน
แหล่งข้อมูล