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

 

คำสำคัญ (Tags): #uncategorized
หมายเลขบันทึก: 11524เขียนเมื่อ 7 มกราคม 2006 02:03 น. ()แก้ไขเมื่อ 31 พฤษภาคม 2012 11:01 น. ()สัญญาอนุญาต: จำนวนที่อ่านจำนวนที่อ่าน:


ความเห็น (0)

ไม่มีความเห็น

พบปัญหาการใช้งานกรุณาแจ้ง LINE ID @gotoknow
ClassStart
ระบบจัดการการเรียนการสอนผ่านอินเทอร์เน็ต
ทั้งเว็บทั้งแอปใช้งานฟรี
ClassStart Books
โครงการหนังสือจากคลาสสตาร์ท