Wednesday, May 25, 2022

ปัญหาการแสดงจำนวน Row เยอะๆ ใน Datatable Jquery plugin

  • ใน apache error log ขึ้นประมาณนี้
  • หา bug อยู่ตั้งนาน นึกว่าเราไปเผลอ แก้ไขตรงใหนหา ไม่เจอ bug
  • ปัญหาเกี่ยวกับ paging ของ datatable plugin jquery
  • ถ้าเราตั้งค่าแสดง row เริ่มต้น ตั้งแต่ 500 - All แล้ว json ที่เราไป load data มาลงให้ databable ผ่าน ajax เค้า มัน post error 500 ซะงั้น
  • แต่ถ้าตั้ง row เริ่มต้น 10 - 100 อันนี้ json load data มาใส่ datatable ได้ปกติซะงั้น
  • ดูใน inspect -> console มันขึ้นแบบนี้ น่ะ งงเลยคับ
  • ไปใล่ดูใน apache log พบปัญหาประมาณนี้

PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 33706237 bytes)

Solved 1 อันนี้แก้เป็นรายระบบไป

  • ระบบเราใช้ CI4 ให้เราไปเพิ่ม
  • ini_set('memory_limit', '512M'); หรือ ini_set('memory_limit', '-1');
  • ใน method ใจ controller สำหรับ json ของเรา วางไว้ประมาณบรรทัดแรก เลย

Solved 2 อันนี้แก้สำหรับรองรับทุกระบบ (แต่ server  ต้อง ram เยอะๆ หน่อย)

  • แก้ไข  php.ini ค้นหา memory_limit
  • กำหนดค่าลงไปว่าใช้ mem เท่าไหร่

  • -1 คือ unlimited  นะคับระวังไว้ด้วย สำหรับการใส่ค่าคอนฟิกแบบนี้
  • แก้ไขเสร็จแก้ restart apache สักรอบน่าจะใช้ได้แล้ว

เพิ่มเติม

  • ระบบปัจจุบันของผู้เขียนนั้น php.ini ตั้งค่าเริ่มต้น memory_limit = 128M ซึ่งมันไม่พอใช้ทำให้ระบบ error คับ ทดลองปรับไปใช้ 256M ก็ไม่ได้ 
  • ต้องไปใช้ 512M หรือ -1 ไปเลย ถึงจะผ่าน

Ref

  • https://stackoverflow.com/questions/561066/fatal-error-allowed-memory-size-of-134217728-bytes-exhausted-codeigniter-xml