ฉันมีแอปพลิเคชันที่ทำงานอยู่ในสองแห่ง ได้แก่ เซิร์ฟเวอร์ MAMP สำหรับการพัฒนาบน OS X พร้อม PHP 5.3 และ Apache และเซิร์ฟเวอร์ IIS 6.0 ที่ใช้งานจริงพร้อม PHP 5.3 เช่นกัน
ปัญหาคือแอปพลิเคชันทำงานได้ดีบน Apache ไม่มีข้อผิดพลาด คำเตือน หรืออะไรก็ตาม
แต่เมื่อฉันเรียกใช้ฟังก์ชันคงที่ของคลาส Utilities ที่ฉันมีบนเซิร์ฟเวอร์ IIS ฉันได้รับข้อผิดพลาด 500 ปัญหาคือ ฟังก์ชันไม่เคยถูกเรียกใช้ การวาง "echo" ที่จุดเริ่มต้นของฟังก์ชันไม่ช่วยอะไรเลย ซึ่งบอกฉันว่ามันไม่ใช่โค้ด ภายใน ของฟังก์ชันที่เป็นปัญหา .. ฟังก์ชันคงที่อื่นๆ ของคลาสทำงานได้ดี
การตรวจสอบบันทึก (C:\Windows\temp\php-errors.log
) ไม่แสดงสิ่งใดที่เกี่ยวข้องกับปัญหานี้ แต่กำลังบันทึกข้อผิดพลาดอื่นๆ อย่างถูกต้อง (อักขระที่ไม่คาดคิดและสิ่งอื่นใด)
นี่คือฟังก์ชันที่กำลังถูกเรียกและตำแหน่งที่สคริปต์หยุดการทำงาน:
json_encode(Utilities::ContextifyToUser(Article::getArticlesInCollectionOfUser($user), $user);
การแยก json_encode
และ getArticlesInCollection
แสดงว่าทั้งคู่ใช้งานได้และส่งกลับค่าที่ถูกต้อง มันคือฟังก์ชัน "Contextify" ที่ฆ่ามัน
นี่คือฟังก์ชันบริบทตามที่กำหนดไว้ในคลาสชื่อ Utilities
:
public static function ContextifyToUser($obj = array(), $user = null){
if(is_null($user) || !is_array($obj)){
return null;
}
foreach($obj as $key => $value){
$obj[$key] = $value->contextifyToUser($user);
}
return $obj;
}
ดังที่ได้กล่าวไปแล้ว ไม่มีการเรียกใช้โค้ดใดในฟังก์ชันเลย ถ้าฉันใส่ "echo 'hello'" หลังคำจำกัดความของฟังก์ชัน มันจะไม่ถูกเรียกเลย
มันเป็นรหัสของฉันหรือนี่เป็นสิ่งที่แปลกกับ IIS? เมื่อพิจารณาว่าสิ่งนี้ทำงานได้อย่างสมบูรณ์แบบใน Apache ฉันคิดว่ามันเป็นอย่างหลัง...
ฉันอยากจะชี้ให้เห็นว่าไม่มีการแสดงหรือบันทึกข้อผิดพลาด แม้ว่าจะเปลี่ยนแปลง display_errors INI และใช้ error_reporting(E_ALL)
ก็ตาม เกิดข้อผิดพลาด 500 และสคริปต์หยุดดำเนินการผ่านจุดนั้น