ob_end_flush() error
ว่าด้วยเรื่องอาการที่พบกันก่อน ซึ่งโค้ดเริ่มต้นเป็นแบบนี้
ob_end_flush();
ob_start();
imagepng($im);
$image_string = ob_get_contents();
ob_end_clean();
เรื่องของเรื่องก็คือโค้ดนี้ จะทำการอ่านเนื้อหาของรูปภาพที่สร้างจาก imagepng() ไปเก็บไว้ที่ตัวแปร $image_string และ Server ส่วนใหญ่ก็ไม่มีปัญหาแต่อย่างใด
แต่ Server ที่ผมทดสอบนี้ให้ผลลัพท์เป็นหน้าขาวๆ แทน โดยไม่แสดง Error อะไร และที่สำคัญ โค้ดเดียวกันนี้สามารถใช้ได้ในบางหน้าอีกต่างหาก
อย่างที่ผมเกริ่นไว้ จากการ debug พบว่าปัญหาเกิดจากบรรทัด ob_end_flush()
จากการตรวจสอบต่อ พบว่าปัญหาจะเกิดเขึ้นเมื่อ มีการเรียก ob_end_flush() โดยที่ไม่มีเนื้อหาจะส่ง (เช่นมีการเรียกตอนต้นๆ ของไฟล์) ทำให้มันทำงานผิดพลาด
การแก้ป้ญหา ให้ตรวจสอบก่อนว่ามีเนื้อหาหรือไม่ ถ้ามีถึงจะเรียกใช้ ถ้าไม่มีให้ข้ามไปเลย
if (ob_get_length() > 0) {
ob_end_flush();
}
ob_start();
imagepng($im);
$image_string = ob_get_contents();
ob_end_clean();