Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at ....
เป็นคำถามที่เจอบ่อยมาก และ เรื่องของเรื่องคือ อยู่บน Server มันไม่มีข้อความนี้ แต่พอเอามาทดสอบบน localhost กลับมีซะงั้น
ว่ากันด้วยเรื่องของคำเตือนนี้ก่อน (มันเป็นแค่คำเตือน โปรแกรมจึงยังรันต่อไปได้จนเสร็จ) มันบอกว่ามีการเรียกใช้ session หรือ cookie หลังจากที่มีการส่ง ouput ออกไปก่อนหน้าแล้ว
ตัวอย่าง
แบบนี้ error แน่ๆ เนื่องจากมีการเรียก echo ก่อนการเรียก session (หรือ cookie)
วิธีแก้ไข
วิธีคิดก็คือ session_start() และ ob_start() จะต้องเรียกใช้ก่อนการ echo ก่อนเสมอ
คำแนะนำเพิ่มเติม เหตุผลที่คำเตือนนี้แสดงผลเฉพาะบน localhost แต่ไม่แสดงผลบน Server เนื่องจากโดยทั่วไป บน Server จะมีการปิดการแสดงผลข้อผิดพลาดต่างๆของ PHP ไว้ ซึ่งการปิดการแสดงผลข้อผิดพลาดบน localhost เป็นการแก้ปัญหาที่ไม่ถูกต้อง เพราะปัญหาต่างๆยังคงมีอยู่ เราควรแก้ไขเพื่อไม่ให้มีข้อผิดพลาดใดๆในโค้ด ก่อนนำไปใช้จริงบน Server เสมอ
เป็นคำถามที่เจอบ่อยมาก และ เรื่องของเรื่องคือ อยู่บน Server มันไม่มีข้อความนี้ แต่พอเอามาทดสอบบน localhost กลับมีซะงั้น
ว่ากันด้วยเรื่องของคำเตือนนี้ก่อน (มันเป็นแค่คำเตือน โปรแกรมจึงยังรันต่อไปได้จนเสร็จ) มันบอกว่ามีการเรียกใช้ session หรือ cookie หลังจากที่มีการส่ง ouput ออกไปก่อนหน้าแล้ว
ตัวอย่าง
<?php
echo '555';
.....
session_start();
ob_start();
แบบนี้ error แน่ๆ เนื่องจากมีการเรียก echo ก่อนการเรียก session (หรือ cookie)
วิธีแก้ไข
<?php
session_start();
ob_start();
echo '555';
.....
วิธีคิดก็คือ session_start() และ ob_start() จะต้องเรียกใช้ก่อนการ echo ก่อนเสมอ
คำสั่งอื่นๆ ที่ไม่มีการส่งออก output ใดๆ สามารถอยู่ก่อนได้ คำสั่งที่ไม่สามารถอยู่ได้เป็นคำสั่งในกลุ่มที่แสดงผลออกทางหน้าจอเท่านั้น เช่น echo print() print_r() var_dump() เป็นต้น
แนวทางในการปฏิบัติทั่วไป คือเราควรเรียกใช้ 2 คำสั่งนี้ที่บรรทัดแรกของไฟล์ PHP เลยหากหน้านั้นมีการใช้ cookie หรือ session โดยอยู่หลัง <?PHP ก่อนโค้ดอื่นๆ และ <?PHP ต้องเป็นตัวอักษรแรกของไฟล์ PHP นั้นๆคำแนะนำเพิ่มเติม เหตุผลที่คำเตือนนี้แสดงผลเฉพาะบน localhost แต่ไม่แสดงผลบน Server เนื่องจากโดยทั่วไป บน Server จะมีการปิดการแสดงผลข้อผิดพลาดต่างๆของ PHP ไว้ ซึ่งการปิดการแสดงผลข้อผิดพลาดบน localhost เป็นการแก้ปัญหาที่ไม่ถูกต้อง เพราะปัญหาต่างๆยังคงมีอยู่ เราควรแก้ไขเพื่อไม่ให้มีข้อผิดพลาดใดๆในโค้ด ก่อนนำไปใช้จริงบน Server เสมอ