php

PHP : Late Static Binding

หลังจากอ่าน 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/

PHP Blog : อายุของ session ที่แท้จริง เมื่อมีการตั้งค่า session.gc_maxlifetime

วันนี้ได้ทดสอบการใช้ค่า 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 วินาที

PHP: Performance tips

Tip จากพี่ใหญ่ใจดี Google ครับ
ต้นฉบับ: http://code.google.com/speed/articles/optimizing-php.html
ผู้เขียน: Eric Higgins, Google Webmaster

PHP Performance Tips

  • อย่า copy ตัวแปรอย่างไร้ประโยชน์
    ในบางครั้งมือใหม่ PHP จะพยายามทำให้ code ดูสะอาดอ่านง่ายขึ้นด้วยการ copy ค่ามาใส่ตัวแปรที่ชื่อสั้น ๆ ซึ่งทำให้เปลือง memory เพิ่มขึ้นอีกเท่าหนึ่ง และแน่นอนทำให้ช้าลงด้วย จากตัวอย่างด้านล่าง ถ้า user ส่ง description ขนาด 512kB เข้ามาทาง textarea จะทำให้กิน memory ถึง 1MB เลยทีเดียว
    BAD: $description = $_POST['description']; echo $description;
    

PHP: ข้อควรระวังในการใช้ MetabaseSetSelectedRowRange

ปัญหาและการวิเคราะห์
วันนี้เจอ bug แปลก ๆ นั่นคือการใช้งานคำสั่ง MetabaseSetSelectedRowRange
ที่อยู่ใน Metabase library เพื่อจำกัดจำนวนของข้อมูลที่ต้องการ
แต่ดูเหมือนว่าจะใช้ไม่ได้ เพราะ query นานมาก นานเหมือน query มาทั้งหมด
จน timeout

โดยใน code นั้นก็เรียก MetabaseSetSelectedRowRange ตามปรกติ คือ

MetabaseSetSelectedRowRange($database, 0, $n);

โดย $n รับค่ามาจาก $_REQUEST ธรรมดา ๆ นี่แหล่ะ

$n = $_REQUEST['n'];

และไอ้ที่ทำให้มีปัญหาก็คือไอ้ $_REQUEST ธรรมดานี่แหล่ะ - -"
(เพราะ PHP จะถือว่าค่าใน $_REQUEST เป็นข้อมูลชนิด string)

Brief History of PHP

ประวัติโดยย่อของ 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 ซะมาก

Common Practice: PHP Programming

  • เรียก exit() หรือ die() ทุกครั้งหลังจากสั่ง header('Location: ...'); เพื่อ redirect ทันที (แต่ถ้ายังต้องการการ execute คำสั่งต่อไปจนจบ ก็ไม่จำเป็นต้อง exit)
  • ในกรณีที่มีการ require file อื่นที่เป็น library รวม และใน script ของเรา ต้องการสร้าง function ขึ้นมาใหม่ ควรใช้ function_exists เพื่อตรวจสอบการซ้ำก่อน

PHP Coding Standard

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 ให้ขึ้นด้วยตัวอักษรใหญ่

ImageMagick for PHP development

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

How to use phpDocumentor

Command-line
phpdoc -o HTML:frames:earthli -d lib,common,app -t docs

-o = Output template
-d = Input directories
-t = target directory

มือใหม่ (อีกแล้วเหรอ) หัดใช้ PHPDocumentor

เรื่องมีอยู่ว่า ตอนนี้ผมกำลังทำ Framework สำหรับ Web application development อยู่ครับ
และตระหนักว่างาน Document ไม่ใช่งานเล็ก ๆ เพราะต้องทำให้ Programmer ทั้งองค์กรทำความเข้าใจและทำงานด้วย Framework นี้ได้
(พูดเหมือนว่ามีคนเยอะมาก... แต่ก็เอาเถอะ เดี๋ยวก็เยอะเองแหล่ะ ทำไว้ก่อนน่าจะดี อิอิ)

จึงเป็นเหตุให้ต้องลองหาวิธีการทำ Source code document ที่มีประสิทธิภาพ ไม่ต้องการเขียนอะไรซ้ำซ้อน ฯลฯ สรุปว่าหาแบบดี ๆ หน่ะ
และผมเป็นพวกชอบเผื่อไว้ว่าอยากจะแก้ไขอะไรเอง จึงชอบหา project Opensource มาใช้งาน ซึ่งเมื่อลองหาดูก็พบที่ค่อนข้างถูกใจอยู่ 2 ตัวคือ

Syndicate content