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: ,

0015 | PHP Email Validation

Wednesday, May 14th, 2008 Posted in PHP Coding | 5 Comments »

บทความนี้อ้างอิง + คัดลอกมาจากเว็บไซต์ต่อไปนี้
Spoono.com – Spoono – PHP Tutorials – Email Validation

แบบว่ากำลังหาตัว validate email เพลินๆ ไปเจอตัวนี้มา ถูกใจครับ (ฮาๆ)
เอามาลง เผื่อเก็บไว้ใช้อีก

0000ff;">function 993300;">checkEmail(008080;">$email) {
0000ff;">if (ff0000;">eregi(ff00ff;">“^[a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$]”, 008080;">$email)) {
0000ff;">return false;
}

0000ff;">list(008080;">$Username, 008080;">$Domain) = ff0000;">split(ff00ff;">“@”,008080;">$email);

0000ff;">if (ff0000;">getmxrr(008080;">$Domain, 008080;">$MXHost)) {
0000ff;">return true;
} 0000ff;">else {
0000ff;">if (ff0000;">fsockopen(008080;">$Domain, 993300;">25, 008080;">$errno, 008080;">$errstr, 993300;">7)) {
0000ff;">return true;
} 0000ff;">else {
0000ff;">return false;
}
}
}

ปล. ทำ syntax highlight แบบอัตโนมือนี่เหนื่อยนะเนี่ย

Tags: , ,