หลายคนที่เคยประสบปัญหาและถ้าไปถามในเว็บบอร์ด ก็จะมีคนบอกว่าให้วางไว้บนสุดของไฟล์ ทำไม??? ทราบไหมครับ วันนี้เรามาดูกัน
PHP ที่ถูกนำมาใช้กันเพื่อพัฒนาเว็บไซท์/แอปปลิเคชั่น ทำงานอยู่บน http protocol (หวังว่าคงรู้อยู่แล้ว) http เป็นลักษณะของการสื่อสารของ text (ทั้งหมดสามารถแทนด้วยอักขระได้/อ่านออกได้) แต่จะแบ่งออกเป็น 2 ส่วน คือ
- header เป็นส่วนที่ใช้ในการอธิบายเอกสาร เช่น encoding, mime type, status ฯลฯ เพื่อให้โปรแกรมที่เรียกใช้/เปิดอ่านเอกสาร แสดงผลได้อย่างถูกต้อง
- content เป็นส่วนที่เป็นข้อมูลในการแสดงผล (ในที่นี้ก็คือ code html นั่นเอง)
มาถึงตรงนี้หลายคนคงทราบแล้ว่าทำไม header ถึงต้องวางไว้ต้นๆ ของเอกสาร แล้ว session_start ล่ะ??
session เป็นการทำงานร่วมกันของ Server และ Browser ซึ่ง Server จะมีการบอกให้ Browser เก็บข้อมูลเกี่ยวกับ Session ไว้ด้วยซึ่งข้อมูลเหล่านี้ไม่ใช่ content ดังนั้นการบอกให้ Browser ทำงานเพื่อเอาข้อมูลหล่านั้นไปใช้กับเอกสาร จึงจำเป็นต้องส่งไปในส่วนของ header ของเอกสาร นี่จึงเป็นคำตอบว่าทำไมต้องวางไว้ส่วนต้นของเอกสาร
ปัญหาคือควรวางไว้ตรงไหนดี บางคนคงเคยพบว่าวางไว้ส่วนต้นของเอกสารแล้ว แต่บางครั้งก็ยังแสดงข้อผิดพลาดอีก ในบางครั้ง เท่าที่เคยพบมักจะเขียนเช่น
PHP
- <?
- include("conn.php");
- ?>
- <html>
- .....
ก็คงคิดว่านี่ก็ส่วนต้นของเอกสารแล้วนี่ ก่อน tag html แล้วทำไมยังแจ้งผิดพลาดอีก ก็เพราะว่าไฟล์ conn.php มีข้อผิดพลาด เมื่อมีข้อผิดพลาดตัวแปลภาษา PHP จะทำการสร้างข้อความบอกความผิดพลาดให้แสดงผล นั่นก็คือ PHP เริ่มทำการส่งข้อมูลในส่วนของ content แล้ว หมายความว่าทั้ง session_start และ header ของคุณอยู่ในส่วนของ content แล้ว
วิธีแก้ก็อาจจะเปลี่ยนเป็น
PHP
- <?
- include("conn.php");
- ?>
- <html>
- .....
แต่จริงๆก็ไม่ใช่คำตอบที่ตรงคำถามเท่าไหร่ เพราะยังไง conn.php ก็ยังผิดพลาดอยู่ดี ซึ่งแก้ที่ conn.php น่าจะตรงคำถามมากกว่า