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 ออกไปก่อนหน้าแล้ว

ตัวอย่าง
<?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 เสมอ
ผู้เขียน goragod โพสต์เมื่อ 06 พ.ย. 2559 เปิดดู 5,771 ป้ายกำกับ session
^