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 เสมอ