Archive for the ‘PHP Coding’ Category

0147 | PHP Fatal error: Out of memory

Tuesday, February 5th, 2013 Posted in Linux, PHP Coding, Web Server | No Comments »

Fatal error: Out of memory (allocated 4194304) (tried to allocate 14156 bytes) in /var/www/html/script.php on line 123

เชื่อว่าคนทำเว็บที่ใช้ PHP หลายๆ คนคงเคยเจอปัญหานี้มาไม่มากก็น้อยกันอยู่ช่าม้า (แบ๊วซะ) หลายๆ คนเห็น error อันนี้แล้วก็ไปเข้าใจผิดว่า server แรมหมดอะไรงี้ด้วย เดี๋ยวจะมาอธิบายให้ครับ

  • Error นี้ไม่ได้เกี่ยวห่าอะไรเลยกับ RAM ของ server หมดครับ การ reboot เครื่องหรือ upgrade spec ของ VPS ของท่านไม่ได้ช่วยให้อาการนี้หายแต่อย่างใด
  • มันคือ Error ที่มาจากระบบจัดการการใช้ Memory ของ PHP เอง (ตั้งใน php.ini ชื่อ option ว่า memory_limit)
  • มันกำลังบอกว่า เจ้าของ server ตั้งจำกัดการใช้งาน Memory ของ PHP ไว้ (allocated ***) bytes
  • และมันบอกว่า script ใช้จนเต็ม limit ไปแล้ว แต่จะขอใช้เพิ่มอีก (tried to allocate *** bytes)
  • พอใช้เกิน limit ของที่ตั้งไว้ใน php.ini PHP ก็เลยสั่งตัดการทำงาน พร้อมกับพ่น error นั่นออกมา

ความจริง option นี้มีประโยชน์มากสำหรับ shared hosting เพื่อป้องกันไม่ให้มี script ใดๆ สามารถใช้งานแรมจนหมดได้… (อาจจะเกิดจากเขียน code ผิด หรืออะไรก็แล้วแต่) แต่การตั้งค่านี้ต่ำไปก็มีผลกระทบกับ CMS ที่เขียนมาไม่ดี และมีการใช้ทรัพยากรหนักๆ ครับ (WordPress / Joomla เป็นต้น)

ค่า memory_limit ของ PHP เนี่ย เท่าที่ใช้งานมาไม่ควรตั้งต่ำกว่า 8M (8388608) ครับ และสำหรับการใช้งาน CMS อย่าง wordpress หรือ joomla ที่ call stack ไม่รู้จะยาวไปหาอะไร แนะนำให้ตั้งที่ไม่ต่ำกว่า 64M (67108864) ครับ

Tags: ,

0141 | แก้ปัญหา WP SuperCache ขึ้น File name too long

Monday, December 24th, 2012 Posted in PHP Coding, Programming | No Comments »

ท่านที่ใช้ wordpress ใช้ wp-supercache กันอยู่ใช่มั้ยครับ? เคยประสบปัญหา permalink เป็นภาษาไทยยาวจน wp-supercache ไม่ทำงานรึเปล่า?
ตอนนี้ TV Direct ขอนำเสนอ… plugin ของ wp-supercache (อีกที) เพื่อแก้ปัญหา url ยาวเกินจนทำให้สร้าง folder cache ไม่ได้ครับ

ไม่ต้องซื้อ ไม่ต้องหา ก๊อปวางกันได้ที่นี่สบายๆ เอาไปใส่ที่ folder wp-content/plugins/wp-super-cache/plugins/ สร้างไฟล์ชื่ออะไรก็ได้ แล้วใส่ข้อมูลไปตามนี้ครับ

<?php
function iz_wpscfix_dir($uri) {
        $uris = explode('/', $uri);
        $result = array();
        foreach ($uris as $path) {
                if (strlen($path) > 250) {
                        $path = substr($path, 0, 220).'-'.md5($path);
                }
                $result[] = $path;
        }
        return implode("/",$result);
}
add_cacheaction('supercache_dir', 'iz_wpscfix_dir', 0);

แค่นี้ก็แก้ปัญหาเรียบร้อย ส่วน rewrite url มีปัญหาไม่ทำงานนิดหน่อยไม่เป็นไร ใช้ PHP serve แทนได้ ก็พอจะช่วยลด load ลงได้เยอะอยู่ครับ ^^

Tags: , ,