0015 | PHP Email Validation

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

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

function checkEmail($email) {
if (eregi(“^[a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$]”, $email)) {
return false;
}

list($Username, $Domain) = split(“@”,$email);

if (getmxrr($Domain, $MXHost)) {
return true;
} else {
if (fsockopen($Domain, 25, $errno, $errstr, 7)) {
return true;
} else {
return false;
}
}
}

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

Tags: , ,

0014 | MySQL Replicate

* บทความนี้อ้างอิงและประยุกต์มาจากเว็บไซต์ต่อไปนี้
DNSThailand.com - เทคนิคการใช้ Replication ระดับสูงใน MySQL
CATTelecom.com - กิตติชน แม้นสมุทร [ejeepss] » Replicate MySQL 5.x

สืบเนื่องจาก entry ที่แล้ว
ก็เลยลองไปค้นๆ ข้อมูลเพิ่มเติมดูอีกหน่อยว่าเราลืมอะไรไปบ้าง
เพราะนึกได้ว่ายังไม่ได้ลองทำ MySQL Replicate เลย (ฮาๆ)
ประเด็นคือไม่รู้ว่ามันช้าที่ฐานข้อมูลรึเปล่า เพราะ debug ไม่เจอสาเหตุ
ก็เลยต้องลองทำเท่าที่ทำได้ไปก่อน

ขั้นต้นก็ต้องมี server 2 เครื่องขึ้นไปครับ
โดยสมมติเครื่องแรก ชื่อ web-slave
เครื่องที่สอง ชื่อ db-master

ก่อนอื่นมาที่เครื่อง web-slave สั่งติดตั้ง mysql server ตามนี้ครับ
* อ้างอิง Fedora 8 ครอบคลุม Fedora 4 - 9, CentOS 5.x รวมถึงสาย Redhat ทั้งหมดครับ

# yum install mysql-server

เสร็จแล้วเปิดแฟ้ม /etc/my.cnf เพิ่มเติมข้อมูลต่อไปนี้ครับ

server-id=2
master-host=10.0.0.2
master-port=3306
master-user=replicate
master-password=slavepassword
master-connect-retry=30
replicate-wild-do-table= %.%
report-host=10.0.0.1

(มันมาอีกละ สีฟ้าแดงเขียวนี่)
แก้ ip อะไรพวกนี้ให้ถูกนะครับ แล้วแก้ตัวแดงๆ ด้วย ตามที่ตั้งค่า

เครื่องนี้เสร็จและ กลับไปที่เครื่อง db-master ต่อ ก่อนอื่นต้องตั้งค่า username / password ก่อนครับ
โดยเข้าไปใน mysql query console (หรือที่ไหนก็ได้ที่สามารถตั้ง user ได้) แล้วรัน query ต่อไปนี้

mysql> GRANT REPLICATION SLAVE ON *.*
TO ‘replicate‘@’10.0.0.1‘ IDENTIFIED BY ‘slavepassword‘;

เสร็จแล้วออกมาสั่ง stop service mysql ได้เลยครับ แล้วก็แก้แฟ้ม /etc/my.cnf อีกนิดหน่อย ตามนี้ครับ

log-bin=mysql-bin
server-id=1
innodb_flush_log_at_trx_commit=1
sync_binlog=1
expire_logs_days=3
max_binlog_size=50M

ตรงนี้ปรับค่าตามความเหมาะสมนะครับ แล้วแต่ว่าจะเก็บ log กี่วันยังไง
โดยบรรทัดแรกสุดจะเป็น path + ชื่อแฟ้มที่ใช้เก็บ log (สามารถใส่ full path ได้ครับ เช่น /var/log/mysqld/binlog)
แล้วก็ย้ำว่าควรจะใส่ option สองบรรทัดด้านล่าง เพื่อป้องกัน hdd เต็ม (ฮา)
เคยเจอมาแล้วครับ เก็บ log เพลินไปหน่อย เศร้าเลย

ต่อจากนี้ก็ copy ข้อมูลจาก db-master ไปยังเครื่อง web-slave ครับ
ถ้าใน fedora/centos default install ก็อยู่ใน /var/lib/mysql
สั่ง tar ไปทั้ง folder เลยก็ยังไหวครับ (แต่ข้อแม้คือต้องเป็น mysql version เดียวกันนะ)

จากนั้นก็สั่ง service mysqld start ทั้งสองเครื่อง
แล้ว connect เข้า mysql ของเครื่อง db-master สั่ง query ต่อไปนี้ครับ

mysql> FLUSH TABLES WITH READ LOCK;

แล้วก็ connect เข้า mysql ของเครื่อง web-slave สั่ง query ต่อไปนี้ครับ

mysql> START SLAVE;

เท่านี้ก็เรียบร้อย ทีนี้ก็รอดูผลงาน… ถ้าเวิร์กจะเอาไปใส่เว็บ bitthai ด้วย (ฮาๆ)

Tags: , , , ,

0013 | เว็บโหด โคตรสยอง

เมื่อวานงานเข้าครับ
ติดตั้งระบบใหม่ทั้งเครื่อง เว็บบอร์ดใต้ดินแห่งหนึ่ง
เนื่องด้วยคนเข้าเยอะชิบหาย แถมเป็นเว็บบอร์ด SMF ซะด้วย

โจทย์มีมาให้ค่อนข้าง… เอ่อ… ระดับนึงละครับ
server 2 เครื่อง เครื่องแรก Core 2 Duo E6600 / RAM 3 GB
เครื่องที่สอง Core 2 Quad Q6xxx อะไรซักอย่าง จำรุ่นไม่ได้ / RAM 3GB

จะบอกว่ามันใช้งานหนักเอามากๆ
งานนี้ก็เลยต้องทดลองมันสารพัดวิธีเลยครับ

เริ่มจาก level แรกสุด apache + squid reverse proxy ไม่ผ่านเลยครับ (load avg 50.xx)
level ที่สอง เพิ่ม DNS Round Robin เข้าช่วย เอาเครื่อง DB มาช่วยรันเว็บด้วย ก็ยังไม่ผ่าน แต่ดีขึ้นหน่อยนึง (load เหลือ 30.xx)
level ที่สาม ลง memcache ช่วยระบบ session + SMF memcache ก็ไม่ผ่านอยู่ดี แต่ดีขึ้นใช้ได้ (load เหลือ ~25.xx)

level สุดท้าย เลิกใช้ apache ลบ squid ทิ้ง แล้วลง lighttpd 1.4 + mod fastcgi แทน
load average ลดลงมาเหลือประมาณ 5-6 แต่ page generation time ก็ยังไม่ค่อยจะน่าพอใจ
แบบว่าหน้า index พี่ซัดไป 300 KB เยอะโคดเลย

งานนี้ขอเวลาไปสัปดาห์นึง ต้องนั่งเฝ้าอีก เห้อ… ไหนจะงานรับน้องด้วย งิดๆๆๆ

เพิ่มเติมทางเทคนิค:

NFS service บน Fedora 7 เป็นต้นมา มีการเปลี่ยนแปลงชื่อ service นิดๆ หน่อยๆ
ทำเอางงกันใช้ได้ (ฮาๆ) ตามรายการต่อไปนี้ครับ

  • nfs ยังคงสภาพเดิม คำสั่งเดิมได้เลย
  • portmap เปลี่ยนชื่อไปเป็น rpcbind
  • เพิ่มเติม service nfslock ไว้ทำ nfs remote lock เวลาต้องการ lock access file ต่างๆ

ขั้นตอนการติดตั้ง nfs บน Fedora 8 ง่ายมากจนน่าตกใจ ดังนี้ครับ

# yum install nfs-utils

จบเลย คำสั่งเดียวสั้นๆ ง่ายๆ เลย
เสร็จแล้วก็ตั้งค่าให้รันตั้งแต่เริ่มเปิดเครื่อง (สำหรับเครื่อง nfs server เท่านั้น)

# chkconfig nfs on
# chkconfig nfslock on
# chkconfig rpcbind on

แล้วแก้แฟ้ม /etc/exports ตามคู่มือ (รายละเอียดค่อนข้างเยอะ ไว้ค่อยสาธยาย ง่วงมาก)
พร้อมด้วยการแก้ /etc/hosts.allow เพื่อเพิ่มความปลอดภัยให้แก่ nfs server
แก้เสร็จแล้วก็สั่ง start service ทั้งสามตัวได้เลย ตามลำดับต่อไปนี้

# service rpcbind start
# service nfs start
# service nfslock start

จากนั้นไปที่เครื่อง client ที่จะ mount nfs partition แล้วทดลองสั่งค้นหา partition ที่อนุญาตให้ mount ดู ตามนี้

# showmount -e 10.0.0.1

* กรุณาแก้ IP เป็น IP ของเครื่อง nfs server ของท่านครับ พอ list ได้ที่แล้วก็สั่ง mount ได้เลย

# mount 10.0.0.1:/path/to/exports /path/to/exports

กรณีการทำ load balancing แนะนำให้ mount ลงไปที่ path เดียวกันกับเครื่อง server ครับ
จะช่วยลดปัญหายุ่งยากลงได้เยอะ

Tags: , , ,

0012 | เพียงเธอ - icez

เมื่อกี้โพส entry ที่แล้วไป ก็เลยกลับไปอัดมาอีกเพลง
หลังจากที่หลอดเสียงผ่านการใช้งานมาอย่างหนักหน่วงตอนไปดูน้องๆ สันทนาการ
(เนื่องด้วยกรี๊ดแหกปากมากไปหน่อย) ตอนนี้ก็เลยกำลังแหบได้ที่

อยากจะขอบคุณที่รู้ใจ เข้าใจ สิ่งดีๆ ที่ให้มา
อยากจะขอบคุณที่สัญญา ว่าใจไม่มีวันห่างเหิน
กับคนหนึ่งคนที่ไร้วัน เวลา หมดกำลังจะก้าวเดิน
จากคนที่เคยเจ็บเหลือเกิน ที่ใจ กลับกลายเป็นเบิกบาน

ผ่านคืนวันโหดร้าย นานชั่วกาล
กลับมีคนห่วงใยกัน สุขใจทุกวันมีเธออยู่ข้างกาย
เริ่มรู้จักความหวาน กับรักลึกซึ้งหมดใจ
เริ่มรู้จักความหมายของคืนวัน

แค่คนหนึ่งคนกับหัวใจ ให้เธอหมดไปเลยที่ฉันมี
จะเป็นจะตายจะร้ายดี ไม่แคร์ ไม่เคยจะหวั่นไหว
จะมีแต่เธอที่แสนดี ร่วมทางตราบจนวันที่สิ้นใจ
หนึ่งวันจะนานสักเท่าไร ถ้าไกลห่างเธอไปสักวัน

ผ่านคืนวันโหดร้าย นานชั่วกาล
กลับมีคนห่วงใยกัน สุขใจทุกวันมีเธออยู่ข้างกาย
เริ่มรู้จักความหวาน กับรักลึกซึ้งหมดใจ
เริ่มรู้จักความหมายของคืนวัน

ให้เธอได้ยิน เสียงจากใจฉัน
ที่จะคอยบอกทุกคืนวัน ว่ารักเธอ….

ก็ผ่านคืนวันโหดร้าย นานชั่วกาล
กลับมีคนห่วงใยกัน สุขใจทุกวันมีเธออยู่ข้างกาย
เริ่มรู้จักความหวาน กับรักลึกซึ้งหมดใจ
เริ่มรู้จักความหมายของคืนวัน

เสียงใจฉันเอง ร้องเพลงให้เธอฟังอยู่
คือเสียงดังจากใจ ร้องเพลงที่ใครไม่อาจฟัง
เสียงใจฉันเอง ร้องเพลงให้เธอฟังอยู่
คือเสียงดังจากใจ ร้องเพลงที่ฟังเข้าใจเพียงเรา…

Tags: ,