วันศุกร์ที่ 18 กันยายน พ.ศ. 2552

Smarty Template Engine

Smarty คืออะไร

Smarty เป็น Template Engine ตัวหนึ่งซึ่งทำงานได้เร็ว ถูกต้องแม่นยำ Smarty เป็น Framework ซึ่ง ถูกสร้าง มาเพื่อ
Programmer และ template designer ให้ทำงาน รวมกันแบบแยก ส่วนการทำงานออกจากกัน การทำงานของ Smarty ใช้ tag ในการแทนที่ข้อความต่าง
ทำให้เราง่าย ต่อการพัฒนาหรือ แก้ไข โปรแกรม และ ง่ายต่อการ เปลี่ยนรูปแบบการแสดงผล โดยไม่ ต้องคำนึ่งถึงผลกระทบ ต่อ การ แสดงผลของเรา

Smarty มีคุณสมบัติอย่างไรบ้าง
เขียนแบบ OOP
Caching:
Configuration Files:
Security:
Easy to Use and Maintain:
Variable Modifiers:
Template Functions:
Filters:
Resources:
Plugins:
Add-ons:
Debugging:
Compiling:
Performance:

ดาวน์โหลด
http://smarty.php.net/download.php

การติดตั้ง Smarty
เมื่อ ดาวน์โหลดไฟล์ Smarty-x.x.xx มาแล้วให้ unzip ไฟล์ ออก จะได้
/libs และ folder อื่นๆ อีก แต่ไม่ต้องสน ใจ ให้ สนใจแค่ ข้อมูลต่างๆ ใน folder libs และห้ามแก้ไขไฟล์ ต่าง ใน folder นี้เด็ดขาด
ข้อมูลใน libs ซึ่ง เป็น Required Smarty library ตามนี้
Smarty.class.php
Smarty_Compiler.class.php
Config_File.class.php
debug.tpl
/internals/*.php (class การทำงาน ส่วนต่างๆ ของ Smarty )
/plugins/*.php (เก็บ class ที่เพิ่ม ความสามารถ ของ Smarty)
การอ้าง ถึง Smarty libs
ต้องกำหนด cunstant ชื่อ SMARTY_DIR ( defind('SMARTY_DIR', 'full system file path') )
ที่เรียกไปถึง libs/
แต่ถ้าโปรแกรมของ เรา สามารถหา ไฟล์ Smarty.class.php เราไม่จำเป็นต้อง กำหนด SMARTY_DIR ก็ได้

ตัวอย่างการเรียกใช้ Smarty ใน script php ของเรา เช่น
require_once('Smarty.class.php');
$smarty = new Smarty();
?>
ถ้ามี error ขึ้นจากการเรียก ใช้ Smarty แบบ ข้างบน ให้ใช้แบบ ระบ Full part เช่น

// *nix style (note capital 'S')
define('SMARTY_DIR', '/usr/local/lib/php/Smarty-v.e.r/libs/');

// windows style
define('SMARTY_DIR', 'c:/webroot/libs/Smarty-v.e.r/libs/');

// hack version example that works on both *nix and windows
// Smarty is assumend to be in 'includes/' dir under current script
define('SMARTY_DIR',str_replace("","/",getcwd()).'/includes/Smarty-v.e.r/libs/');

require_once(SMARTY_DIR . 'Smarty.class.php');
$smarty = new Smarty();
?>

Example 2-4. Supply absolute path to library file
// *nix style (note capital 'S')
require_once('/usr/local/lib/php/Smarty-v.e.r/libs/Smarty.class.php');

// windows style
require_once('c:/webroot/libs/Smarty-v.e.r/libs/Smarty.class.php');

$smarty = new Smarty();
?>
Example 2-5. Add library directory to PHP include_path
// Edit your php.ini file, add the Smarty library
// directory to the include_path and restart web server.
// then the following should work:
require_once('Smarty.class.php');
$smarty = new Smarty();
?>
เมื่อ เลือกแบบ การ เข้าให้งาน Smarty ได้แล้ว ต่อไป
มาดูสิ่งที่ Smarty ต้องการ ต่อ คือ
four directories ซึ่งมี default named 'templates/', 'templates_c/', 'configs/' and 'cache/'.
แล้วก็ ทำการ Setting file permissions
templates_c และ cache ให้ สามรถเขียนได้
เท่า นี้ เราก็ สามารถ เริ่ม ใช้งาน Smarty กันได้แล้ว
ต่อไป มาเรียนรู้การ ใช้ Smarty แบบ
- Smarty For Template Designers
- Smarty For Programmers กัน แท็ก Technorati , ,

วันพฤหัสบดีที่ 10 กันยายน พ.ศ. 2552

การติดตั้ง ioncube สำหรับ centos

ก่อนอื่นตรวจสอบ OS และเวอร์ชั่น php ของคุณก่อน
ต่อมาก็ไปเลือกไฟล์ที่ต้องการได้ที่   http://www.ioncube.com/loaders.php

ผมใช้ Centos  เลยเลือก Linux (x86-64)

จากนั้นก็ทำการโหลดไฟล์

#wget http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz

แตกไฟล์ซะ
#tar -zxvf ioncube_loaders_lin_x86-64.tar.gz

แล้วเข้าไปใน โฟลเดอร์ ioncube
#cd ioncube

ทำการ copy file ioncube-loader-helper.php  ไปวางยัง PATH ของเว็บไซต์ที่ต้องการใช้ ioncube ในโฟลเดอร์ scripts นั้นๆเลย
#cp ioncube-loader-helper.php  /home/test/domains/yourdomain.com/public_html/โฟลเดอร์สคริป/

ออกมาข้างนอก โฟลเดอร์ ioncube
# cd ..

แล้วทำการย้ายโฟลเดอร์ ioncube  ไปไว้ที่ /usr/local/
#mv ioncube /usr/local/

จัดการแก้ไขไฟล์ php.ini
#vi /usr/local/lib/php.ini     หรือ ถ้าใช้ DirectAdmin ก็เข้าไปแก้ไขที่ File Editor

เพิ่มบันทัดข้างล่างนี้เข้าไป แล้ว Save 
ที่ผมใส่ ioncube_loader_lin_4.4.so ลงไป เนื่องจากผมใช้ php4.4  ดังนั้นก่อน config ต้องเลือกใช้ให้ถูกตัว ถูกต้องด้วย

zend_extension = /usr/local/ioncube/ioncube_loader_lin_4.4.so

เสร็จก็ restart webserver
#service httpd restart

แล้วลองไปเปิด http://www.yourdomain.com/โฟลเดอร์สคริป/ioncube-loader-helper.php ดู รัน test ถ้าไม่มี Error อะไรก็ผ่าน
แท็ก Technorati ,

วันอังคารที่ 25 สิงหาคม พ.ศ. 2552

การ set up ให้เครื่องที่บ้านทำเป็น web ได้ โดยผ่าน router

เทคนิคนี้ใช้กะ router ที่ติด dynamic dns มาให้อยู่แล้ว แต่ถ้าหากใช้ modem adsl จำเป็นจะต้องลงพวกโปรแกรม dynamic dns เช่น โปรแกรมของเว็บ no-ip ที่ติดมาให้ใช้กับ no-ip.com เท่านั้น หรือถ้าเป็นตัวอื่นก็แนะนำ direct-update ตัวนี้ผมใช้เวิร์กและดีมากในช่วงพักหนึ่งที่เคยได้ทำโปรเจ็ค กรณีนี้ไม่มีอะไรมาก

1. อันดับแรกให้ไปสมัครเอา dynamic dns มาใช้งานก่อน ในที่นี้ขอใช้ dyndns ละกันง่ายสุด หรือถ้าอย่างเด็กๆหน่อยเค้าจะใช้ no-ip กัน รู้สึกจะเอาไปเปิด serv rag กันเยอะในช่วงหลายปีก่อน
เข้าไปก็จะเห็นหน้าดังกล่าว
003

2. จะเห็นช่องให้ใส่ ชื่อเว็บ ตัวนี้เป็นช่องใส่ชื่อเว็บที่เราขอเค้าใช้เป็น subdomain อีกที ตั้งชื่อเลย ตั้งเสร็จ มันจะมาหน้าต่อไป

004

3. หน้านี้ก็คือให้กรอกข้อมูลลงบริเวณด้านล่างซึ่งรายละเอียดคงไม่ต้องอธิบาย เมื่อกรอกเสร็จแล้ว เราก็จะมี domain สำหรับเป็นที่เข้ามายังเว็บเราที่อยู่ที่บ้าน
005

4. เข้าไปยัง router ทำการ login เข้าไป บทความนี้ใช้ Linksys WAG160N รุ่นจานดาวเทียมสุดสวย ทรงล้ำหน้า แต่ว่าห่วยแตก ถ้าไม่อัพ firmware นะครับพี่น้อง หากใครใช้รุ่นนี้ อย่าลืม upgrade เป็น firmware version 1.00.15 นะครับ ไม่งั้นหลุดกระจาย ( 12-13 นาทีหลุด)

001

5. คลิก ที่ setup เลือก เมนู DDNS แล้วเลือก dynamic dns ค่ายที่เราไปสร้างไว้ ในนี้มี DynDSN.org พอดี ก็จิ้มเลย แล้วก็ใส่ ชื่อ
User Name : ที่เราได้กรอกไว้ในข้อ 3
password :
และ domain ที่เราเลือกไว้ตอนสมัครตอนแรกในข้อ 2
เมื่อกรอกเสร็จ กด connect มันจะขึ้นข้อความมาว่า  connect successfull แสดงว่าเชื่อมต่อได้สำเร็จ

002

6. ยังไม่จบๆ ต่อไปก็ไปที่ การเซ็ท forward port เพื่อให้ เวลาคนที่จะเข้ามาสามารถทะลุ router เข้าไปยังเครื่องลูกข่ายได้

006

สังเกตที่ช่อง HTTP  จะเห็นว่า

ช่อง External Port 80
ช่อง Internal Port 80
เลือก Protocol เป็น TCP
ช่อง IP Address เลือกเป็นเครื่องลูกข่ายที่เราจะทำเป็น web server ในที่นี้ใช้ 192.168.1.33 แล้วติ๊ก Enable ให้สามารถใช้งานได้
จากนั้นก็ save change ได้เลย ไม่ต้อง reboot ถ้า upgrade เป็น 1.00.15 แล้วนะ

7. ขั้นตอนสุดท้าย ให้ทำการรันเครื่องลูกโดยเปิด web server ขึ้นมา บางคนอาจจะใช้ appserv บางคน xampp เมื่อรันแล้ว ก็ลองเข้าเว็บ ตามที่เราได้ตั้งชื่อไว้ http://xxx.homeip.net/  ถ้าหากเข้าได้ก็เป็นอันจบ แต่ถ้าหากไม่ได้ก็ให้รอสักพัก ระหว่างนี้มันอาจจะกำลัง update dns แต่ถ้าหากรอนานไปแล้วไม่ได้ก็แสดงว่า เป็นปัญหาที่การเซ็ท forward port ไม่ทะลุมาถึงเครื่องลูก หรือไม่ก็เครื่องลูก webserver ไม่ทำงานเป็นต้น

Knowledge from Plawan Projectแท็ก Technorati , , , ,

การ remove Child FLVPlayback component ใน Flash CS4

note ไว้กันลืม

function skipHandler(event:MouseEvent):void {
video.pause();
trace ("video paused");
removeChild(video);
trace ("video removed");
event.target.root.mcContainer.mcIntro.unload();
trace ("mcIntro Unloaded");
event.target.root.mcContainer.mcMenu.source = "mcMainMenu";
event.target.root.mcContainer.mcLarge.source = "mcBlankLg";
trace ("Menu and Main Loaded");
event.target.root.mcContainer.mcPlayers.moveBryzTallOver();
trace ("Players Moved");
}

import fl.video.*;
trace(FLVPlayback.VERSION);

video.addEventListener(VideoEvent.COMPLETE, endHandler);

function endHandler(event:VideoEvent):void {
//video.pause();
//trace ("video paused");
removeChild(video);
trace ("video removed");
event.target.root.mcContainer.mcIntro.unload();
trace ("mcIntro Unloaded");
event.target.root.mcContainer.mcMenu.source = "mcMainMenu";
event.target.root.mcContainer.mcLarge.source = "mcBlankLg";
trace ("Menu and Main Loaded");
event.target.root.mcContainer.mcPlayers.moveBryzTallOver();
trace ("Player Moved");
}

ให้สังเกตที่ removeChild() แล้วตามด้วย instance ที่เราสร้างขึ้นมา
note from SCGCD Projectแท็ก Technorati , , ,

วันจันทร์ที่ 17 สิงหาคม พ.ศ. 2552

การใช้ Regular Expression ใน PHP*

PHP** มีฟังชั่นที่ใช้ Regular expression อยู่ทั้งหมด 6 ฟังชั่น การใช้ฟังชั่นพวกนี้ เราต้องใส่ argument ที่เป็น Regular expression ฟังชั่นทั้ง 6 ก็ได้แก่:

· ereg: ใช้สำหรับค้นหา คำ หรือ ตัวอักษรที่มีในข้อความที่ต้องการ

· ereg_replace: ใช้สำหรับค้นหาคำ แล้วแทนที่ด้วยคำที่กำหนด

· eregi: ใช้เหมือนกับ ereg แต่ case sensitive นั่นคือ ถือว่า ตัวอักษรภาษาอังกฤษตัวเล็กและตัวใหญ่ (capital letters) เป็นคนละตัวกัน

· eregi_replace: ใช้เหมือนกับ eregi แต่ case sensitive

· split: ใช้ค้นหาคำที่กำหนด และคืนค่าในลักษณะ array

· spliti: ใช้เหมือนกับ split แต่ case sensitive



ทำไมจึงต้อง Regular expressions?

ถ้าท่านเขียนฟังชั่นเองเพื่อตรวจสอบข้อความต่าง ๆ ละก็ หันมาใช้ Regular expression ดีกว่า ลองสำรวจดูซิว่า ท่านทำสิ่งต่อไปนี้หรือไม่

· ท่านเขียนฟังชั่นเพื่อตรวจสอบทีละตัวว่า ในฟอร์มที่ผู้ใช้พิมพ์เข้ามา มีคำแปลกปลอม คำหยาบ หรือตัวอักษรบางอย่าง เช่น เครื่องหมาย @ ในอีเมล์ เป็นต้น

· ท่านเขียนฟังชั่นวน loop เพื่อตรวจสอบข้อความ และแทนที่คำที่พบด้วยคำที่กำหนด

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

ตัวอย่างที่ 1
<\?
function validateEmail($email) {

$isAtSymbol = strpos($email, "@");
$isDot = strpos($email, ".");
if($isAtSymbol && $isDot)
return true;
else
return false;
}
?\>

ตัวอย่างที่ 2
<\?
function validateEmail($email) {
return eregi('^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.([a-zA-Z]{2,4})$',$email);
}
?\>

ตัวอย่างแรก ดูเข้าท่าดี อ่านเข้าใจง่าย ทำงานเป็นขั้นตอน แต่ลองเปรียบเทียบประสิทธิภาพการทำงานกับตัวอย่างที่ 2 จะเห็นว่า แตกต่างกัน ตัวอย่างที่ 2 ใช้เพียงบรรทัดเดียวในการตรวจสอบอีเมล์ ในขณะที่ตัวอย่างที่ 1 ใช้ตั้งหลายบรรทัด

ตัวอย่างที่ 2 เรียกใช้ฟังชั่น ereg ถ้าหากว่า ตรวจสอบแล้วถูกต้อง ก็จะคืนค่าที่เป็นจริง แต่ถ้าตรวจสอบแล้วไม่เป็นไปตามที่ Regular expression ที่กำหนดไว้ ก็จะคืนค่าที่เป็นเท็จ
ตัวอย่างแรก ดูเข้าท่าดี อ่านเข้าใจง่าย ทำงานเป็นขั้นตอน แต่ลองเปรียบเทียบประสิทธิภาพการทำงานกับตัวอย่างที่ 2 จะเห็นว่า แตกต่างกัน ตัวอย่างที่ 2 ใช้เพียงบรรทัดเดียวในการตรวจสอบอีเมล์ ในขณะที่ตัวอย่างที่ 1 ใช้ตั้งหลายบรรทัด

ตัวอย่างที่ 2 เรียกใช้ฟังชั่น ereg ถ้าหากว่า ตรวจสอบแล้วถูกต้อง ก็จะคืนค่าที่เป็นจริง แต่ถ้าตรวจสอบแล้วไม่เป็นไปตามที่ Regular expression ที่กำหนดไว้ ก็จะคืนค่าที่เป็นเท็จ



รูปแบบ ไวยากรณ์ ของ Regular expression

รูปแบบของ Regular expression ที่ควรรู้จัก มีดังนี้



1. การกำหนดว่า ต้องเป็นตัวแรกของข้อความ:

เช่นเราต้องการตรวจสอบว่า คำที่กำลังตรวจสอบ ขึ้นต้นด้วยคำว่า “ความ” หรือไม่ เราจะใช้เครื่องหมาย ^ เพื่อระบุว่า ต้องขึ้นต้นด้วยคำคำนี้ ตัวอย่าง



อย่างนี้ ค่าที่ได้ คือ จริง หรือ true



อย่างนี้ จะได้ค่าที่เป็นเท็จ หรือ false เพราะ เรากำหนดให้ต้องขึ้นต้นด้วยคำว่า “ความ” แต่ในคำที่ให้ค้นหา ขึ้นต้นด้วยคำว่า “คน” จึงทำให้ค่าที่ได้เป็นเท็จ



2. การกำหนดว่า ต้องเป็นตัวสุดท้ายของข้อความ:

เราใช้เครื่องหมาย $ เพื่อดูว่า ข้อความที่จะค้นหานั้น ลงท้ายด้วยคำที่กำหนดหรือไม่





จะได้ค่าที่เป็นจริง เพราะ ข้อความที่นำมาค้น ลงท้ายด้วยคำว่า “ความ”



จะได้ค่าที่เป็นเท็จ หรือ false



3. การค้นหาตัวอักษร:

ถ้าต้องการระบุว่าจะต้องมีตัวอักษรจะเป็นตัวเลขหรือตัวอักษรก็ได้ แต่ไม่ใช่ช่องว่าง เราจะใช้ จุด เช่น



จะได้ค่าที่เป็นจริง



จะได้ค่าที่เป็นเท็จ เพราะสิ่งที่นำมาค้นหาไม่มีอะไรเลย



4. การกำหนดว่า อาจจะมีตัวอักษรที่กำหนดหรือไม่ก็ได้

เราใช้เครื่องหมาย * เพื่อบอกว่าอาจจะมีหรือไม่มีก็ได้







ทั้งสองตัวอย่าง จะให้ค่าที่เป็นจริง เพราะเครื่องหมาย * จะบอกว่ามีตัว “ก” หรือไม่ก็ได้

มีอีกวิธีหนึ่งที่จะระบุว่า ให้มีตัวอักษรนั้น ในคำหรือไม่ วิธีนี้เราจะใช้เครื่องหมาย ? เช่น



เป็นการบอกว่า คำที่นำมาค้นหา อาจจะมีตัว ก ไก่ หรือไม่ ก็ได้



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



5. การกำหนดให้มีตัวอักษรที่กำหนด อย่างน้อย 1 ตัว

เราใช้เครื่องหมาย + เพื่อระบุว่า จะต้องมีตัวอักษรนั้นอย่างน้อย 1 ตัว เช่น



จะได้ค่าที่เป็นจริง เพราะคำว่า “วิธีการทำงาน” มีตัว ก ไก่ รวมอยู่ด้วย โดยไม่บังคับว่าจะอยู่ที่ไหนในคำ



ตัวอย่างข้างต้นจะให้ค่าที่เป็นเท็จ เพราะคำว่า “วิธีทำงาน” ไม่มีตัว ก ไก่ อยู่เลย



6. การตรวจสอบช่องว่าง

การตรวจสอบช่องว่าง ให้ใช้ [[:space:]] หรืออาจจะใช้ “ “ แทนก็ได้ แต่การใช้ :space: ซึ่งเป็น class ของ Posix จะหมายความรวมถึง เครื่องหมายอื่น ๆ เช่น tab เครื่องหมายขึ้นบรรทัดใหม่ รวมทั้งการเว้นวรรคด้วย ตัวอย่าง



จะให้ค่าที่เป็นจริง แต่



จะให้ค่าที่เป็นเท็จ เพราะไม่มีช่องว่างเลย



7. การตรวจสอบเป็นช่วง

ถ้าต้องการตรวจสอบเป็นช่วง เราจะใช้เครื่องหมาย [ และ ] เพื่อคร่อมช่วงที่ต้องการ เช่น ต้องการระบุว่า ต้องเป็นระหว่างเลข 0 – 9 เท่านั้น เราจะเขียนว่า [0-9] ลองดูตัวอย่างต่อไปนี้




// กำหนดให้มีเฉพาะตัวอักษรภาษาไทยเท่านั้น มีตัวเลขที่เป็นภาษาไทยได้ แต่ห้ามมีตัวอักษรภาษาอังกฤษ

echo ereg("^[ก-๙]+$", "ทองจุล๐๑๒๓"); // ให้ค่าที่เป็นจริง



?>



ในกรณีของตัวอักษรภาษาไทย ถ้าจะกำหนดไม่ให้มีตัวเลข ต้องกำหนดค่า ระหว่าง ตัว ก ไก่ และ ไม้ตรี ถ้ากำหนดตั้งแต่ ตัว ก-ฮ จะทำให้มีสระไม่ได้ ซึ่งก็จะทำให้ไม่สามารถสะกดตัวเป็นคำได้อย่างสมบูรณ์



ขอให้สังเกตว่าในกรณีนี้ก็จะมีวรรคไม่ได้เหมือนกัน เพราะตัวอักษร ช่องว่าง หรือ space อยู่นอกขอบเขตที่กำหนด ถ้าจะให้มี ก็ต้องเพิ่มเข้าไป เช่น





ในกรณีตัวเลข ถ้าต้องการตรวจดูว่า ข้อความที่กำหนดมีเฉพาะตัวเลขเท่านั้น ไม่ว่าจะเป็นเลขไทย หรือเลขฝรั่ง ให้ตรวจสอบดังนี้



จะได้ค่าที่เป็นจริง เครื่องหมาย ^ แสดงว่าข้อความที่นำมาค้น ต้องขึ้นต้นด้วย เลข 0-9 หรือ ๐-๙ เครื่องหมาย + แสดงว่า ต้องมี จะเป็นช่องว่างมาเฉย ๆ ไม่ได้ และเครื่องหมาย $ แสดงว่า ต้องจบลงด้วยตัวเลขเช่นเดียวกัน



8. การจัดกลุ่มคำ หรือ ข้อความ

ถ้าต้องการจัดกลุ่มคำหรือข้อความให้ใช้เครื่องหมายวงเล็บ () คร่อม เช่น



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



9. การตรวจสอบเครื่องหมาย หรือ สัญลักษณ์พิเศษ

เนื่องจากใน Regular expression ใช้เครื่องหมายในไวยากรณ์ ดังนั้นถ้าเราต้องการจะให้ค้นหาเครื่องหมายดังกล่าวในข้อความที่กำหนด จึงจำเป็นต้องบอกให้โปรแกรมรู้ว่า เครื่องหมายที่ใช้นี้ ไม่ใช่เป็นส่วนหนึ่งของไวยากรณ์ ลักษณะนี้ เราเรียกว่าเป็นการ escaping เราจะใช้เครื่องหมาย \ ใส่ไว้หน้าตัวอักษรพิเศษ หรือ สัญลักษณ์นั้น ๆ เช่น \* เป็นการบอกว่า ให้ตรวจหาเครื่องหมาย * ในคำที่ส่งมาเพื่อค้นหา เป็นต้น ในกรณีที่ต้องการให้คำว่า ปรีชา ต้องขึ้นต้นด้วยเครื่องหมาย | เราทำดังนี้



ข้อความข้างบนจะให้ค่าเป็นเท็จ เพราะเรากำหนดให้คำว่า ปรีชา ต้องขึ้นต้นด้วย | ถ้าเปลี่ยนคำว่า ปรีชา สุขเกษม เป็น |ปรีชา สุขเกษม ก็จะได้ค่าที่เป็นจริง

ตัวอักษร หรือสัญลักษณ์พิเศษที่ต้อง escape มีดังนี้ ^, $, (, ), ., [, |, *, ?, +, \, และ {



10. สัญลักษณ์ของ Regular expression สรุปได้ดังนี้



^


คำ/อักษรที่อยู่หน้าเครื่องหมายนี้ ต้องเป็นคำขึ้นต้นของข้อความที่นำมาตรวจสอบเช่น “^การ” เป็นการกำหนดว่า คำที่นำมาตรวจสอบต้องขึ้นต้นด้วยคำว่า การ เช่น “การทำดี” “การบ้าน” เป็นต้น คำพวกนี้จะผ่านการทดสอบ



$


คำ/อักษรที่อยู่หน้าเครื่องหมายนี้ ต้องอยู่ตอนท้ายของข้อความที่นำมาตรวจสอบ เช่น “มา$” จะถือว่าคำต่อไปนี้ถูกตามเงื่อนไข “ตามา” “ขอขมา” หรือแม้แต่คำว่า “หมา” แต่คำว่า “ทำดี” จะไม่ผ่าน เพราะไม่ได้ลงท้ายด้วยคำว่า “มา” ตามเงื่อนไขนั่นเอง

+


คำ/อักษรที่อยู่หน้าเครื่องหมายนี้ ต้องมีปรากฏในคำที่นำมาตรวจสอบ อย่างน้อย 1 ตัว เช่น “ท+” จะถือว่าคำต่อไปนี้ผ่านการตรวจสอบ เช่น “ทองจุล” “วันทนา” “ถนนหนทางทุกแห่ง”

?


คำ/อักษรที่อยู่หน้าเครื่องหมายนี้ อาจะมีปรากฏในคำที่นำมาตรวจสอบ หรือไม่ก็ได้ ถ้ามีจะมีกี่ตัวก็ได้

“ก?ข+$” หมายถึง อาจจะมีด้วยตัว ก และอักษรตัวสุดท้ายต้องมีตัว ข อย่างน้อย 1 ตัว (เครื่องหมาย + แสดงว่ามีอย่างน้อย 1 และ เครื่องหมาย $ แสดงว่าเป็นตัวสุดท้าย)



*


เหมือนกับ ?

\s


ช่องว่าง หรือ whitespace



.


ใช้แทนตัวอักษรอะไรก็ได้

· “ก.[0-9]” หมายถึง ตัว ก ตามด้วยตัวอักษรอะไรก็ได้ และต่อด้วยเลขอารบิค เลข 0-9

· “^.{3}$” หมายถึง ต้องมีตัวอักษรเพียง 3 ตัวเท่านั้น เป็นตัวเลข ตัวอักษร ภาษาไทย ภาษาอังกฤษ ได้ทั้งนั้น

[ ]


ใช้ระบุตำแหน่งในคำว่า ในตำแหน่งนี้จะมีตัวอักษรอะไรได้บ้าง เช่น

* “[นร]” เป็นการกำหนดว่า คำที่นำมาตรวจสอบ ต้องเป็นตัว น หรือ ตัว ร เท่านั้นจึงจะผ่าน มีความหมายเช่นเดียวกับ “น|ร”
* “[ก-ค]” เป็นการบอกว่า คำที่นำมาจะต้องเป็น ตัว ก ข ค เท่านั้น เช่น ในกรณีเลขประจำตัวที่ขึ้นต้นด้วย ก ข หรือ ค เท่านั้น ถ้าพิมพ์ตัวแรกเป็นตัวอักษรตัวอื่นก็แสดงว่าพิมพ์ผิด เราจะเขียนได้ดังนี้ ^[ก-ค]
* “^[a-zA-Z]” เป็นการบอกว่า คำที่นำมาตรวจสอบต้องขึ้นต้นด้วยตัวอักษร จะเป็นตัวเล็ก คือ a ถึง z หรือ ตัวใหญ่ คือ A ถึง Z ก็ได้
* “[0-9๐-๙]%” เป็นการบอกว่า ให้มีตัวเลข 1 ตัว เลขอะไรก็ได้ เลข 0 ถึง เลข 9 เป็นได้ทั้งเลขไทยและอารบิค ต่อด้วยเครื่องหมาย %
* [ก-๙] ตัว ก ถึง ฮ รวมทั้งสระทุกตัว และ ตัวเลขไทย ๐ ถึง ๙
* [0-9๐-๙] เลข 0-9 ทั้งเลขไทยและฝรั่ง
* ^[0-9๐-๙]+$ ให้มีเฉพาะตัวเลข 0-9 เลขไทยหรือเลขฝรั่งก็ได้ แต่ห้ามมีตัวอักษรใด ๆ
* "^[กข]{3}[-][0-9]$" ขึ้นต้นด้วยตัว ก หรือ ข จำนวน 3 ตัว ต่อด้วยเครื่องหมาย – และจบด้วยตัวเลขอารบิค เลข 0-9 เช่น “กขก-5” “กกก-3” เป็นต้น สิ่งต่อไปนี้จะไม่ผ่านหรือเป็นเท็จ เช่น “กกกขข” เพราะ ตัวที่ 4 ไม่ใช้เครื่องหมาย – และตัวสุดท้ายไม่ใช่ตัวเลข “ขขข-๘” ตัวเลขสุดท้ายเป็นเลขไทย

ไม่ว่าตัวอักษร หรือสัญลักษณ์ใด ๆ ที่อยู่ภายในเครื่องหมาย [ ] จะกลายเป็นสัญลักษณ์ธรรมดา เช่น + กลายเป็นเครื่องหมายบวก แทนที่จะหมายถึงว่า ต้องมีตัวอักษรอย่างน้อย 1 ตัว

{ }


แสดงจำนวนครั้งที่ซ้ำกัน เช่น

* “กข{2}” หมายถึงให้มีตัว ข จำนวน 2 ตัว เช่น “กขข”
* “กข{2,} หมายถึงให้มีตัว ข อย่างน้อย 2 ตัว เช่น “กขขขข”
* “กข{3,5} หมายถึงให้มีตัว ข จำนวน 3-5 ตัวเท่านั้น คือ “กขขข” “กขขขข” และ “กขขขขข”

( )


ใช้รวมกลุ่มเข้าด้วยกันเป็นส่วนเดียวกัน เช่น

* “ก(ขค)*” หมายถึง ตัว ก และอาจจะตามด้วยตัว ขค หรือไม่มีตัว ขค ก็ได้ เครื่องหมาย * แสดงว่าจะมีหรือไม่ก็ได้
* “ก(ขค){1,5}” หมายถึง ตัว ก แล้วจะตามด้วย ขค จำนวน 1-5 ชุด เช่น “กขคขคขค” หรือ “กขคขค” ก็ได้

|


เสนอทางเลือกอย่างใดอย่างหนึ่ง เช่น

* “การ|ความ” เป็นการบอกว่า จะใช้คำว่า การ หรือ ความ ก็ได้
* “(ก|ขค)งจ” เช่น กงจ หรือ ขคงจ ก็ได้



^[1-9][0-9]*$


ขึ้นต้นด้วยเลข 1-9 และอาจจะต่อด้วย เลข 0-9 กี่ตัวก็ได้ ในกรณีนี้ ถ้าเป็นเลข 0 ก็จะไม่ผ่าน จะผ่านตั้งแต่ 1 2 3 4 ไปเรื่อย ๆ



^(0|[1-9][0-9]*)$


อาจจะขึ้นต้นด้วยเลข 0 หรือเลข 1-9 ก็ได้ และอาจจะต่อด้วยเลข 0-9 ในกรณีนี้ เราใช้ตรวจสอบการพิมพ์ที่เป็นตัวเลขตั้งแต่ 0 ขึ้นไป ถ้ามีตัวอักษร ก็จะไม่ผ่านการตรวจสอบ หรือ เป็นเท็จ นั่นเอง

^(0|-?[1-9][0-9]*)$


เหมือน ^(0|[1-9][0-9]*)$ เพียงแต่ ถ้าไม่ขึ้นต้นด้วยเลข 0 สามารถมีเครื่องหมาย ลบ ได้ หรือจะไม่มีเครื่องหมายลบ ก็ได้ เครื่องหมาย ? แสดงว่า จะมีหรือไม่มี ก็ได้

^[0-9]+(\.[0-9]+)?$


ขึ้นต้นด้วย 0-9 อย่างน้อย 1 ตัว และอาจจะมี จุดและต่อด้วยตัวเลข 0-9 อย่างน้อย 1 ตัว อย่างนี้ เป็นการบอกว่าจะทศนิยมหรือไม่มีก็ได้ (สังเกตเครื่องหมาย ? อยู่หลังกลุ่มทั้งหมดซึ่งอยู่ในวงเล็บ เป็นการบอกว่า กลุ่มนี้ คือ (\.[0-9]+) จะมีหรือไม่มีก็ได้) แต่จะมีแค่ จุดเฉย ๆ เช่น 15. อย่างนี้ไม่ได้ ต้องเป็น 15.2 หรือ 15.38 ก็ได้ (เพราะเครื่องหมาย + อยู่หลัง [0-9] แสดงว่า ตำแหน่งนี้ คือต่อจาก จุด ยังไง ๆ ก็ต้องมีตัวเลข 0 ถึง 9 อย่างน้อย 1 ตัว จะเป็น 2 ตัว 5 ตัว 10 ตัว ก็ได้)

^[0-9]+(\.[0-9]{2})?$


เหมือนข้างบน แต่บังคับว่า ถ้ามีทศนิยม ทศนิยมต้องมี 2 ตำแหน่งเท่านั้น เครื่องหมาย {} กำหนดว่าจะต้องมีซ้ำกี่ครั้ง

^[0-9]+(\.[0-9]{1,2})?$


เหมือนข้างบน แต่อนุญาตให้มีทศนิยม 1 หรือ 2 ตำแหน่ง สังเกตการเขียนตัวเลข ในระหว่างเครื่องหมาย { และ }



^[0-9]{1,3}(,[0-9]{3})*(\.[0-9]{1,2})?$


ต้องขึ้นต้นด้วยตัวเลข 0-9 หรือ อาจจะตามด้วยเครื่องหมาย คอมม่า และตัวเลข 0-9 อีก 3 ตัว และอาจจะต่อด้วยทศนิยม 1 หรือ 2 ตำแหน่ง

^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(\.[0-9]{1,2})?$


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



สรุป

คิดว่าเท่าที่ยกตัวอย่างมาก็คงจะพอเป็นสังเขป พอรู้จัก Regular expression และการใช้แล้ว สิ่งสำคัญอยู่ที่การคิดวิธีใช้ เช่นต้องการจะกำหนดเงื่อนไขอย่างไร เพื่อให้ได้เงื่อนไขที่เป็นจริง ข้อความที่ต้องการมีลักษณะอย่างไร เป็นต้น แต่ท้ายที่สุดแล้ว บางครั้งก็จำเป็นที่เราจะต้องตรวจสอบด้วยตัวเองอีกครั้ง การกำหนดเงื่อนไข ถ้าผู้ใช้เดาลักษณะเงื่อนไขได้ ก็สามารถที่จะพิมพ์หรือกำหนดข้อความให้ผ่านการกรองได้เหมือนกัน ดังนั้นดีที่สุดจึงต้องมีการตรวจสอบดูอีกครั้ง



* ความรู้พื้นฐาน: PHP เบื้องต้น และ การสร้าง function

** หมายเหตุ ใน PHP มีฟังชั่นที่เกี่ยวกับ regular expression อยุ่ 2 แบบ คือ แบบ Perl5 และแบบ Posix ในบทความนี้จะเอาเฉพาะแบบ Posix เท่านั้น ถ้าต้องการศึกษาแบบ Perl 5 ให้ดูที่ PHP.net

Credit : อ. ทองจุล ขันขาว

Form สำหรับ การส่ง Email ด้วยเอกสาร html และการตั้ง smtp

ข้อมูลสรุปนี้ไม่พร้อมใช้งาน โปรด คลิกที่นี่เพื่อดูโพสต์

วิธีการแก้ไขค่า session time สำหรับ Plawan Central Log

วิธีการที่ผมแก้ไขไฟล์ดังนี้ (อาจไม่ถูกหลักวิชาเอาเป็นว่าลองดูแล้วมันใช้ได้)
แก้ไขไฟล์ /etc/chilli/defaults ด้วยเครื่องมือ แก้ไขข้อความในที่นี้คือโปรแกรม pico หรือ nano
กดเมาส์ปุ่มขวา เลือกที่ Applications > Shells > Bash หรือใช้วิธี remote ด้วย ssh เข้าไปก็ได้เช่นกัน)
ตรวจดูไฟล์ใน /etc/chilli ดังนี้

$ ls /etc/chilli
ผล
defaults down.sh functions hs.conf local.conf main.conf up.sh www wwwsh

ก่อนแก้ไขไฟล์ ทางเชลล์ ต้องเปลี่ยนรหัสผ่านของ root ก่อน ด้วยคำสั่งดังนี้
$ sudo passwd
เปลี่ยนรหัสผ่านให้เรียบร้อย
จากนั้นให้เข้าด้วย root หากไม่เป็น root จะไม่สามารถแก้ไขไฟล์ได้
$ su root
มันถาม password ใส่เข้าไป จากนั้นพิมพ์

cp /etc/chilli/defaults /etc/chilli/defaults-dist //เพื่อสำเนาต้นฉบับเดิมไว้

แก้ไขบรรทัด ด้วยคำสั่ง pico /etc/chilli/defaults หรือ nano /etc/chilli/defaults

HS_DEFSESSIONTIMEOUT=0 # Default session-timeout if not defined by RADIUS (0 for unlimited)
HS_DEFSESSIONTIMEOUT=7200 # Default session-timeout if not defined by RADIUS (0 for unlimited)
HS_DEFIDLETIMEOUT=0 # Default idle-timeout if not defined by RADIUS (0 for unlimited)
HS_DEFIDLETIMEOUT=300 # Default idle-timeout if not defined by RADIUS (0 for unlimited)

กด Ctrl+O แล้วEnter เพื่อseve
แก้ไขเสร็จให้บันทึกไฟล์ แล้วรีบูตเครื่องคอมพิวเตอร์

credits : hackkub from plawan.comแท็ก Technorati , , , ,