php header 404 ไม่ทำงานบน firefox

โดยปกติแล้ว หากเราต้องการประมวลผล PHP เพื่อให้ Server แจ้งกลับว่าไม่พบไฟล์ หรือการจำลองว่าไม่พบไฟล์ สามารถทำได้ด้วยคำสั่ง header() ของ PHP ดังตัวอย่าง
// Apache
header("HTTP/1.0 404 Not Found");
// สำหรับ FastCGI
header("Status: 404 Not Found");
exit;

หมายเหตุ ทั้ง 2 คำสั่งด้านบนควรใช้คู่กัน เพื่อประกันว่ามันจะทำงานได้สมบูรณ์ในทุกสถานการณ์

คำสั่งด้านบนจะมีการทำงานที่ดูเป็นปกติดี เมื่อทดสอบด้วย IE คือมันสามารถแสดงหน้า Page not found ได้เหมือนมันไม่พบไฟล์ตามปกติ แต่บน Firefox หรือ Opera มันกลับแสดงเป็นหน้าขาวๆ แทน

จริงๆแล้ว คำสั่งด้านบนก็ไม่มีอะไรผิดพลาดครับ การตรวจ header ก็ระบุว่ามันส่งสถานะ 404 กลับมาอย่างถูกต้อง แต่ที่ Firefox แสดงเป็นหน้าขาวๆ ไม่เหมือน IE ที่แสดงหน้า 404 ก็เพราะว่า หน้า 404 ของ IE เป็นหน้า Built in ของ IE เอง ซึ่งจะแสดงเมื่อพบหน้า 404 แต่ Firefox หรือ Opera ไม่มีหน้าดังกล่าวทำให้มันแสดงหน้าว่างๆแทน

การแก้ไขก็พอมีครับ ด้วยการสร้างหน้า 404 ขึ้นมาแสดงเองหากต้องการส่ง 404 ไปบน header เพื่อให้ Browser มีอะไรแสดงหากต้องเจอกับสถานะแบบนี้ แทนที่ตะปล่อยให้มันเป็นหน้าขาวๆให้มันรำคาญใจ
// Apache
header("HTTP/1.0 404 Not Found");
// สำหรับ FastCGI
header("Status: 404 Not Found");

// โหลดหน้า 404.html ซี่งออกแบบเองมาแสดง
echo file_get_contents('404.html');

exit;

ผู้เขียน goragod โพสต์เมื่อ 13 ส.ค. 2554 เปิดดู 11,043 ป้ายกำกับ PHPApache
^