ปัญหา file_get_contents / curl แล้วพอ echo ขึ้น internal server error 500

เนื่องจากผมต้องมีการดึงข้อมูลขนาดใหญ่มาจาก url เจ้าหนึ่งซึ่ง string เขาเยอะมาก คราวนี้ผมก็ใช้ได้ไปจนถึงเจอ หน้าหนึ่งที่ยาวมากๆ ผมไม่สามารถ echo ได้พอ echo ทีไรจะขึ้น internal server error โดยวิธีแก้นั้นอาจจะไม่สามารถแก้ได้ทุก host นะครับ คราวนี้พอผมตรวจสอบปัญหาก็พบว่าผมจะ echo ได้เรื่อยๆเมื่อ string ต่ำกว่า 524288 Bytes ทีนี้ (วิธีก็คือ file_get_contents($url,null,null,-1,524288); ถ้าสามารถ echo ได้สันนินฐานได้เลยว่าเราติด SecResponseBodyLimit ของ Mod_security ของ Apache เข้าแล้วครับ

โดยวิธีแก้ก็คือ

  • ไปเพิ่ม SecResponseBodyLimit ให้มากกว่า Content-Length ที่เรา get มาในที่นี้ผมเพิ่มเป็น 2097152 ซึ่งแค่นี้ก็ยาวมากแล้วครับ ส่วนจะหาไฟล์ที่แก้ config นั้นทำดังนี้ครับ
  • ใน linux ใช้คำสั่ง  "locate modsecurity"
  • ลองเดาว่าอันไหนน่าจะเป็น config กรณีของผมเจอคือ /etc/modsecurity2/config.conf
  • เข้าไปแก้

เป็นอันเสร็จครับส่วน internal server error 500 นั้นอาจจะมีจากสาเหตุอื่นด้วยนะครับ แต่ที่ผมเจอคืออันนี้ก็เก็บเป็นเกร็ดเล็กน้อยให้ทุกท่านครับ :D