ติดต่อ

Moodle: PHP problem in export MySQL statement output

ปัญหา

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

 

บันทึกนี้เขียนที่ GotoKnow โดย 

หมายเลขบันทึก: 11524, เขียน: , แก้ไข, , สัญญาอนุญาต: สงวนสิทธิ์ทุกประการ, อ่าน: คลิก

คำสำคัญ (keywords) #uncategorized

บันทึกล่าสุด 

ความเห็น (0)