แก้ปัญหา PHP Fatal error: Allowed memory size of ... bytes exhausted

วันนี้ผมเพิ่งจะเจอ Error Message ว่า PHP Fatal error: Allowed memory size of <ระบุค่าเป็นตัวเลข> bytes exhausted ประมาณนี้ มาสดๆร้อนๆ เมื่อกี้นี้เลย เมื่อเจอก็แก้ไขกันไป แล้วก็เหมือนเดิมครับ เห็นว่าน่าจะเป็นประโยชน์ก็อดเอามา Share ไม่ได้ ถ้าคุณเจอเหมือนผมแล้ว Google มาเจอก็ไม่ต้องตกใจครับ มาถูกที่แ้ล้วล่ะ ผมจะแนะนำทางแก้ให้คุณได้ เข้าเรื่องกันเลยครับ...

ปัญหานี้ส่วนใหญ่เกิดจาก hosting ที่เราใช้อยู่นั่นแหละครับ เค้าคงปรับแต่งค่า (Setup/Config) ค่าตั้งต้นโดยเฉพาะค่า memory_limit ในไฟล์ php.ini ซึ่งเกี่ยวข้องกับขีดจำกัดการใช้หน่วยความจำในการประมวลผลชุดคำสั่งในการทำงานตามโปรแกรมนั้นๆ ทั้งนี้ก็เพื่อให้ server ของเค้ามีความสเถียรในการทำงาน สามารถรองรับการใช้งานพร้อมๆกันจากผู้ใช้หลายๆคน (ก็ธรรมดาครับเพราะ Hosting เค้ามีรายได้มากขึ้นจากการ Share Server ให้หลายๆรายมาเช่าใช้พร้อมๆกันนี่ครับ)

สำหรับทางแก้นั้น ก็อาจแก้ไขได้ง่ายๆด้วยการติดต่อผู้ดูแล Hosting เพื่อให้เค้า set ค่าให้เราเป็นพิเศษ ไม่งั้นเราก็ใช้งานไม่ได้ แต่หากไม่อยากรบกวนก็พอมีทางออก 2 วิธีครับ

  1. หาก Server ที่คุณใช้เป็นระบบ Unix หรือ linux นั้นสามารถตั้งค่าโดยเฉพาะของเราผ่านไฟล์ .htaccess ได้ครับ (ในกรณีที่คุณใช้ระบบ windows อาจข้ามขั้นตอนนี้ไป เพื่อไปทำขั้นตอนที่ 2 ต้องขอความช่วยเหลือผู้ดูแลจริงๆนั่นแหละ) ซึ่งวิธีการก็ง่ายๆ สร้าง text file ธรรมดาๆชื่อ .htaccess แล้วบันทึกคำสั่งลงไปข้างในว่า

    php_value memory_limit 128M

    แล้วอัพโหลดลงใน Folder (Directory) ที่เก็บไฟล์ .php ของคุณนั่นแหละครับ แค่นี้ก็เรียบร้อย  โดย .htaccess นี้เป็นเหมือนกับการตั้งค่าเฉพาะการทำงานใน Folder ที่มันอยู่เท่านั้น ถ้าทุกอย่างลงตัว Error ก็จะหายไป หรือไม่ก็ลองกำหนดค่า 128M ให้มากขึ้นอีก แต่หากไม่มีอะไรเปลี่ยนแปลง บางครั้งก็เป็นด้วยเหตุว่าระบบไม่รองรับ หรือตั้งค่าให้ไม่รองรับ .htaccess อีก อันนี้ก็ต้องหาวิธีใหม่กันไปครับ ก็วิธีนี้ไม่เวอร์คซะแล้วนี่
  2. หากไม่ใช่ Server Unix/Linux หรือผู้ดูแลเค้าไม่ให้้ตั้งค่าผ่าน .htaccess ก็ต้องใช้วิธีนี้ครับ ตั้งค่าผ่านฟังก์ชั่นที่ทางผู้พัฒนาภาษา PHP เค้าเตรียมไว้ให้ ฟังก์ชั่น ini_set() โดยเพิ่มคำสั่ง

    ini_set("memory_limit","12M");

    ลงไปในส่วนหัวของไฟล์ (ต้นๆโปรแกรม) โดยฟังก์ชั่น ini_set() นี้มีไว้เพื่อให้คุณสามารถบอกให้ PHP มันรู้ว่าคุณอยากให้ตั้งค่าอะไรต่างๆเป็นแบบนั้นแบบนี้เป็นพิเศษก็
    ง่ายๆแค่นี้แหละครับ ลองดูละกันนะครับเวอร์คไม่เวอร์คบอกกันด้วย 
โดยส่วนตัวผมลองแล้วทั้งสองแบบ แบบที่ 1 นั้นง่ายมาก แต่แบบที่ 2 ก็ใช่ว่าจะยากเพราะเราอาจหาไฟล์ที่จำเป็นต้องเรียก include เข้าไปในแต่ละโปรแกรมอยู่แล้วถ้ามีหลายไฟล์ก็เลือกเอาซักไฟล์ใส่เข้าไปก็จบแล้วครับ

ปล. หากท่านเป็นนักพัฒนาเว็บแอพพลิเคชั่นละก็อย่าพลาดหาอ่านเพิ่มเติม .htaccess และ ini_set() เชียวนะครับ เพราะมันทำอะไรได้อีกเพียบเลย โดยเฉพาะการแก้ปัญหาเกี่ยวกับการกำหนด environment ของ server หรือ hosting ที่เช่าใช้เนี่ยแหละของจำเป็นต้องรู้เลยครับ เพราะบางครั้งค่าที่เค้ากำหนดก็เป็นค่าที่เราใช้ไม่ได้ ทางแก้ก็คือ ปรับแก้โปรแกรมให้สามารถทำงานได้ในข้อกำหนดของเค้า หรือไม่ก็คือปรับตั้งค่าให้สภาพแวดล้อมเหมาะกับการทำงานของโปรแกรมเราครับ ซึ่งจริงๆแล้วการพัฒนาโปรแรกมภาคปฏิบัตินั้นไม่มีอะไรตายตัว โชคดีครับ

แสดงความคิดเห็น

0 ความคิดเห็น