Showing posts with label PHP. Show all posts
Showing posts with label PHP. Show all posts

11.10.13

One comand make Yii Controller

หลังจากเราติดตั้ง Yii framework ไปเรียบร้อยแล้ว สิ่งที่เราต้องทดลองทำเป็นอย่างแรก คือ สร้าง Controller ด้วยของเราเอง

ในการที่จะแสดงหน้าเพจ สักหนัาหนึ่งบน Yii Framework เราจะต้องสร้างไฟล์ที่เป็น controller หลังจากนั้น ก็กำหนด method ที่เป็น action เพื่อทำงานอะไรสักอย่าง จากนั้น ก็ส่งผลลัพธ์ไปแสดงที่ view
หากเราจะสร้างเอง ก็สามารถทำได้ แต่ จะต้องทำตามที่ Yii เขากำหนดมา นั่นก็คือ

สร้างไฟล์ controller โดยชื่อนำหน้าไฟล์ XXXcontroller.php จะเป็น controller id ในที่นี้คือ XXX และต้องสร้างไฟล์ไว้ใน /protected/controllers/
จากนั้นเขียน method ภายในไฟล์นี้ โดย method ต้องมีชื่อรูปแบบ  public function actionYYY(){......} ซึ่ง YYY คือ action id

จากนั้นจะต้องไปสร้่างไฟล์ที่เอาไว้แสดงผล หรือ render ข้อมูล ในที่นี้ผมเรียกว่า view file ก็แล้วกัน โดยจะต้องมีชื่อสอดคล้องกับที่กำหนดใน method render และจะต้องสร้างไว้ใน folder ที่ชื่อเดียวกันกับ Controller id (ในที่นี้คือ XXX)ที่อยู่ภายในโฟวเดอร์ /views/ อีกที ดังนั้น จะได้ path folder /views/XXX นั่นเอง
สรุปว่าใน actionYYY จะเป็นรูปแบบนี้

public function actionYYY()
{
    this->render('ชื่อ view file')

เวลาที่เราเรียกใช้งาน ก็จะเป็นรูปแบบนี้

http://localhost/myweb/index.php?r=XXX/YYY

โดยที่

r หมายถึง route หรือเส้นทางที่จะเป็นตัวบอกให้ controller เข้ามารับงานไปทำ
XXX คือชื่อ Controller id
YYY คือชื่อ action id

ซึ่งทั้งหมดนี้ เป็นขั้นตอนพื้นฐานเพื่อให้ได้หน้าเว็บ 1 หน้า ดูเหมือนจะเยอะ แต่ในแง่การพัฒนา และบำรุงรักษาโค๊ด ผมว่า Yii framework เขาทำไว้ดีแหละ

ประเด็นของหัวข้อนี้ ผมอยากจะบอกว่า มีวิธีในการสร้างหน้าเว็บบน Yii ได้เร็ว กว่าการสร้่างไฟล์ทั้งสอง สามไฟล์  โดยมีรูปแบบตามที่ผมได้บอกไว้แล้วข้างต้น ด้วยการใช้ Yiic.bat ครับ (สำหรับ Linux เราจะใช้ไฟล์ Yiic.php) ซึ่งจะทำกันบน command line console ครับ

อันดับแรกก็เปิด command line console ของเราก่อน แล้วก็เข้าไปที่ directory ทีเก็บโปรเจค yii ของเรา ในที่นี้ สมมติว่าชื่อ train ผมเก็บไว้ที่ D:\www\

cd D:\www\train

พอเราเข้าไปแล้ว ก็ให้เรียก yiic.bat ที่อยู่ใน /framework/ ภายใต้  yii directory ที่เก็บ framework ในที่นี้ ผมเก็บไว้ที่ yii-1.1.14

D:\www\train>D:\www\yii-1.1.14\framework\yiic shell

เราจะอยู่ใน shell ของ yii สังเกตว่า prompt จะเปลี่ยนไป

yiic shell

ต่อมาเราจะมาสร้าง controller สำเร็จรูปกันเลยครับ ด้วยคำสั่ง

controller [controller id] [action id]

ดังนั้น หากผมต้องการสร้าง controller id =  message และ action id ที่ชื่อ helloworl จะได้

yiic shell

ลองเช็คดูในโปรเจคใน Netbean เราจะเห็นไฟล์ถูกสร้างขึ้นมา

yii controller

ลองเรียกหน้าเว็บ http://localhost/train/index.php?r=message/helloworld ดูครับ

มันจะง่าย และชัวร์กว่า วิธีสร้างเอง นอกจาำกนี้ยังสามารถสร้าง model  form module อื่นๆ ได้อีก ลองพิมพ์ help ที่ shell ของมันครับ

อ่านเพิ่มเติม...

13.3.13

How to install ChartDirector on Linux Server

สำหรับการติดตั้ง php ChartDirector บน Linux Server มีขั้นตอนดังนี้
หลังจากเราได้ทำการ login ผ่าน ssh เข้าไปที่ web server ของเราแล้ว ให้เข้าไปที่ directory web root ของเราก่อน ในที่นี้ server ผม มี web root directory อยู่ที่ /var/www/html  

[root@host lib]#cd /var/www/html  
(ไม่ต้องพิมพ์ [root@host lib]# นะ)

จากนั้น ทำการดาวน์โหลดไฟล์ที่ถูกบีบอัดจากเว็บของ advsofteng.com ที่เก็บ ChartDirector ผมใช้วิธีก๊อปปี้ลิ้งค์จากหน้าเว็บ แล้วดาวน์โหลดด้วยคำสั่ง wget 

Copy link ChartDirector

[root@host html]# wget http://download2.advsofteng.com/chartdir_php_linux.tar.gz

รอสักครู่ (ใช้เวลาแปรผกผันตามความแรงของอินเตอร์เนตของเรา)

ซึ่งน่าจะได้ไฟล์ chartdir_php_linux.tar.gz อยู่ในโฟวเดอร์ที่เราอยู่ตอนนี้ (นั่นก็คือ /var/www/html )

แตกไฟล์ ด้วยคำสั่ง

[root@host lib]#gunzip chartdir_php_linux.tar.gz

แล้วตามด้วย

[root@host html]# tar xvf chartdir_php_linux.tar

ทีนี้ เราต้องก๊อปปี้ไฟล์ไลบรารี่ของ ChartDirector ไปไว้ที่ extension ไดเรกทอรี่ของ linux แต่ก่อนจะก๊อปปี้ไฟล์ไลบรารี่เหล่านั้น ต้องทำการเข็คก่อนว่า php มองเห็น  extension ไดเรกทอรี่ของ linux อยู่ที่ไหน ด้วยคำสั่ง

[root@host html]# php -r "phpinfo();" | grep extension_dir

จะได้
extension_dir => /usr/lib/php/modules/ => /usr/lib/php/modules/
sqlite3.extension_dir => no value => no value
[root@host html]#

ผมได้คำตอบว่า อยู่ที่ /usr/lib/php/modules/

ผมทำการก๊อปปี้ไฟล์ที่อยู่ในโฟวเดอร์  ChartDirector/lib/ ทั้งหมดไปไว้ที่ /usr/lib/php/modules/

[root@host html]# cp -R ChartDirector/lib/* /usr/lib/php/modules/.

จากนั้น จะต้องทำการกำหนดให้ php เรียกไฟล์ไลบรารี่ให้ตรงกับเวอร์ชั่นของ php  ซึ่งเราต้องทำการเช็คเวอร์ชั่น php ของเราก่อน ด้วยคำสั่ง php -v

[root@host modules]# php -v
PHP 5.3.3 (cli) (built: Jul  3 2012 16:40:30)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

ของผมเวอร์ชั่น 5.3.3 ซึ่งถ้าดูตามคู่มือของ ChartDirector แล้ว ผมจะต้องทำการกำหนดให้ php เรียก phpchartdir530.dll

Select ChartDirector library file version

ดังนั้น ผมต้องเข้าไปกำหนด extensionไฟล์ ใน php.ini ซึ่งใน linux จะเก็บไฟล์นี้ไว้ที่ /etc/php.ini 

เข้าไปแก้ไขไฟล์นี้ด้วยคำสั่ง

[root@host html]# vim /etc/php.ini

มองหาบรรทัด extension_dir="/usr/lib/php/modules/"
แล้วเพิ่มบรรทัด extension="phpchartdir530.dll"  ต่อท้ายบรรทัดดังกล่าว

ทำการบันทึกไฟล์ php.ini 

ทำการรีสตาร์ทเซอร์วิส apache เพื่อให้การกำหนดค่าของเรามีผล (บังคับใช้) ด้วยคำสั่ง /etc/init.d/httpd restart

[root@host html]# /etc/init.d/httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
[root@host html]#

ถ้าไม่มี Error ใดๆ ก็น่าจะสำเร็จ ให้ลองเปิดตัวอย่าง ChartDirector ของเรา ผ่านหน้าเว็บบราวเซอร์

http://ชื่อhostของเรา/ChartDirector/phpdemo/ น่าจะปรากฏตัวอย่างกราฟให้เราเห็น

ChartDirector Demo

ขอให้สนุกกับ ChartDirector ครับ

อ่านเพิ่มเติม...

7.12.12

Getting started Yii Framework เอากับเขาบ้าง

     ช่วงนี้ ศึกษาหลายศาสตร์เหลือเกิน web programming , linux programming , Embedded System ก็เอา ปนเป กันไปหมด ตามประสา คนชอบศึกษา แต่ไม่ได้เอาทำมาหากินเป็นเรื่องเป็นราวเท่าไหร่

     จริงๆ ผมก็เขียน PHP มาหลายปีแหละ ตอนที่เขียนแรกๆ ผมก็ยังวนลูปไม่เป็นเลย จะปริ้นท์ตาราง table ทีหนึ่ง ก็ hard code เลย ทำที่ละ row ที่ละ column ต้องสารภาพ ว่าทำแบบนั้นจริงๆ พอเริ่มเขียนมาเรื่อยๆ ก็ไม่ไหวแหละ ก็ต้องมาวนลูปเอา เพราะความที่มันทำแบบวิธีเก่าๆ ไม่ไหว มาถึงตอนนี้ ผมก็ว่าการเขียนโค๊ดที่ต้องคอย Include เอา Header.php , footer.php , menu.php เข้ามา ผมว่ามันก็น่าเบื่อไม่ใช่น้อย และก็อีกเช่นเคย ความอดทนของผมก็เริ่มหมดไป ในที่สุดต้องหาวิธีที่มันง่ายกว่านี้หน่อย

    ผมเคยพยายามที่จะลองใช้ tool ที่ gen template ให้ แต่ก็ไม่ไหว ไม่ถนัดเอาเสียเลย จนมาเร็วๆ นี้ ได้ยินชื่อของ Framework ตัวหนึ่งที่เค้าว่ากันว่า ช่วยให้งานของเรามีระบบมากขึ้น และสามารถขจัดปัญหาเรื่องการต้องมา maintenance โค๊ดในอนาคตได้ดีเลย เพราะมันเป็นการแยกส่วนของการ coding และการ design ออกจากกัน ซึ่งนั่นแหละเป็นสิ่งที่ผมตามหามานาน (หลังจากที่พยายามทำเองมาหลายครั้ง แต่ก็เละทุกครั้ง T_T )

Yii Framework

    Yii Framework เป็น PHP Framework ตัวหนึ่งในหลายๆ Framework ที่ช่วยให้นักพัฒนาโปรแกรม PHP สามารถทำงานได้อย่างสะดวก ภายใต้รูปแบบการพัฒนาโปรแกรมตามแบบฉบับของ Yii Framework ซึ่งออกแบบให้ Framework ทำงานแบบ MVC โดยแยกส่วนของการออกแบบ Design และ การ Coding ออกจากกัน นอกจากนี้ ยังทำให้ผู้ที่มาพัฒนาต่อนั้น ไม่เกิดความสับสนกับสไตล์ของแต่ละคน เพราะว่า ผู้ที่ใช้ Yii Framework จะต้องทำตามรูปแบบ Framework ตัวนี้ วางเอาไว้ ซึ่งทำให้เกิดทิศทางในการพัฒนาระบบใหญ่ๆ ไปในทิศทางเดียวกัน

Yii Framework MVC model

    Yii Framework เป็น Framework ที่ได้รับการจัดอันดับให้เป็น Framework อันดับหนึ่ง หลายปีซ้อน นั่นแหละทำให้ผม สนใจที่จะศึกษา Framework ตัวนี้ และหาหนทางที่จะนำมันมาใช้กับงานปัจจุบันของผมให้จงได้ เพราะผมทนไม่ได้กับการเขียนโค๊ดแบบเดิมๆ ของผมอีกต่อไปแล้ว :P

Yii Framework Performance

มาเริ่มกันเลยดีกว่า

- ก็เริ่มจากดาวน์โหลดโค๊ด จาก http://www.yiiframework.com/download/ เลือกเวอร์ชั่นที่ stable แล้ว
- แตกไฟล์ออก ใน webroot folder ของเรา (ซึ่งของผมเก็บไว้ที่ C:\AppServ\www ) จะเปลี่ยนชื่อโฟล์เดอร์หรือเปล่า ก็ตามแต่ใจ
- ทดลองเรียก http://localhost/yiiRoot/requirements/ เพื่อเช็คความพร้อมของระบบของเรา ซึ่งน่าจะไม่มี Failed สีแดง���กิดขึ้น
- สร้างเว็บโปรเจคของเราด้วย command line ครับ ผมเรียกคำสั่ง C:\AppServ\www>php yiiRoot\framework\yiic webapp myweb
- ผมได้โปรเจค myweb เก็บไว้ที่ webroot
- ทดสอบเรียกโปรเจคของเรา http://localhost/myweb/

สำเร็จแหละ ต่อไปก็เริ่มลุยกับโปรเจคได้เลย อ่าน manual , tutorial , แล้วก็ศึกษาเรื่อง OOP และ Array ของ PHP ให้ชำชอง

แล้วพบกันใหม่ครับ

อ่านเพิ่มเติม...

31.5.11

PHP command line ช่วยงานได้เยอะ




ช่วงนี้ ผมแทบไม่ได้เข้ามาอัพเดทบล๊อกนี้เท่าไหร่ เพราะกำลังง่วนอยู่กับการศึกษาไมโครคอนโทรลเลอร์ ผมว่ามันสนุกดี แล้วก็จับต้องได้ด้วย ติดตามกันได้ที่นี่ครับ www.123microcontroller.com

วันนี้ ผมเอาเทคนิคดีๆ ที่ผมใช้อยู่เป็นประจำในที่ทำงาน เนื่องจากงานของผม ในบางครั้งจะต้องยุ่งเกี่ยวกับการดึงดาต้าจาก Oracle เพื่อนำมาประกอบการพิจารณาทางสถิติอะไรบางอย่าง ผมมักจะเลือกที่จะใช้ภาษา PHP ที่ผมถนัดอยู่แล้ว เป็นตัวกลางในการติดต่อกับดาต้าเบส Oracle จริงๆ เราสามารถใช้ภาษา SQL สั่งคิวรี่ ข้อมูลจาก Oracle ผ่านโปรแกรม SQL Plus ได้ แต่ในบางครั้งข้อมูลที่เราต้องการดึงมานั้น มีการเชื่อมโยงข้อมูลต่างตารางกัน แล้วยังจะมีการคำนวณหรือกรองข้อมูลที่ไม่ต้องการออก หรือในบางครั้งอาจจะต้องมีการเปรียบเทียบข้อมูลทั้งหมดในแต่ละรอบก่อน แล้วจึงค่อยแสดงค่า ถ้าจะให้ทำการวนลูปด้วยภาษา SQL บอกได้คำเดียวว่ายาก (โดยเฉพาะ ผมก็ไม่เคยทำได้สักที)

ที่พูดมาทั้งหมดก็อยากจะบอกว่า ในบางครั้งการใช้ภาษาสคริปต์อย่างเช่น PHP ในการประมวลผลข้อมูล มันจะเป็นการง่ายกว่า การม��นั่งเขียนภาษา SQL เพื่อให้ได้คำตอบที่ต้องการในการคิวรี ข้อมูลภายในครั้งเดียว แต่ภาษา SQL ก็ยังเป็นส่วนที่จำเป็นอยู่ดี ไม่สามารถทิ้งไปได้ แต่เราจะใช้ในการดึงข้อมูลดิบ แล้วทำการส่งต่อให้ PHP ทำการประมวลผลต่อไป ซึ่งถ้าใครถนัด PHP อยู่แล้ว จะทำให้มองภาพของการไหลของข้อมูลออกได้อย่างง่ายดาย

จริงๆ ผมน่าจะเขียนเรื่องการ config PHP ให้ติดต่อกับฐานข้อมูล Oracle ก่อนนะ แต่ในเมื่อเกริ่นนำไว้แล้ว ก็เลยกะว่า เอาไว้เขียนวันหลังแล้วกัน เพราะมี plan จะเขียนเรื่องนี้ ให้เพื่อนที่ทำงานดูอยู่แล้วหล่ะ

กลับมาเรื่องที่ตั้งใจจะนำเสนอกันดีกว่า ในกรณี ผมต้องการให้ script ของผมทำงานเป็นเวลา โดยตั้งเวลาผ่านโปรแกรม system scheduler ซึ่งผมใช้เป็นประจำในการกำหนดให้สคริปต์ผมทำงานตามเวลาที่ตั้งไว้

sytem scheduler for php command line application ในส่วนของการใช้งานโปรแกรมนี้ ก็ไม่มีไรมาก ตามรูปเลยครับ แต่ส่วนสำคัญอยู่ตรงที่ parameter ครับ ผมขออธิบายก่อนดังนี้ เนื่องจากในสคริปต์นี้ ผมต้องการที่จะเขียนครั้งเดียว แต่สามารถทำงานได้หลายเงื่อนไข ผมจึงออกแบบให้โปรแกรมเป็นกลางๆ ไว้ก่อน โดยให้สามารถเปลี่ยนเงือนไขภายในได้จาก Argument ที่ผมส่งเข้าไปตามรูป แต่ในกรณีที่เพื่อนๆ ออกแบบสคริปต์ให้ทำงานแค่อย่างเดียวก็อาจจะไม่จำเป็นจะต้องทำการส่ง Argument เข้าไปเหมือนผมก็ได้ แล้ภายในสคริปต์ก็จะแตกต่างไปจากของผมด้วยเช่นกัน

ในการทำอย่างนี้ เมื่อโปรแกรมเราถูก Execute เมื่อเวลาได้ถูกกำหนดตามที่เราต้องการ สคริปต์จะถูกสั่งให้ทำงานผ่านหน้าต่าง dos โดยจะทำงานเป็นแบบ text mode แต่ก็ใช่ว่าโปรแกรมของเราจะดูด้อยค่าเหมือนหน้าต่างโปรแกรมทีกำลังรันอยู่เลย กลับกัน มันกลับมีพลังในการทำงานอย่างดีเยี่ยมต่างหาก เพราะเพื่อนๆ สามารถสั่งให้สคริปต์ทำการเขียนผลลัพธ์ลง text file หรือจะเป็นนำค่าที่ได้ย้ายไปเก็บค่าในดาต้าเบส MySQLอีกทีหนึ่งก็สามารถทำได้เช่นกัน ทั้งนี่ ขึ้นอยู่กับประสบการณ์ของแต่ละคนครับ

เรามาดูตัวอย่างสคริปต์นี้กันครับ

php command line script

มันเป็นตัวอย่างง่ายๆ เพื่อให้เพื่อนๆ ได้ทดลองกันก่อน เพื่อให้ได้เห็นผลลัพธ์ ก่อนการนำไปประยุกต์ใช้งานครับ ผลลัพธ์ที่ได้ก็คือ

PHP comman line output จะเห็นว่า argc[0] ตัวแรกจะเป็นชื่อไฟล์ที่เราสั่งให้ทำงาน ส่วน argument ที่เราส่งเข้าไปในสคริปต์จะเริ่มต้นที่ argc[1] ถ้าเรามี argument ที่มากกว่า 1 ตัว เราก็จะได้ argc[2].. argc[3]…argc[n] ไปเรื่อยๆ เพื่อนๆ ลองคิดต่อดูสิครับ ว่าโปรแกรมเราจะยืดหยุ่นขนาดไหน โดยที่เราสามารถส่งค่าเข้าไปโดยผ่านทาง command line ต่อๆเข้าไปได้อย่างนี้

ถ้าใครจะไม่ใช้โปรแกรม sytem scheduler แต่เพื่อนๆ อยากรันที่ dos prompt เลยก็ได้นะครับ ก็ทำเหมือนกัน ไม่ได้ต่างกันเลยครับ เราก็สามารถ execute สคริปต์ของเราผ่าน command line ได้เช่นกันครับ

image ลองๆ นำไปประยุกต์ใช้งานกันดูครับ แล้วเจอกันใหม่ในตอนหน้าครับ สวัสดีครับ

อ่านเพิ่มเติม...

30.9.09

CodeIgniter PHP Framework เครื่องมือช่วยให้งานเสร็จเร็วขึ้น

      คุณเป็นคนหนึ่งใช่ไหม ที่มีพลังมากมายมหาศาลในการเขียนโค๊ด PHP แบบ procedural แบบบ้าพลัง เขียนใหม่ทุกครั้งที่มีโปรเจคใหม่ โค๊ดเก่าๆ ทิ้งไป ก๊อปปี้มาใช้เพียงบางส่วน บางส่วนเอามาวางยาตัวเองอีกตั้งหาก เขียนโค๊ดทีนึงเป็นพันๆบรรทัด เวลากลับมาแก้ไขที แทบอยากจะเขียนใหม่ ถ้าอย่างนั้น คุณกับผมก็หัวอกเดียวกัน   แล้วเราจะทำยังงัยหล่ะทีนี้ ในที่สุดผมก็เจอผู้ช่วย “CodeIgniter” เค้าคือ PHP Framework (โค๊ด)เล็ก เบา ใช้งานง่าย แต่ประสิทธิภาพเกินตัว

CodeIgniter เป็นเครื่องมือที่ทรงประสิทธิภาพ เพื่อนำมาใช้ในการพัฒนาการเขียนเว็บแอปพลิเคชั่นโดย PHP จุดประสงค์หลักของ CodeIgniter Framework นั้นก็คือ ถ้าคุณมีงานที่จะต้องทำเป็นประจำ อย่างเช่น เขียนหน้าเว็บที่รับค่าจาก user โดยจะต้องสร้างฟอร์มขึ้นมา หรือจะต้อวงเขียนโค๊ดเพื่อจัดการตัวแปร Session หรือทำหน้าเว็บเพื่อให้ user ทำการ upload/download ไฟล์บางอย่าง แ��นที่เราจะต้องมานั่งเขียนโค๊ดเอง เราก็ใช้ CodeIgniter Framework แทน โดยเจ้าตัว CodeIgniter Framework มันมีเจ้าโค๊ดพวกนี้ และพวก Class ที่รองรับเรื่องพวกนี้อยู่แล้ว จะเห็นได้ว่า แค่เราปรับพฤติกรรมการเขียนโปรแกรมของเรา จากการเขียนโปรแกรมชนิดที่ต้องโปรแกรมเองทั้งหมด มาเป็นการเรียกใช้ Library หรือให้ใช้ class โดยศึกษาจากคู่มือ CodeIgniter เพียงเท่านี้ งานของเราก็จะเสร็จเร็วขึ้น หมดปัญหากับการวางยาตัวเองอีกต่อไป (เวลาเขียนโค๊ดเยอะๆ แล้วมันงงฉิบ)

CodeIgniter Feature

ในขณะที่ผมกำลังเขียนบทความ��ี้ ตอนนี้ CodeIgniter เค้าได้ออกเวอร์ชั่น 1.7.2 เรียบร้อยแล้ว ซึ่งในส่วนที่เพิ่มเข้ามาได้แก่

  • เข้ากันได้ดีกับ PHP 5.3.0 (ซึ่งโดยทั่วไป เค้ารองรับ PHP ตั้งแต่เวอร์ชั่น 4.3.2 ขึ้นไป )
  • เพิ่ม Class เกี่ยวกับ Shopping Cart เข้ามาด้วย (ถูกใจ คนที่ทำ e-commerce หล่ะทีนี้)
  • ปรับปรุงโดยเพิ่ม ส่วนของการช่วยเหลือในเรื่องการสร้าง form
  • เพิ่มคำสั่ง is_php('version_number') เอาไว้เช็คว่า runอยู่บน PHP เวอร์ชั่นอะไร
  • ปรับปรุงคำสั่ง show_error() ให้สามารถแสดง HTTP status ได้
  • แล้วก็แก้ไข Bug จากเวอร์ชั่นก่อนหน้านี้ (อันนี้เป็นเรื่องธรรมดา)

เพื่อนๆสามารถดาวน์โหลดได้ฟรีจากเว็บ CodeIgniter โดยตรง  image  Current Version

 

เหตุผลที่คุณต้องใช้ CodeIgniter :

* คุณต้องการเฟรมเวิร์คที่เรียนรู้ง่าย
* คุณต้องการประสิทธิภาพที่ยอดเยี่ยม
* คุณต้องการการรองรับกับโฮสพื้นฐานที่ถูกดำเนินการด้วย PHP หลากหลายรุ่นและการปรับแต่งที่ต่างกัน
* คุณต้องการเฟรมเวิร์คที่แทบจะไม่ต้องปรับแต่งค่าพารามิเตอร์ สำหรับการใช้งาน
* คุณต้องการเฟรมเวิร์คที่ไม่ต้องให้คุณใช้ Command Line
* คุณต้องการเฟรมเวิร์คที่ไม่ต้องยึดติดกับกฎการเขียนโค้ด
* คุณไม่สนใจไลบราีรี่ที่มีขนาดใหญ่มากอย่าง PEAR
* คุณไม่ต้องการถูกบังคับให้เรียนภาษาเทมเพลต (แต่เรามี template parser รองรับอยู่ ถ้าคุณต้องการ)
* คุณเหลีกเลี่ยงความสลับซ้อบซ้อน และชอบแก้ปัญหาด้วยวิธีง่ายๆ
* คุณต้องการเอกสารประกอบที่ละเอียดถี่ถ้วน

ข้อมูลจาก www.codeigniter.in.th

การทำงานของ CodeIgniter 

สมมุติว่าเราต้องการหน้าเว็บแอปพลิเคชั่น(สมมุติชื่อไฟล์ index.php) ซึ่งทำงานอะไรบางอย่าง เมื่อเรามีการเรียกใช้ CodeIgniter ในหน้าเว็บนั้น การทำงานจะเริ่มจาก หน้าใส่โค๊ดของเรา

CodeIgniter Work Flow

  1. หน้า index.php เป็นส่วนที่เราทำการออกแบบให้ไปเรียกใช้ CodeIgniter.
  2. Rounting : ตัว Router ทำการตรวจสอบ HTTP request กำหนดว่าควรจะทำอะไรกับมัน นอกจากนี้มันจะคอยตรวจสอบว่าข้อมมูลนี้เคยถูกเรียกใช้แล้วหรือยัง หากว่าเคยถูกเรียกใช้แล้ว มันจะไปดึงในส่วนของ Caching กลับไปให้ User ซึ่งตรงจุดนี้เองที่ทำให้ CodeIgniter Framework ทำงานได้เร็วกว่าการเขียนโค๊ดเอง
  3. Caching : ถ้ามีไฟล์แคชอยู่ ตัวมันจะถูกส่งกลับทันทีไปยังบราวเซอร์ โดยไม่ผ่านการทำงานปกติของระบบ
  4. Security : ก่อนที่จะโหลดตัวควบคุมของแอพพลิเคชั่น (Application Controller) HTTP request และผู้ใช้ใดๆที่ส่งข้อมูลมาจะถูกกรองข้อมูลเพื่อความปลอดภัย
  5. Application Controller : โหลดแบบจำลอง(Model) , ไลบรารี่หลัก(Libraries) , plugins, ผู้ช่วย (Helpers) และทรัพยากรอื่นๆที่จำเป็นในทำงานที่ถูกร้องขอมา
  6. สุดท้าย View ปฎิบัติงานและถูกส่งกลับไปยังบราวเซอร์เพื่อโชว์หน้าจอ ถ้าระบบแคชถูกใช้งาน หน้าจอจะถูกแคชก่อนแล้วจึงค่อยส่งสิ่งที่ร้องขอมาเป็นลำดับถัดไป

การติดตั้ง CodeIgniter Framework

ในส่วนของการติดตั้ง ผมยังไม่ได้ลองแต่ว่าผมได้ค้นหาข้อมูลในอินเตอร์เนตแล้ว เจอบทความเรื่องการติดตั้ง CodeIgniter ของคุณ “กิตติ เหมือนจันทร์แจ่ม” สำนักส่งเสริมและพัฒนาการเกษตรเขตที่ 2 จังหวัดราชบุรี ซึ่งผมเห็นว่าน่าจะละเอียดที่สุดแล้ว ก็เลยจะไม่ขอเขียนอธิบายในส่วนนี้ ให้เพื่อนๆไปอ่านจากนี้ได้เลยครับ ถ้ามีตรงไหนเพิ่มเติมผมจะมาเขียนเพิ่มในบล๊อกนี้แล้วกัน  คลิกดาวน์โหลด การติดตั้ง CodeIgniter

 

คู่มือการใช้งาน Codeigniter

ส่วนใครที่ไม่ค่อยถนัดอ่าน manual ภาษาอังกฤษ ไม่ต้องเป็นกังวลครับ ตอนนี้มีคนได้แปลคู่มือการใช้งาน CodeIgniter ออกมาเป็นภาษาไทยแล้ว ต้องขอขอบคุณ codeigniter.in.th ที่ทำให้เราทำงานได้ง่ายขึ้น เข้าไปอ่านคู่มือกันได้ที่นี่ครับ http://www.codeigniter.in.th/user_guide/index.html  เนื้อหา สารบัญอยู่ตรง tab ตารางเนื้อหาด้านบนครับ

CodeIgniter content ข้อมูลจาก www.codeigniter.in.th

จริงๆยังมีอะไรอีกมากมาย ไม่ว่าจะเป็นการใช้ Codeigniter กับ jQuery หรือกาารใช้ FormIgniter เพื่อ generate form เพื่อมาใช้กับ Codeigniter และยังมีลูกเล่นอื่นๆอีกมากมาย เอาไว้ให้เพื่อนๆไปศึกษาต่อกันเองครับ แต่ที่สำคัญของบทความนี้ ที่อยากจะยกให้เห็นว่า บางครั้งถ้ามันมี tool อยู่แล้ว เราก็ควรเลือกใช้และใช้ให้เป็น การใช้ tool ช่วย ไม่ได้หมายความว่า เราจะทำอะไรไม่เป็น คนที่ไม่ใช้ tool เลย เขียนเองทั้งหมด ก็ไม่ได้หมายความว่าคนนั้นจะเก่งเป็นเทวดา สุดท้ายแล้ว คนที่รู้จักจัดการและแก้ปัญหาต่างหากหล่ะ ที่ผมคิดว่าเค้าเก่งจริง วันนี้ก็ฝากไว้แค่นี้ก่อน สวัสดีครับ

อ่านเพิ่มเติม...

23.7.09

ตัวอย่างการใช้งาน ChartDirector (ตอนที่ 2)

     จากใน ตอนที่1 เราได้ทราบหลักการทำงานของ ChartDirector ไปแล้ว ขอสรุปให้ฟังอีกครั้งว่าการทำงานของ Chartdirector มันจะเริ่มจากตอนไหน ส่วนเพื่อนๆที่เพิ่งเปิดเข้ามา ยังไม่ทราบว่า ChartDirector ติดตั้งอย่างไร ขอให้กลับไปอ่านบทความ "มาสร้างกราฟให้ PHP ด้วย ChartDirector กันเหอะ" กันก่อนนะครับ  ส่วนตัว library ChartDirector ก็หาได้จากโฆษณาที่ขึ้นอยู่ตามเว็บนี้เลยนะครับ อันเดียวกัน ไม่ต้อง ไป search ไป  hack  ไป crack ที่ไหนหรอกครับ จัดหามาให้แล้ว

ขั้นตอนการทำงานคร่าวๆ
1. user ส่ง request เข้าไปหา web server โดยผ่านหน้าเว็บที่เราเขียน script PHP เอาไว้
2. Web server รับ request เข้ามาประมวลผล อาจจะทำการค้นหาข้อมูลที่ดาต้าเบส หรือ text file
3. PHP script ทำการสกัดข้อมูลออกมา เพื่อจัดข้อมูลก่อนส่งเข้าไปใน function ของ ChartDirector
4. ChartDirector ทำการส่ง output ออกมาเป็น image file สังเกตที่บรรทัดล่างสุดของตัวอย่าง ChartDirector
    header("Content-type: image/png");
    print($c->makeChart2(PNG));
5. Web server ทำการส่ง Respond กลับไปหา user ในรูปแบบ image

จริงๆแล้ว มันเหมือนกับเราเปิดดูรูป ตามเว็บที่เค้าทำ link ไว้ให้นั่นแหละ ต่างกันตรงที่ รูปที่เราเปิดนั่นมันสามารถเปลี่ยนแปลงได้ (dynamic) ตลอดเวลา ขึ้นอยู่กับเงื่อนไขที่ user ส่งเขาไปหา seerver ซึ่งทั้งหมดนี้  มันขึ้นอยู่กับการออกแบบและวาง algorithm ในการให้ script ทำงานตามที่เราต้องการ

ต่อไปเรามาลองสร้างตัวอย่างง่ายๆเพื่อให้เกิดความเข้าใจในการนำ ChartDirector ไปใช้งานกันดีกว่า โดยผมจะแยกการทำงานของ script PHP ออกเป็นสองฝั่ง แต่ script ทั้งหมดก็ยังอยู่บน server นะครับ อย่าสับสนนะครับ (เพราะ PHP เป็น server side script) โดยทั้งหมดวางไว้ตาม folder ที่ผมกำหนดไว้นะครับ แล้วก็เรียก http://localhost/simple/ เมื่อทุกอย่างถูกติดตั้งเรียบร้อยแล้ว

image

ก่อนอื่นขอแนะนำให้ไปสร้างข้อมูลไว้ในดาต้าเบสก่อนนะครับ แล้วจัดการเรื่องของ user/password ที่เอาไว้ connect กับดาต้าเบสให้เรียยบร้อย ให้เหมือนกับโค๊ดที่เขียนไว้ให้ดู ไม่งั้นมันจะรันไม่ออกนะครับ โดยเฉพาะ ถ้ามีการ error ใน file chart.php มันจะไม่โชว์ error ในบางครั้ง เพราะมันเป็นรูปภาพหน่ะครับ ให้ระวังตรงนี้ด้วย

โค๊ดในการสร้าง table สำหรับเก็บข้อมูล ผมเขียนนไว้ให้แล้ว เพื่อนๆสามารถนำไปวางไว้ที่ phpMyadmin ได้เลย หรือจะใช้ mysql front ก็ได้ ถนัดแบบไหนก็เลือกเลยนะครับ ในที่นี้ผมสร้างตาราง simple ไว้ในดาต้าเบส test ด้วย mysql front  ดูตามรูปประกอบนะครับ

image

โค๊ดการสร้างตาราง simple และใส่ข้อมูล

#
# Table structure for table 'simple'
#

CREATE TABLE IF NOT EXISTS simple (
  Xyear varchar(4) ,
  Xvalue int(6) unsigned DEFAULT '0'
);

#
# Dumping data for table 'simple'
#

INSERT INTO simple VALUES("1990", "1600");
INSERT INTO simple VALUES("1991", "1950");
INSERT INTO simple VALUES("1992", "850");
INSERT INTO simple VALUES("1993", "500");
INSERT INTO simple VALUES("1994", "800");
INSERT INTO simple VALUES("1995", "500");
INSERT INTO simple VALUES("1996", "450");
INSERT INTO simple VALUES("1997", "560");
INSERT INTO simple VALUES("1998", "630");
INSERT INTO simple VALUES("1999", "800");
INSERT INTO simple VALUES("2000", "1100");
INSERT INTO simple VALUES("2001", "1350");
INSERT INTO simple VALUES("2002", "1600");
INSERT INTO simple VALUES("2003", "1950");
INSERT INTO simple VALUES("2004", "2300");
INSERT INTO simple VALUES("2005", "2700");
INSERT INTO simple VALUES("2006", "630");
INSERT INTO simple VALUES("2007", "800");
INSERT INTO simple VALUES("2008", "1100");
INSERT INTO simple VALUES("2009", "1350");

ฝั่ง user
มีหน้าที่ในการส่ง request เข้าไป เราจะสร้าง หน้าเว็บขึ้นมา 1 หน้าเพื่อให้ user ส่ง request เข้ามา ในตัวอย่างนี้เราจะทำกันแบบง่ายๆนะครับ
ไฟล์ที่เกี่ยวข้องคือ index.php และ display.php มีโค๊ดดังต่อไปนี้

index.php :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Simple Bar Chart</TITLE>
</HEAD>

<BODY bgcolor="#CCFFFF">
<TABLE width="1003" border="1" cellspacing="0" cellpadding="0">
<TR>
    <TD height="100" align="center" bgcolor="#99CCFF">
    <FORM METHOD=GET ACTION='display.php' METHOD='GET' TARGET="FrameChart">
    <SELECT NAME="YEAR" width="200">
        <OPTION VALUE="1990">1990</OPTION>
        <OPTION VALUE="1991">1991</OPTION>
        <OPTION VALUE="1992">1992</OPTION>
        <OPTION VALUE="1993">1993</OPTION>
        <OPTION VALUE="1994">1994</OPTION>
        <OPTION VALUE="1995">1995</OPTION>
        <OPTION VALUE="1996">1996</OPTION>
        <OPTION VALUE="1997">1997</OPTION>
        <OPTION VALUE="1998">1998</OPTION>
        <OPTION VALUE="1999">1999</OPTION>
        <OPTION VALUE="2000">2000</OPTION>
        <OPTION VALUE="2001">2001</OPTION>
        <OPTION VALUE="2002">2002</OPTION>
        <OPTION VALUE="2003">2003</OPTION>
        <OPTION VALUE="2004">2004</OPTION>
        <OPTION VALUE="2005">2005</OPTION>
        <OPTION VALUE="2006">2006</OPTION>
        <OPTION VALUE="2007">2007</OPTION>
        <OPTION VALUE="2008">2008</OPTION>
        <OPTION VALUE="2009">2009</OPTION>
    </SELECT>
    &nbsp;&nbsp;&nbsp;<INPUT TYPE="submit" value="Click">
    </FORM>
    </TD>
</TR>
<TR>
    <TD height="400" bgcolor="#000099">
    <iframe id='FrameChart' name= 'FrameChart' width='100%' height='500' frameborder='0' src='display.php' scrolling='auto'></iframe>
    </TD>
</TR>
</TABLE>
</BODY>
</HTML>

display.php :

<?php

$year = $_GET['YEAR'];

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
</HEAD>

<BODY>
<TABLE width="100%">
<TR>
    <TD align="center">
        <IMG SRC="chart.php?YEAR=<?php echo $year;?>" BORDER="0">
    </TD>
</TR>
</TABLE>
</BODY>
</HTML>

ฝั่ง server รับ request จาก user แล้วไปค้นหาข้อมูลในดาต้าเบสแล้วทำการจัดข้อมูลส่งเข้าไปใน function ของ ChartDirector แล้วทำการวาดรูปส่งกลับมาให้ user (กลับมาที่หน้า display.php บริเวณที่เป็น iframe อีกครั้ง) ไฟล์ที่เกี่ยวข้องได้แก่ chart.php

chart.php :

<?php
require_once("../ChartDirector/lib/phpchartdir.php");

if(isset($_GET['YEAR'])){
    $year = $_GET['YEAR'];
}else{
    $year = date("Y");
}

$hostname = "localhost";
$user = "root";
$password = "merlin";
$dbname = "test";
mysql_connect($hostname,$user,$password) or die("Can't connect database ".mysql_error());
mysql_select_db($dbname) or die("Can't select database ".mysql_error());

$sql = " SELECT * FROM simple where Xyear <= '$year' order by Xyear asc limit 1,10 ";
$db_query=mysql_db_query($dbname,$sql);
$num_rows=mysql_num_rows($db_query);
for($i=0;$i<$num_rows;$i++){
    $row=mysql_fetch_array($db_query);
    $Ayear[] = $row['Xyear'];
    $Avalue[] = $row['Xvalue'];
}

# The data for the bar chart
$data = $Avalue;

# The labels for the bar chart
$labels = $Ayear;

# Create a XYChart object of size 600 x 380 pixels. Set background color to brushed
# silver, with a 2 pixel 3D border. Use rounded corners of 20 pixels radius.
$c = new XYChart(600, 380, brushedSilverColor(), Transparent, 2);

# Add a title to the chart using 18pts Times Bold Italic font. Set top/bottom margins
# to 8 pixels.
$textBoxObj = $c->addTitle("Annual Revenue for Star Tech", "timesbi.ttf", 18);
$textBoxObj->setMargin2(0, 0, 8, 8);

# Set the plotarea at (70, 55) and of size 460 x 280 pixels. Use transparent border
# and black grid lines. Use rounded frame with radius of 20 pixels.
$c->setPlotArea(70, 55, 460, 280, -1, -1, Transparent, 0x000000);
$c->setRoundedFrame(0xffffff, 20);

# Add a multi-color bar chart layer using the supplied data. Set cylinder bar shape.
$barLayerObj = $c->addBarLayer3($data);
$barLayerObj->setBarShape(CircleShape);

# Set the labels on the x axis.
$c->xAxis->setLabels($labels);

# Show the same scale on the left and right y-axes
$c->syncYAxis();

# Set the left y-axis and right y-axis title using 10pt Arial Bold font
$c->yAxis->setTitle("USD (millions)", "arialbd.ttf", 10);
$c->yAxis2->setTitle("USD (millions)", "arialbd.ttf", 10);

# Set y-axes to transparent
$c->yAxis->setColors(Transparent);
$c->yAxis2->setColors(Transparent);

# Disable ticks on the x-axis by setting the tick color to transparent
$c->xAxis->setTickColor(Transparent);

# Set the label styles of all axes to 8pt Arial Bold font
$c->xAxis->setLabelStyle("arialbd.ttf", 8);
$c->yAxis->setLabelStyle("arialbd.ttf", 8);
$c->yAxis2->setLabelStyle("arialbd.ttf", 8);

# Output the chart
header("Content-type: image/jpeg");
print($c->makeChart2(JPG));
?>

จริงๆตัวย่างที่ยกมาให้ดูนี้ มันค่อนข้างถึกๆ นิดนึง แต่สำหรับใครที่มือใหม่ จะได้มองออกหน่ะครับ ส่วนมือโปรก็ตามสบายครับ  ในส่วนของการใช้งาน ChartDirector ผมขอหยุด��ว้เท่านี้หล่ะกัน ก้ไม่น่าจะมีอะไรมาก พยายามดูที่ demo ที่ chartDirector ให้มา แล้วลองแก้ไขดัดแปลงดูครับ ขอให้สนุกครับ สวัสดีครับ

อ่านเพิ่มเติม...

17.7.09

ตัวอย่างการใช้งาน ChartDirector (ตอนที่ 1)

เห็นถามกันมามาก หลังจากที่บทความเรื่อง “ มาสร้างกราฟให้ PHP ด้วย ChartDirector กันเหอะ ” ก็เลยอดไม่ได้ที่จะไม่เขียนต่อ เพราะถามกันมาเยอะมาก เอาเป็นว่าเรามาดูวิธีการใช้งานจริงๆ (เพราะผมทำอยู่เป็นประจำ) ของ ChartDirector กันดีกว่า เอาแบบทีละขั้นตอน หมดไส้หมดพุงไปเลย แต่ต้องขอออกตัวไว้ก่อนนะครับ ผมไม่ได้เป็นโปรแกรมเมอร์แต่กำเนิด ฉะนั้นบางครั้งโค๊ดของผม มันจะดูถึกๆ ไปบ้าง แต่อย่าได้ไปมองสาระตรงนั้น ผมอยากให้มองแนวคิดการเขียนโปแกรม และการนำไปใช้งานมากกว่า ก็อย่างที่บอก เรามัน “โปรแกรมเมอร์(จำเป็น)” นี่ครับ  ถ้าใครยังไม่ได้ติดตั้ง ChartDirector ก็ให้กลับไปอ่านบทความ “ มาสร้างกราฟให้ PHP ด้วย ChartDirector กันเหอะ ” ก่อนนะครับ  ผมทดลองแล้วใช้ได้ ติดตั้งได้จริง ส่วนตัว library ของ ChartDirector ก็หาดาวน์โหลดได้จากแบนเนอร์ที่ขึ้นตามอยู่ในเว็บนี่แหละครับ ไม่ต้อง search หาเอาใหม่ เจ้าของบริษัทเค้ามาเอง รับรองของแท้ ไม่ต้อง crack ไม่ต้อง hack จัดไปอย่ามัวลังเล ให้เสียของ

เรามาเริ่มต้นด้วยแนวคิดที่ว่า ผมมีงานประจำที่จะต้องดึงข้อมูลจาก Oracle server จากของบริษัทตัวเอง ซึ่งเป็นดาต้าเบสหลัก ดาต้าเบสใหญ่ แล้วเข้ามาเก็บไว้ใน ดาต้าเบส Mysql แผนกของตัวเอง ซึ่งวันหลังผมจะมาอธิบาย การใช้ PHP ติดต่อกับ Oracle server โดยให้ PHP ทำงานแบบเป็น period ดึงข้อมูลมาเป็นระยะๆ ส่วนเจ้าของเว็บก็นั่งกระดิกนิ้วรอ  ผิวปากด้วยอย่าลืม อิอิอิ.

เผลอแพล๊บเดียว โม้อีกแหละ เอาเป็นว่า พอเราได้ข้อมูลจาก Oracle server แล้วมาเก็บใน MySQL server แล้ว (ในส่วนของการออกแบบฐานข้อมูลในการเก็บ ไม่ขออธิบายนะ) เราก็จะทำการดึงข้อมูลจาก Mysq ให้มาทำการแสดงผล ตาม condition ที่ user หรือผู้ใช้งาน ทำการกำหนดจากการคลิ๊กเลือกว่าจะให้แสดงข้อมูลจากวันไหน เลือกดูค่าใดบ้าง ค่าไหนไม่ต้องการ ซึ่งข้อกำหนดที่ได้จาก user นั้น เราจะเอาไปเป็นตัว select ข้อมูลจาก MySQL server โดยใช้ความรู้ด้านภาษา SQL (ภาษาที่เอาไว้ค้นหาข้อมูลในดาต้าเบส) เมื่อเราได้ข้อมูลจากการ query (ค้นหา)  แล้ว ซึ่งข้อมูลที่ได้มักจะมาในรูป array (ข้อมูลที่มีมิติ)  เราก็จะอาศัยการจัดและสกัดข้อมูลออกมาจะ for loop while loop  if elese  อะไรก็ตามแต่ แล้วจับยัดใส่ไปใน function  ของ  ChartDirector เพียงเท่านี้ เราก็จะได้รายงานที่เหนือชั้นบนหน้า web application (ปลายปี ก็รอเลื่อนตำแหน่งได้เลยครับ พี่น้อง ได้มาแล้ว 2 ขั้น)

อธิบายด้วยคำพูด อาจจะงง มาดูรูปภาพประกอบกันดีกว่า มีคนเค้าบอกว่า “รูปหนึ่งรูปอธิบายได้มากกว่าคำพูดล้านคำ” (อยากให้เป็นอย่างงั้นมั่งจัง แต่ google ไม่ชอบแน่ๆ)

database_structure รูปนี้ เป็นฐานข้อมูลที่ผมวางโครงสร้าง โดยอาศัยข้อมูลหลักจาก Oracle server แล้วเอาบางส่วนของข้อมูลที่ต้องการมาเก็บไว้ที่เครื่องตัวเองที่เป็น MySQL

ในส่วนของหน้า web application ซึ่งเป็นส่วนที่ต้องทำการโค๊ดโปรแกรม PHP script ลงไป เพื่อทำการดึงข้อมูลจาก MySQL server ตาม condition ที่ user เลือกจากหน้าเว็บ แล้วส่ง request เข้ามาที่ Appache server ของเราให้ทำการ query ข้อมูล ตามที่ user ต้องการอยากดู ตรงจุดนี้ เป็นการออกแบบหน้าตา web application ว่าจะให้ user สามารถเลือกอะไรได้มั่ง อะไรเลือกถูกบังคับให้เลือก ต้องอาศัยศิลปะ เข้ามาเกี่ยวข้อง เพราะเราต้องทำให้ user ใช้งานได้ง่าย ไม่เกิดความสับสน

imageรูปนี้แสดงให้เห็นกระบวนการในการสร้างรายงานที่เป็นกราฟ 

เดี๋ยววันนี้ขอจบกระบวนการสร้างไว้ก่อน คราวหน้ามาว่ากันต่อ เรื่องของโค๊ดล้วนๆ เหนื่อยแหละ แล้วก็ใกล้จะสอบแล้วด้วย ขอตัวไปอ่านหนังสือก่อนแล้วกันครับ

อ่านเพิ่มเติม...

25.6.09

มาสร้างกราฟให้ PHP ด้วย ChartDirector กันเหอะ

          ในการสร้างรายงานบนเว็บ application นอกจากการใช้ php ดึงข้อมูลจากดาต้าเบส Mysql มาแสดงผลเป็นตารางโชว์บนหน้าเว็บแล้ว เรายังสามารถที่จะสร้างเป็นกราฟ ได้อีกด้วย โดยกราฟที่เราสร้างนั้น จะเป็นรูปภาพ (นามสกุล png) ซึ่งเราสามารถเปลี่ยนแปลงกราฟได้ ตามข้อมูลที่เราส่งให้มัน  บางคนอาจจะใช้ graphics module (GD library) ในการสร้าง image แบบ dynamic แต่วันนี้ ผมขอนำเสนอ library ตัวนึง ที่ผมใช้อยู่ประจำ นั่นก็คือ ChartDirector for PHP ซึ่งเป็นของบริษัท Advanced Software Engineering ตัว library ของ ChartDirector ก็หาดาวน์โหลดได้จากแบนเนอร์ที่ขึ้นตามอยู่ในเว็บนี่แหละครับ ไม่ต้อง search หาเอาใหม่ เจ้าของบริษัทเค้ามาเอง รับรองของแท้ ไม่ต้อง crack ไม่ต้อง hack จัดไปอย่ามัวลังเล ให้เสียของ

Bar-Chart_ChartDirector

ไม่ว่าจะเป็นกราฟเส้น กราฟแท่ง กราฟวงกลม หรือแม้กระทั่งเอามาผสมกันระหว่างกราฟแท่งและกราฟเส้น พี่แกก็ทำได้หมด นอกจากนี้ ยังมีลูกเล่นประเภท java script อีก เวลาเอาเม้าท์ไปชี้ แล้วขึ้นข้อมูลตัวเลข ตัวหนังสือ ก็ทำได้นะค่อนข้างสะดวกเลยทีเดียว (ลองนั่งเขียนเองสิ ตาตั้งเลยหล่ะ) นอกจากนี้ ยังมีกราฟที่ออกแนวEngineering ด้วยนะ ตัวอย่างเช่น surface chart, contour chart,  ดูๆไปแล้ว น้องๆ MATLAB เลยก็ว่าได้

Surface-Chart_ChartDirector 

มีลูกค้าดังหลายๆเจ้า ที่ใช้ ChartDirector ไม่ว่าจะเป็น Dell, SONY, IBM, Intel, Samsung, Philips, …etc  อีกมากมาย นั่นก็เป็นตัวที่การันตีได้ระดับนึงที่เราจะเลือกใช้ผลิตภัณท์ของ ChartDirector  ลืมบอกไปว่าตัวที่เราดาวน์โหลดมานี้ มันเป็นตัวทดลองใช้นะครับ ซึ่งเค้าให้ใช้ได้ฟรี แต่จะมีแบนเนอร์ของเค้าติดมาด้วยที่ด้านล่างของกราฟ แต่ผมมีเทคนิคเล็กๆน้อยๆ ในการปิดแบนเนอร์ของเค้า ซึ่งจะทำให้เราดูเหมือนใช้ตัวเต็มครับ

     ผมได้ทำการติดตั้ง ChartDirector ลงบน The AppServ Open Project - 2.5.6 for Windows  ซึ่งมี PHP Script Language Version 5.1.4 ติดมาด้วย

    หลังจากเพื่อนๆ ได้ทำการติดตั้ง The AppServ Open Project - 2.5.6 for Windows ลงบนเครื่องของตัวเองแล้ว ให้ทำการไปดาวน์โหลด ChartDirector for PHP  (ลิ้งค์ทางขวามือครับ) ในที่นี้ ผมเลือก ChartDirector for PHP - Software and CHM Doc (ดูตามภาพประกอบนะครับ) เพราะจะได้คู่มือที่เป็นไฟล์ CHM มาด้วย เปิดอ่านง่ายดี

ChartDirector-for-PHP

ทำการ ดาวน์โหลดไฟล์ โดยไปวางไว้ที่ C:\Appserv\www\  เลยครับ  ซึ่งหลังจากที่เราดาวน์โหลดเรียบร้อยแล้ว ให้เราทำการ unzip ไฟล์ออก โดยเลือกให้แยกไฟล์ลงที่นี่เลยครับ มันจะสร้างโฟล์เดอร์ “ChartDirector” ให้เรา ซึ่งชื่อโฟล์เดอร์นี้ แนะนำให้เป็นชื่อนี้นะครับ มันจะได้ตรงกับใน script ไฟล์ข้างในเวลาที่เรา include เข้ามาจะได้ไม่มีปัญหา

     ขั้นตอนนี้เป็นการที่เราจะต้องทำการ config ให้ PHP รุ้จัก library ของ  ChartDirector ซึ่งขั้นตอนก็ไม่ได้ยุ่งยากจนเกินไปนัก ให้เราทำการ copy ไฟล์นามสกุล dll จากโฟล์เดอร์ C:\AppServ\www\ChartDirector\lib โดยไฟล์ dll ที่เราจะ copy นั้น จะต้องสัมพันธ์กับเวอร์ชั่นของ PHP ซึ่งสามารถดูได้จากตารางข้างล่างนี้ครับ ในที่นี้ผมได้ชื่อไฟล์ “ phpchartdir510.dll “ เพราะผมใช้ PHP version 5.1.4  ซึ่งติดตั้งอยู่บนระบบปฏิบัติการ Windows วิธีการดู version ของ php นะครับ ให้เขียนโค๊ดข้างล่างนี้ แล้ว save เป็นไฟล์ info.php (หรือไฟล์อะไรก็ได้ ที่จำได้) วางไว้ที่ C:\Appserv\www\ นะครับ แล้วเรียกที่ web browser ดูจะเห็น versionของ php (จริงๆแล้ว น่าจะเห็นตั้งแต่เราเรียก http://localhost แล้วหล่ะ )

<?php

phpinfo();

?>

PHP_version5.1.4

ChartDirector_list_dll

เราก็ทำการ copy file “phpchartdir510.dll”,”Chartdir.dll”,”phpchartdir.php” ทั้ง 3ไฟล์นี้ ไปวางไว้ที่ C:\AppServ\php5\ext (ซึ่ง path ตรงนี้ จะต้องเหมือนกับที่ config ไว้ใน php.ini ครับ)

File_ChartDirector   เมื่อเรา copy ไปวางเรียบร้อยแล้ว ให้ทำการเปิดไฟล์ C:\windows\php.ini ขึ้นมาด้วย notepad หรือ editor ตัวไหนก็ได้ แล้วทำการเพิ่มบรรทัด ลงข้างล่างต่อจากบรรทัดที่รวมรายชื่อ extension ทั้งหมดหน่ะครับ

;extension=php_pdo_sqlite.dll
;extension=php_winbinder.dll
extension=phpchartdir510.dll

แต่อย่าลืมเอาเครื่องหมาย “;” ออกหน้าบรรทัดด้วยนะครับ เพราะไม่งั้นจะกลายเป็นการ comment บรรทัดนั้นไป ซึ่งจะไม่ทำให้เกิดอะไรขึ้น  เมื่อเราวางแล้วก็ให้ทำกา save ไฟล์แล้วปิดไฟล์นั้น หลังจากนั้น ก็ให้ทำการ restart apache หนึ่งครั้ง ถ้าไม่มีข้อความอะไรโชว์ error ก็แปลว่า เราสามารถติดตั้ง extension ใหม่ได้สำเร็จ

      จากนั้นให้ทดลองเปิด IE ขึ้นมา แล้วเรียกไปยัง http://localhost/ChartDirector/phpdemo/ เพื่อทดลองดูว่า มันสามารถเรียกใช้ ChartDiretor ได้ไหม แล้วก็ลองเรียกหน้า page demo ขึ้นมาสัก page นึง ถ้าปรากฏกราฟขึ้นมา ก็แปลว่าเราทำสำเร็จแล้ว ขั้นต่อไปก็แค่ ดูตัวอย่าง source code แล้วทำการ modify ตามตัวอย่างเลยครับ แค่นี้ หน้าweb application ที่เคยรายงานตัวเลขเป็นตาราง ก็จะสามารถรายงานเป็นกราฟได้ด้วยครับ ดูมีราคาขึ้นมาเยอะ

     เวลานำไปใช้งานนะครับ ตรงนี้เป็นเทคนิคของผมเองครับ ผมมักจะใช้ iframe เป็นตัวกำหนดตำแหน่งการวางรูป (ลืมบอกไปครับ เวลาที่เราแทรก script การสร้างกราฟ output ที่ได้จะเป็น image นะครับ ดูได้จาก header ไฟล์ของมัน )

<td  align='center'>

     <iframe marginheight=0 frameborder="0" marginwidth=0 scrolling=no src="graph/count_bar.php?DD=<?php echo $DATE?>" name="graph"
                style="position:relative; width:960px; height:200px; visibility: visible; z-index:1;">
                Iframes are not supported by this browser.
     </iframe>
</td>

แล้วผมก็ไปกำหนดค่า $c = new XYChart(980, 215,0xFFFFFF ,0xffffff,1); ให้มันมีขนาดใหญ่กว่า iframe ของผมเล็กน้อย เพียงเท่านี้ คุณก็จะได้กราฟที่ไม่มีแบนเนอร์มาแสดง เป็นงัยหล่ะครับ แจ่มไหม

Bar-Chart-Sample

วันนี้ก็ขอจบเพียงเท่านี้หล่ะกัน คราวหน้าเรื่อง “ตัวอย่างการใช้งาน ChartDirector (ตอนที่ 1)

อ่านเพิ่มเติม...
 

เกี่ยวกับฉัน(ไหมเนี้ย)

รายการบล๊อกอื่นๆ

  • Solved: error: 'TKD2' was not declared in this scope, LIFA_Base compile error - วันนี้ จะมาเล่าถึงปัญหาที่เจอในการเบิร์นโค๊ด LIFA_Base ที่เราใช้ในการทำให้ Arduino ของเราสามารถรับคำสั่งจาก LabVIEW ได้ ปัญหานี้ เริ่มเกิดขึ้นตอนที่ Ard...
  • Type-Fu : Typing practice game online - หากใครที่สนใจ หรือจะต้องทำงานเกี่ยวกับคอมพิวเตอร์ หนึ่งในความจำเป็นก็คือ จะต้องเรียนรู้ที่พิมพ์สัมผัสได้ เพราะการที่พิมพ์สัมผ้สได้ มันได้ประโยชน์หลายๆ อย...

Blog อื่นๆ ที่น่าติดตาม

เหล่าบรรดา Blogger