หลังจากอ่าน Blog ของ Eric Hogue ทำให้ผมเข้าใจสิ่งที่เคยทำแล้วไม่สำเร็จ นั่นคือการ override static method
ที่แท้มันเป็นแบบ early binding นั่นเอง ทำให้ไม่ว่าอย่างไร ก็จะเรียก static method ของ parent เสมอ
แต่ PHP 5.3 ทำให้ความฝันของผมเป็นจริงด้วย feature นี้ "Late static binding"
เอ... CentOS ของเรายังไม่ได้ใช้ 5.3 เลยนะ อด... :'(
Reference:
http://www.php.net/manual/en/language.oop5.late-static-bindings.php
http://erichogue.ca/2011/04/14/late-static-binding/
วันนี้ได้ทดสอบการใช้ค่า session.gc_maxlifetime อย่างจริงจัง พบว่า
การกำหนดค่า session.gc_maxlifetime คือการกำหนดอายุของ session บน server
โดยอายุของ session จะถูกต่อไปเรื่อย ๆ หากมีการเรียก session_start
ผมทดสอบดังนี้
1. ใช้ session.save_handler = memcache
2. ตั้งค่า session.gc_maxlifetime ไว้ที่ 60 วินาที
3. ใช้ script เพื่อเรียก session_start และ set ค่า session variable ณ เวลา 0 วินาที
4. ใช้ script เพื่อเรียก session_start และ get ค่า session variable ณ เวลา 30 วินาที
5. พบว่า session จะหายไปจาก memcache เมื่อเวลา 90 วินาที
Tip จากพี่ใหญ่ใจดี Google ครับ
ต้นฉบับ: http://code.google.com/speed/articles/optimizing-php.html
ผู้เขียน: Eric Higgins, Google Webmaster
PHP Performance Tips
BAD: $description = $_POST['description']; echo $description;
ปัญหาและการวิเคราะห์
วันนี้เจอ bug แปลก ๆ นั่นคือการใช้งานคำสั่ง MetabaseSetSelectedRowRange
ที่อยู่ใน Metabase library เพื่อจำกัดจำนวนของข้อมูลที่ต้องการ
แต่ดูเหมือนว่าจะใช้ไม่ได้ เพราะ query นานมาก นานเหมือน query มาทั้งหมด
จน timeout
โดยใน code นั้นก็เรียก MetabaseSetSelectedRowRange ตามปรกติ คือ
MetabaseSetSelectedRowRange($database, 0, $n);
โดย $n รับค่ามาจาก $_REQUEST ธรรมดา ๆ นี่แหล่ะ
$n = $_REQUEST['n'];
และไอ้ที่ทำให้มีปัญหาก็คือไอ้ $_REQUEST ธรรมดานี่แหล่ะ - -"
(เพราะ PHP จะถือว่าค่าใน $_REQUEST เป็นข้อมูลชนิด string)
ประวัติโดยย่อของ PHP
Resource:
http://php.net/history
PHP/FI
PHP เกิดมาจาก PHP/FI ซึ่งสร้างขึ้นโดย Rasmus Lerdorf ในปี 1995
โดยมีรากฐานมาจาก Perl ในระยะแรก Rasmus ใช้ PHP/FI ในเวบส่วนตัวของเขา
PHP/FI เป็นชื่อย่อมาจาก Personal Home Page / Form Interpreter ได้รับการ Opensource
โดย Rasmus เพื่อให้ developer จากทั่วโลกสามารถนำมันไปพัฒนาและใช้งานต่อได้
ในปี 1997 ได้มีการเขียน PHP/FI 2.0 และเริ่มได้รับความนิยมเพิ่มขึ้นเรื่อย ๆ
เดือนพฤศจิกายนของปีนั้น PHP/FI 2.0 ได้ถูก release ออกมาให้ได้ใช้งาน แต่ก็อยู่ในลักษณะของ beta ซะมาก
Reference:
http://framework.zend.com/manual/en/coding-standard.html
อ้างอิงจาก Zend Framework Coding Standard
PHP File Formatting (รูปแบบทั่วไป)
- File ที่มีแต่ PHP code ให้เริ่มด้วย <?php และไม่ต้องปิดด้วย ?>
เพื่อป้องกัน space ที่เกินอยู่หลัง ?> ต่อท้าย output โดยไม่ตั้งใจ
- ย่อหน้า 4 space -- ห้ามใช้ Tab
- ไม่ควรให้บรรทัดยาวเกิน 80 ตัวอักษร แต่ในกรณีที่จำเป็น 120 ตัวอักษรก็ยังพอได้อยู่
- ให้ปิดบรรทัดด้วยตัวปิดบรรทัดแบบ UNIX (0x0A)
Naming Conventions (การตั้งชื่อ)
- Class ให้ขึ้นด้วยตัวอักษรใหญ่
Environment
- Fedora 9
- Use yum and pecl
Installation Steps
0. (Optional) Prerequisite packages
yum install php-pear yum install php-devel
1. Install ImageMagick development package
yum install ImageMagick-devel
2. Install imagick extension
pecl install imagick
3. Add following line to /etc/php.ini
extension=imagick.so
4. (Optional) Reload web server by
/etc/rc.d/init.d/httpd reload
Command-line
phpdoc -o HTML:frames:earthli -d lib,common,app -t docs
-o = Output template
-d = Input directories
-t = target directory
เรื่องมีอยู่ว่า ตอนนี้ผมกำลังทำ Framework สำหรับ Web application development อยู่ครับ
และตระหนักว่างาน Document ไม่ใช่งานเล็ก ๆ เพราะต้องทำให้ Programmer ทั้งองค์กรทำความเข้าใจและทำงานด้วย Framework นี้ได้
(พูดเหมือนว่ามีคนเยอะมาก... แต่ก็เอาเถอะ เดี๋ยวก็เยอะเองแหล่ะ ทำไว้ก่อนน่าจะดี อิอิ)
จึงเป็นเหตุให้ต้องลองหาวิธีการทำ Source code document ที่มีประสิทธิภาพ ไม่ต้องการเขียนอะไรซ้ำซ้อน ฯลฯ สรุปว่าหาแบบดี ๆ หน่ะ
และผมเป็นพวกชอบเผื่อไว้ว่าอยากจะแก้ไขอะไรเอง จึงชอบหา project Opensource มาใช้งาน ซึ่งเมื่อลองหาดูก็พบที่ค่อนข้างถูกใจอยู่ 2 ตัวคือ