ปัญหา

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