Posts Tagged ‘PHP’

Apache 2.0 - Name Base VHost

Posted by อัทศักดิ์ วงศ์กิตตะ on Tuesday, July 22nd, 2008

พอไปอ่านกระทู้ใน thaibsd.com เลยกะต่อยอดเล็กน้อย หลังจากที่ติดตั้ง “Apache2.0 + PHP5 on FreeBSD” ก็ถึงครามาทำ Name Base Vhost ในรูปแบบของผม พูดถึงเรื่อง Vhosts มันทำได้หลายแบบ แต่ที่เราทำกันบ่อยๆก็ Name Base Host และ IP Base VHost

อะไรคือ “Name Base Vhost” ขอกล่าวถึง HTTP Protocol ละกันครับ เวลาที่ IE, Firefox ในเครื่องเ้้ราซึ่งเค้าเรียกรวมกันว่า Browser เข้าไปเว็บๆหนึ่ง เช่น เข้าไปที่ http://howtoconfig.com/index.php Browser ของเราก็จะสร้าง tcp connect ไปยัง IP ปลายทาง port 80 และส่ง
คลิกที่นี่เพื่อดูส่วนที่เหลือ »

Split MySQL Query แยก RO/RW

Posted by อัทศักดิ์ วงศ์กิตตะ on Sunday, June 8th, 2008

วันนี้มีปัญหาขึ้นมาครับ เนื่องจาก MySQL Cluster ที่ใช้งบานนั้นลองทดสอบความเร็วแล้วสู้ MySQL แล้วใช้ Local Engine ไม่ได้เลย งานนี้เลยต้องหาทางออกครับ ผมเลยไปมอง เรื่อง MySQL Replication หลังจาก Setup และ Tuning เสร็จ ก็มาลองทดสอบความเร็ว มัน Query เร็วกว่า MySQL Cluster หลายเท่าเลยครับ

ทีนี้ก็มาดูเรื่อง Codeing ปัญหาคือมันเป็นโปรแกรมที่เค้าเขียนมานานละ ผมเข้าไปแก้อะไรไม่ค่อยได้ หรือถ้าแก้จริงๆ อยาจจะเป็น Bug อีกก็ได้ คิดไปๆมาๆ อ่าเจอทางออกแล้ว

ปัญหา
- MySQL Cluster ช้า ต้องไปใช้ MySQL Replication แทน
- ไล่แก้ Code ลำบาก เพระา code ค่อนข้างมาก
- Query ต้องเร็วและเพิ่ม MySQL Server ได้ในอนาคต

ทางแก้
- MyQL-Proxy ส่วนนี้ผมลองเอามาใช้แล้วครับ ลอง Query ดูมันก็ยังช้ากว่า Connect เข้า DB ตรงๆถึง 5 - 10 เท่า
- Edit Query ผมเลือกทางนี้ครับ แต่มันมีวิธีลักไก่หน่อย แนวคิดคือต้องไม่ไปยุ่งกะ Code มาก ผมเลยทำการสร้าง php function ใหม่ขึ้นมาครับ โดยทำหน้าที่ check sql ก่อนที่จะ Query ว่าเป็น SELECT, UPDATE, INSERT, DELETE แล้วให้ function ที่สร้างขึ้นมา เลือกที่จะไป query กะ mysql เครื่องไหน

1. สร้าง function mysql_do_query

function mysql_do_query( $sql, $count_rw=null)
{
	global $conn_ro, $count_rw, $count_ro;
	if ( ! empty( $sql))	
	{
		if ( ereg("^SELECT(.*)", strtoupper( $sql)))
		{
			$count_ro++;
			return mysql_query( $sql, $conn_ro);
		} else {
			$count_rw++;
			return mysql_query( $sql);
		}
	}
}

2. ทำการ edit *.php แล้วทำการ replace mysql_query -> mysql_do_query โดยผมใช้ คำสั่ง sed ใน shell script เพื่อแก้ไขไฟล์

#!/bin/bash
for fl in *.php; do
mv $fl $fl.old
sed 's/mysql_query/mysql_query/g' $fl.old > $fl
rm -f $fl.old
done

เสร็จแล้วก็รันครับ shell script จะทำการ find หา *.php แล้วทำการเปลี่ยน function ให้ ต่อไปเวลา ให้ programmer เขียน codeing ก็ให้ทำการ ใช้ function mysql_do_query() แทนครับ

Apache2.0 + PHP5 on FreeBSD

Posted by อัทศักดิ์ วงศ์กิตตะ on Wednesday, June 4th, 2008

ผ่านไปพักใหญ่ MySQL Cluster ก็ยังไม่ Start สะทีเลยถือโอกาศมาเขียน docs เรื่องการติดตั้ง Apache + PHP + Mysql ในรูปแบบของผมกันครับ ก่อนอื่นให้ทำการติดตั้ง MySQL ตามเอกสารนี้ครับ

1. ทำการ Update pors ครับ (แนะนำว่าให้ทำบ่อยๆ ใส่ crontab ไว้เลยก็ได้ครับ)

cvsup -g -L 2 /usr/share/examples/cvsup/ports-supfile -h cvsup.th.freebsd.org

2. ทำการติดตั้ง Apache 2.0

cd /usr/ports/www/apache20/
make all install clean WITH_SSL_MODULES=yes

คลิกที่นี่เพื่อดูส่วนที่เหลือ »