Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,028

HOME > PHP > PHP Forum > [*Help]----->>> เรื่อง session_start(); และ ob_start();



 

[*Help]----->>> เรื่อง session_start(); และ ob_start();

 



Topic : 030081



โพสกระทู้ ( 1,322 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์





  • session_start(); กับ ob_start(); ต้องใส่อันไหนก่อนหลัง?


  • เมื่อใช้งาน คุำกกี้ จำเป็นต้อง ob_start(); ด้วยหรือไม่?



  • ob_start(); ทำให้เว็บโหลดช้าขึ้นหรือไม่?



ขอบคุณล่วงหน้ากับคำตอบคับ



Tag : - - - -







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2009-08-07 17:07:37 By : pokultra View : 6539 Reply : 8
 

 

No. 1



โพสกระทู้ ( 830 )
บทความ ( 0 )



สถานะออฟไลน์


อันแรก ต้องใช้ ob_start() ก่อน

อันสอง ไม่จำเป็นเสมอไป เพระาตั้งแต่ผมเขียนโปรแกรมมา ยังไม่เคยใช้ ob_start() ก็ setcookie ได้ 555+

อันที่สาม ที่รุ้ๆ คือ ไม่ค่อยอยากแน่ะนำให้ใช้อะ ไม่รุ้เกี่ยวกับช้าหรือเปล่า ได้ยินมาแบบนี้






Date : 2009-08-07 17:48:42 By : danya
 


 

No. 2



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

ไม่ช้าหรอกครับ แต่ทางปฏิบัติจริงมันก็แค่ส่งมาทีเดียว เพราะเก็บใน บัฟเฟอร์ก่อน
ใช้ ob_stat(); ในกรณีที่ใช้ บัฟเฟอร์ครับ หรือยังไม่ต้องการให้ส่งเอาพูทออกไปทันที

ก่อนที่จะส่งข้อมูลไปเราก็เลือกที่จะไม่ส่งได้ครับ แล้วล้างบัฟเฟอร์

มันจะฟลัชอัตโนมัติเมื่อจบสคริปต์ และตอนที่เรียก ob_end_flush();
Date : 2009-08-07 18:02:37 By : pjgunner
 

 

No. 3



โพสกระทู้ ( 1,322 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์


Quote:
อันสอง ไม่จำเป็นเสมอไป เพระาตั้งแต่ผมเขียนโปรแกรมมา ยังไม่เคยใช้ ob_start() ก็ setcookie ได้ 555+


ถ้าผมไม่ใส่มันขึ้น error อะครับ เพราะปกติผมก็ใส่ session_start(); อ่ะครับ

Quote:
ไม่ช้าหรอกครับ แต่ทางปฏิบัติจริงมันก็แค่ส่งมาทีเดียว เพราะเก็บใน บัฟเฟอร์ก่อน
ใช้ ob_stat(); ในกรณีที่ใช้ บัฟเฟอร์ครับ หรือยังไม่ต้องการให้ส่งเอาพูทออกไปทันที

ก่อนที่จะส่งข้อมูลไปเราก็เลือกที่จะไม่ส่งได้ครับ แล้วล้างบัฟเฟอร์

มันจะฟลัชอัตโนมัติเมื่อจบสคริปต์ และตอนที่เรียก ob_end_flush();


ใส่ตอนไหนครับหรือใส่ตรงไหนครับ

แนะนำหน่อยคับ

ขอบคุณกัีบคำตอบทั้งสองท่านนะครับ
Date : 2009-08-08 21:16:20 By : pokultra
 


 

No. 4



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

Quote:
ถ้าผมไม่ใส่มันขึ้น error อะครับ เพราะปกติผมก็ใส่ session_start(); อ่ะครับ


session_start(); ต้องใส่ก่อนมี output ครับ

ถ้าเราเอา ob_start(); ไว้บนสุด ซึ่งเอาพุทจะยังไม่ออก(อยู่ในบัฟเฟอร์)ครับ ดังนั้นถ้าใส่ ob_start(); ไว้ก่อนแล้ว เอา session_start(); ไว้ที่ไหนก็ได้คับ(ถ้ายังไม่ได้ฟลัชออกไป)

สรุปต้องใส่ ob_start(); ไว้ก่อน session_start(); ครับ
Date : 2009-08-08 21:50:57 By : pjgunner
 


 

No. 5



โพสกระทู้ ( 1,322 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์


Quote:
Quote:
ถ้าผมไม่ใส่มันขึ้น error อะครับ เพราะปกติผมก็ใส่ session_start(); อ่ะครับ



session_start(); ต้องใส่ก่อนมี output ครับ

ถ้าเราเอา ob_start(); ไว้บนสุด ซึ่งเอาพุทจะยังไม่ออก(อยู่ในบัฟเฟอร์)ครับ ดังนั้นถ้าใส่ ob_start(); ไว้ก่อนแล้ว เอา session_start(); ไว้ที่ไหนก็ได้คับ(ถ้ายังไม่ได้ฟลัชออกไป)

สรุปต้องใส่ ob_start(); ไว้ก่อน session_start(); ครับ


ขอบคุณ เอี่ยว(Rest) มากครับ
Date : 2009-08-08 22:12:48 By : pokultra
 


 

No. 6



โพสกระทู้ ( 1,322 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์


Quote:
ob_start() กับคำกล่าวที่ว่า ใช้ได้แต่ไม่แนะนำ
กรณีที่พูดถึงนี่ หมายถึง นำไปแก้ปัญหา

Warning: Cannot modify header information – headers already sent by…



ทำไมจึงได้พูดเยี่ยงนั้น



ob_start() นี่เป็นคำสั่งที่บอกไปยัง webserver ว่า ยูอย่าเพิ่งส่ง output ไปให้ client นะ รวบรวมไว้ก่อน รอให้สั่งหรือประมวล
ผลไปถึงบรรทัดสุดท้าย ก่อนแล้วค่อยส่ง นะจ๊ะ



ทีนี้ ขอเท้าความถึงกระบวนการประมวลระหว่าง client กับ server หน่อย



เมื่อยูสเซอร์พิมพ์ url ร้องขอ เพจที่เป็น php browser หรือจะเรียกว่า client ก็ได้ จะส่งคำร้องไปยัง server เมื่อ server ได้รับ
คำร้อง ก็ไปหาเพจที่ขอมา เมื่อเจอเพจที่ต้องการ ก็จะไปเรียกล่าม PHP มาช่วยแปล



ตอนแรกล่ามจะตรวจไวยากรณ์ก่อน ว่ามีตรงไหนผิดบ้าง ถ้ามีที่ผิดก็จะบอก server server ก็จะบอกไปยัง client นี่เป็นที่มาของ
error ต่างๆ ถ้าไม่มีที่ผิดเลย ก็จะเริ่มทำการแปลไปทีละบรรทัด ตั้งแต่บรรทัดแรกสุด ถ้ามี output ใดๆ ก็จะบอกไปยัง server server
ก็จะส่งสิ่งที่ได้ ไปให้ client client ก็จะรวบรวมและแสดงผลไปยัง user



ในระหว่างที่ server กำลังสื่อสาร กับ client อยู่นั้น ผู้เป็นล่าม ก็จะแปลไปเรื่อย ๆ ส่งเอ้าพุตออกมาเรื่อยๆ server ก็ส่งไปให้ client
เรื่อยๆ client ก็จะแสดงผลไปเรื่อยๆ



จะเห็นว่ากระบวนการ จะไม่มีการหยุดรอใครกัน ต่างคนต่างทำหน้าที่ของตัวเอง เพื่อแสดงผลแก่ user ให้เร็วที่สุด



แล้วที่บอกว่า “Cannot modify header ” header คืออะไร ?



ก่อนที่ server จะส่ง output แรกไปให้ client server จะส่งข้อมูลบางอย่างไปบอก client ก่อนว่า ยูเพจนี้นะแสดงผลแบบ html
encoding เป็น utf-8 นะ และอื่นๆ อีกจำนวนหนึ่ง เพื่อ client จะได้นำไปแสดงผลถูก ข้อมูลส่วนนี้แหละที่เขาเรียกว่า header



เริ่มเข้าเรื่องทีละน้อยแล้วล่ะ



ทีนี้ท่านลองคิดดูนะ server ได้ส่งข้อตกลง ( header ) ไปยัง client และส่งข้อมูลไปให้ ล่ามแปลอะไรได้มาก็ส่งไปให้ พอมาได้สัก
ระยะหนึ่ง ล่ามแปลไปๆ ไปเจอกับคำสั่งย้ายให้ไปแปลเอกสาร อันอื่น ( ในที่นี้คือคำสั่ง header() ) ล่ามก็หน้าซีดและบอก server
เสียงอ่อยๆ ว่าผมต้องแปลเอกสารอื่นนะ server ก็โมโหสิ เพราะคุยกับ client เป็นมั่นเป็นเหมาะแล้ว เลยตะโกนออกมาว่า เปลี่ยน
ไม่ได้ Cannot modify header ดังลั่นไปถึง programmer โฮ่ๆ



programmer ก็เลยสั่งจ่ายยา ob_start() ไปให้



มันก็แก้ได้อยู่หรอก แต่จะมีผลในเรื่องของ response time หรือระยะเวลาแสดงผลต่อ user เพราะเมื่อล่ามเห็นคำสั่งนี้ จะบอกกับ
server อย่างที่พูดไว้ด้านบน คือยังไม่ต้องส่งอะไรไปนะ รอก่อน เมื่อ server ยังไม่ส่งอะไรให้ client client ก็ต้องรอเช่นกัน



ด้วยประการฉะนี้แล


อันนี้เค้าบอกมีผลกับการแสดงผลอ่ะครับ
ob_start() กับคำกล่าวที่ว่า ใช้ได้แต่ไม่แนะนำ
Date : 2009-08-09 12:13:30 By : pokultra
 


 

No. 7



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

อย่าไปคิดมากเรื่อง ข้อความด้านสุดท้าย หรือคิดซะว่าคนที่เขียนเข้าใจไปแบบผิดๆครับ

มีผลกับการแสดงผล? มันก็ต้องมี คือจะใช้ buffer หรือไม่ใช้ มันก็ response มาเหมือนกัน เพียงแต่เวลาอาจต่างกัน
เพียงแค่นิดหน่อย (อธิบายยากแฮะ) ลองคิดดูถ้าเว็บคุณมีรีเควสเยอะๆ มันก็ช้าเหมือนกัน เพราะจะต้องเข้าคิว

ถ้าเว็บคุณมีข้อมูลเป็นเม็ก อันนี้ก็แทบไม่ต่างกัน ถาสคริปคุณ execute time ไม่นาน

คุณลองจับเวลาสคริปต์ของคุณดูสิครับ ว่าแต่ตั้งแต่บรรทัดแรกถึงบรรทัดสุดท้าย ใช้เวลกี่เสี้ยววิ
แต่ถึงแม้ไม่ใช้ buffer แต่มันก็ต้องส่งข้อมูลไปจนถึงบรรทัดสุดท้ายอยู่ดี

(ใครก็ได้ที่อธิบายได้ดีกว่าผม ช่วยอธิบายหน่อย)

สรุปคือ ยูสเซอร์จะเริ่มรับข้อมูลเมื่อสคริปต์เสร็จ ถ้าใช้บัฟเฟอร์
ยูสเซอร์จะเริ่มรับข้อมูล เมื่อเริ่มมีการส่งเอาพุททันที ถ้าไม่ใช้บัฟเฟอร์

ปรกติแล้วสคริปต์ผมส่วนมาก ไม่เคยทำงานเกิน 1วิ เลย ยกเว้นในกรณีแก้โจทย์ตรรกกะระดับวนรอบ 500,000 รอบ
ปรกติปรมาณ .05-.3 วิเท่านั้น
Date : 2009-08-09 12:41:41 By : pjgunner
 


 

No. 8



โพสกระทู้ ( 1,322 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์


ขอบคุณ คุณเอี่ยว(Rest) นะครับ

อาจจะเป็นเพราะผมวิตกกังวลมากไป แต่ยังมีอะไรแนะนำอีกก็เชิญนะครับ

ขอบคุณครับ
Date : 2009-08-09 14:27:32 By : pokultra
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : [*Help]----->>> เรื่อง session_start(); และ ob_start();
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 05
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่