Warning: Cannot modify header information – headers already sent by
ปัญหานี้เกิดจาก เรียกใช้คำสั่ง header() หลังจากมี output ส่งไปยัง client แล้ว
ดูตัวอย่างที่มีปัญหานะครับ
1. มีคำว่า Some text ถูกส่งออกไปแล้ว
<?php echo "Some text" ; header("Location:index.php") ; ?> |
2. มีคำว่า <html> ถูกส่งออกไปแล้ว
<html> <?php header("Location:index.php") ; ?> |
3. มี white space ถูกส่งออกไปแล้ว ระหว่างบล็อก php ทั้งสอง ( white space ได้แก่ ขึ้นบรรทัดใหม่,เคาะ space bar,tab โดยรวมคือช่องว่างที่มองไม่เห็น)
<?php $variable = 10 ; ?> <?php header("Location:index.php") ; ?> |
4. ดูจากโค้ดไม่น่ามีปัญหาอะไรเลย เพราะมีคำสั่งเดียว แต่ถ้าเซฟไฟล์เป็น UTF-8 With BOM เจอแน่
<?php header("Location:index.php") ; ?> |
มีวิธีแก้ 3 วิธี
1.หาให้เจอว่ามีเอ้าพุตอะไรออกไปในบรรทัดที่ php ฟ้อง
2.ใส่คำสั่ง ob_start() ใว้บนบรรทัดแรกสุดๆ ของไฟล์ (ไม่แนะนำ)
3.เซฟไฟล์เป็น UTF-8 Without BOM
4.เอาคำสั่งจาวาสคริปเข้าช่วยในการ redirect
หลังจากที่คุณกระทำการอะไรบางอย่างเสร็จและต้องการใช้คำสั่ง header() redirect ไปเพจอื่น ให้เปลี่ยนจากคำสั่ง header() เป็นเซตค่าตัวแปรสักตัว
$complete = “true” ;
แล้วทีนี้ตรงระหว่างแท็ก <head></head> ใส่คำสั่งนี้เข้าไป
<?php if ($complete=="true"){ ?> <script type="text/javascript"> window.location="gbook.php"; </script> <?php } ?> |