web, trends and thinking

It just another weblog :P

แก้ปัญหา session_start()

leave a comment »

หัวข้อ entry นี้

  • กฎสำคัญในการใช้ session_start()
  • ปัญหาที่พบกับ session_start() ทั้งๆที่ทำตามกฎแล้ว
  • วิธีแก้ไขปัญหา เขาว่าให้เอา BOM ออก
  • แ้ล้ว BOM คืออะไรล่ะ
  • BOM กับ PHP และ session_start() เราสองสามสิ่ง
  • แก้ปัญหาด้วยวิธี encoding โดยใช้โปรแกรม Editor ทั้งหลาย
  • นำเสนอวิธีแก้ด้วย Notepad++
  • คำสำคัญ (keyword) ในบล็อกนี้

ข้อควรรู้ กฎสำคัญ เงื่อนไขสำคัญมาก (ย้ำแล้วนะ)
เงื่อนไขสำคัญๆที่คนเขียน PHP ควรรู้ ก็คือ session_start() เราต้องเอามันไว้บนสุด แรกสุดเสมอ

<?php
session_start();
?>

แล้วทำไม session_start() ยังใช้ไม่ได้ ทั้งๆที่ก็เขียนตามนั้นแล้ว
ถ้ายังไม่ได้อีกแปลว่าท่านพบสองประโยคเด็ดข้างล่างเป็นแน่

  • ปัญหาแรก #1
    • aladinfajr at gmail dot com
    • my problem was in
      session_start();
      when i include this term in my first code it show me Warning Message: Cannot Modfie cache limiter
      i had tryed many solves and dosn't work
      finally
      i write my code in other encode
      and it sccussfully worked
      i hope that help
  • ปัญหาสอง #2
    • milanzivanovic at gmail dot com
    • Resolve for:
      Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at ())
      is in changing text editor encoding to ANSI or UTF-8 without BOM.
      Thanks God I found the answer!

วิธีแก้ไขปัญหาดังกล่าว
ก็ตามที่เขาทั้งสองคนได้เสนอมาแล้วครับ
คือ แปลง encoding ไฟล์ของโค้ดเราจาก ANSI หรือ UTF-8 ให้เป็นไม่มี BOM

BOM คืออะไร?
มันเป็นชื่อย่อของ Byte Order Mark ครับ โดยมันจะนำสัญลักษณ์ตัวนึงของวิธีนี้เนี่ยไปไว้บนสุดของไฟล์ที่เขียนๆกัน เพื่อให้รับรู้ว่ามัน encoding เป็นอะไร ซึ่งแน่นอนว่าโดยทั่วไปสัญลักษณ์ต่างๆโปรแกรม Editor หรือแม้กระทั่ง Notepad เพียวๆก็ไม่อาจมองเห็นมันได้ครับ [เพิ่มเติม: เช่น tab ที่เราเห็นมันเว้นไว้ให้มันก็เป็น สัญลักษณ์ (symbol) ตัวนึงเหมือนกันนะ]

ทำไม session_start() ใน PHP ไม่ทำงานกับ BOM ล่ะ?
เอาเข้าจริงมันก็ไม่ได้มีปัญหาครับ แต่โดยกฎข้อสำคัญที่ผมบอกไปตั้งแต่แรกแล้ว คือ session_start() มันต้องอยู่บนสุด แรกสุดเท่านั้น พอมีใครมาแทรกหน้ามัน มันจะงอนครับ พอมันงอนมันก็ดื้อแล้วบอกเราแบบที่เห็นๆกันนี่ล่ะครับ

งั้นก็มาแก้ปัญหาโดยง่ายด้วย Editor กันเต๊อะ!
ถ้าท่านใช้โปรแกรมประเภท Editor อยู่แล้วปัญหานี้ก็แก้ได้สบายๆครับ

  • Dreamweaver
  • Editplus
  • Notepad++
  • Programmer’s Notepad (ไม่แน่ใจนะ แต่น่าจะมี)

ตอนผมกำลังโพสท์อยู่นี่ก็ใช้ Notepad++ ครับ แต่โปรแกรมนี้ฟรีเฉพาะ study case ไม่ฟรีสำหรับ commercial use (ใช้ในแง่พาณิชย์) โปรแกรมในด้านบนๆก็มีหนึ่งเดียวที่ใช้ฟรีสำหรับ commercial use ก็ Programmer’s Notepad นี่ล่ะครับ ที่พอทำให้ผมเลิกคิดถึง Editor ตัวอื่นๆไปได้พอสมควร

วิธีแก้ไม่เอา BOM ในไฟล์ php ด้วย Notepad++

  • ไปที่เมนูบาร์ > เลือก Format
  • Encode in UTF-8 without BOM
  • หรือท่านจะประสงค์ Convert ก็ได้ครับ

หวังว่าจะครบถ้วนในข้อมูลนะครับ พยายามคัดเนื้อเน้นๆอย่างย่อมาให้แล้ว ถ้ายังไม่ครบ ไม่จุใจ ท่านสามารถตามแหล่งด้านล่างไปได้เลยครับ และถ้ายังไม่พอผมแนะนำให้ลองเอา keyword อย่าง session_start() BOM php Warning “Cannot send session cookie” ไปลองหา search เพิ่มเติมได้เลยครับ รับรองมีให้อ่านอีกเพียบ ตาแฉะเลยแหล่ะ😀

มีอะไรติดขัดในสิ่งที่ผมเขียนก็ฝากไว้ได้เลยครับ ผมจะได้ปรับปรุง ขอบคุณมากครับ :))

คำสำคัญ keyword

  • PHP BOM Encoding Encode
  • session_start()
  • Warning
  • “Cannot send session cookie”
  • “Cannot Modifie cache limiter”

แหล่งอ้างอิง และแหล่งข้อมูล
ตามอ่านกันได้เลยครับ สำหรับเว็บไทยแนะนำให้ save as เอาไว้บนเครื่องก็จะดีนะครับ🙂
[Eng]
http://www.php.net/manual/en/function.session-start.php#99249
http://unicode.org/faq/utf_bom.html
[Thai]
http://www.wittaya.net/2009/02/byte-order-mark-bom.html
http://thaiwebclinic.com/index.php?option=com_content&task=view&id=25&Itemid=1
http://www.select2web.com/php/byte-order-mark.html

Written by แมวน้ำขั้วโลก

สิงหาคม 12, 2010 ที่ 6:35 am

เขียนใน PHP

Tagged with , , ,

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

%d bloggers like this: