<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SpaLinux.com &#187; editor</title>
	<atom:link href="http://spalinux.com/author/editor/feed" rel="self" type="application/rss+xml" />
	<link>http://spalinux.com</link>
	<description>Resources for Relaxing Linux System Administrators</description>
	<lastBuildDate>Sat, 21 Jan 2012 16:07:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>คุณสมบัติใหม่ของ Fedora 16</title>
		<link>http://spalinux.com/2012/01/new-features-of-fedora-16</link>
		<comments>http://spalinux.com/2012/01/new-features-of-fedora-16#comments</comments>
		<pubDate>Sat, 21 Jan 2012 16:07:59 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Linux Installation]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[fedora]]></category>
		<category><![CDATA[fedora 16]]></category>
		<category><![CDATA[systemd]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=1606</guid>
		<description><![CDATA[ด้วยความตั้งใจของ RedHat ตั้งแต่แรก คือใส่คุณสมบัติใหม่ๆ เข้าไปใน Fedora อยู่ตลอด เพื่อเป็นการทดสอบการใช้งาน และถ้าได้ผลดี ค่อยนำไปใส่ไว้ใน RedHat Enterprise อีกที ดังนั้นจะเห็นแต่ละเวอร์ชั่นของ Fedora จะมีโปรแกรม มีวิธีการคอนฟิกแบบใหม่ๆ บางครั้งก็ทำให้ผู้ดาวน์โหลดมาติดตั้ง งงไปเลยเหมือนกัน ยิ่งเวอร์ชั่นหลังๆ การเปลี่ยนแปลงค่อนข้างมาก ล่าสุดมีการนำวิธีการบู๊ต โดยใช้ systemd ช่วยทำให้บู๊ตได้เร็วขึ้นมาก ในที่นี้จะแสดงเฉพาะคุณสมบัติใหม่ๆ ของ Fedora 16 ตั้งแต่การติดตั้ง และการทดสอบบู๊ตเบื้องต้น เมนูการบู๊ตติดตั้งเปลี่ยนไป เหลือแค่สองเมนูเท่านั้น น่าจะเป็นประโยชน์สำหรับผู้ใช้ โดยเฉพาะมือใหม่จะได้ไม่งงกับเวอร์ชั่นก่อนๆ ที่มีให้เลือกหลายเมนู &#160; การติดตั้ง Fedora 16 ต้องสร้าง partition พิเศษขึ้นมา ประเภท &#8220;BIOS Boot&#8221; ขนาด 1 MB สำหรับบู๊ต &#160; Linux Kernel เวอร์ชั่น 3 [...]]]></description>
			<content:encoded><![CDATA[<p>ด้วยความตั้งใจของ RedHat ตั้งแต่แรก คือใส่คุณสมบัติใหม่ๆ เข้าไปใน Fedora อยู่ตลอด เพื่อเป็นการทดสอบการใช้งาน และถ้าได้ผลดี<br />
ค่อยนำไปใส่ไว้ใน RedHat Enterprise อีกที</p>
<p>ดังนั้นจะเห็นแต่ละเวอร์ชั่นของ Fedora จะมีโปรแกรม มีวิธีการคอนฟิกแบบใหม่ๆ บางครั้งก็ทำให้ผู้ดาวน์โหลดมาติดตั้ง งงไปเลยเหมือนกัน<br />
ยิ่งเวอร์ชั่นหลังๆ การเปลี่ยนแปลงค่อนข้างมาก ล่าสุดมีการนำวิธีการบู๊ต โดยใช้ systemd ช่วยทำให้บู๊ตได้เร็วขึ้นมาก</p>
<p>ในที่นี้จะแสดงเฉพาะคุณสมบัติใหม่ๆ ของ Fedora 16 ตั้งแต่การติดตั้ง และการทดสอบบู๊ตเบื้องต้น</p>
<p><span id="more-1606"></span></p>
<p>เมนูการบู๊ตติดตั้งเปลี่ยนไป เหลือแค่สองเมนูเท่านั้น น่าจะเป็นประโยชน์สำหรับผู้ใช้ โดยเฉพาะมือใหม่จะได้ไม่งงกับเวอร์ชั่นก่อนๆ<br />
ที่มีให้เลือกหลายเมนู</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/01/f01.png"><img class="alignnone size-full wp-image-1607" title="f01" src="http://spalinux.com/wp-content/uploads/2012/01/f01.png" alt="" width="640" height="480" /></a></p>
<p>&nbsp;</p>
<p>การติดตั้ง Fedora 16 ต้องสร้าง partition พิเศษขึ้นมา ประเภท &#8220;BIOS Boot&#8221; ขนาด 1 MB สำหรับบู๊ต</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/01/f11.png"><img class="alignnone size-full wp-image-1608" title="f11" src="http://spalinux.com/wp-content/uploads/2012/01/f11.png" alt="" width="1024" height="768" /></a></p>
<p>&nbsp;</p>
<p>Linux Kernel เวอร์ชั่น 3 ออกมาได้ซักพัก ทีมงาน Fedora ก็ไม่รอช้า ใส่เวอร์ชั่น 3.1 มาให้เลย</p>
<p>&nbsp;</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/01/f18.png"><img class="alignnone size-full wp-image-1609" title="f18" src="http://spalinux.com/wp-content/uploads/2012/01/f18.png" alt="" width="720" height="400" /></a></p>
<p>&nbsp;</p>
<p>ด้วยคุณสมบัติของ systemd ลองจับเวลาดู การบู๊ตจะเร็วกว่าเมื่อเทียบกับเวอร์ชั่นก่อนๆ</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/01/f19.png"><img class="alignnone size-full wp-image-1610" title="f19" src="http://spalinux.com/wp-content/uploads/2012/01/f19.png" alt="" width="720" height="400" /></a></p>
<p>&nbsp;</p>
<p>หน้าจอการล็อกอิน และแสดงข้อมูลเบื้องต้นหลังจากการบู๊ต</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/01/f20.png"><img class="alignnone size-full wp-image-1611" title="f20" src="http://spalinux.com/wp-content/uploads/2012/01/f20.png" alt="" width="720" height="400" /></a></p>
<p>&nbsp;</p>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a href="http://docs.fedoraproject.org/en-US/Fedora/16/html/Release_Notes/index.html" target="_blank">Release Notes for Fedora 16</a></li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2012/01/new-features-of-fedora-16/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>แกะกล่องทดสอบ AirLive WL-5460AP v2 Wireless Access Point</title>
		<link>http://spalinux.com/2011/12/basic-test-airlive-wl-5460ap-v2-wireless-access-point</link>
		<comments>http://spalinux.com/2011/12/basic-test-airlive-wl-5460ap-v2-wireless-access-point#comments</comments>
		<pubDate>Wed, 28 Dec 2011 18:41:57 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Networking]]></category>
		<category><![CDATA[Wireless]]></category>
		<category><![CDATA[Access Point]]></category>
		<category><![CDATA[AirLive]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=1584</guid>
		<description><![CDATA[วันก่อนเดินตลาดเพื่อหาซื้อ Access Point รุ่นประจำที่เคยใช้ แต่ของขาดตลาด ผู้ขายเลยแนะนำรุ่นนี้มาให้ ว่ากันว่าสามารถปรับสัญญาณ Wireless ได้แรงมาก เลยต้องมาทดสอบกันหน่อย ในที่นี้จะทดสอบคอนฟิกเบื้องต้น รายละเอียดรุ่น AirLive WL-5460AP v2 802.11g Multi-function Wireless Access Point LAN: 2 port LAN1, LAN2 ดีฟอลต์คอนฟิกจากโรงงาน AP default IP address : 192.168.100.252 Subnet Mask : 255.255.255.0 default passsword: airlive คำแนะนำ ให้ทดสอบทำความเข้าใจ ก่อนที่จะต่อเชื่อม Access Point เข้ากับ network ที่ใช้งานจริงอยู่ เริ่มคอนฟิก Access Point เซ็ต IP ของพอร์ต LAN เครื่อง [...]]]></description>
			<content:encoded><![CDATA[<p>วันก่อนเดินตลาดเพื่อหาซื้อ Access Point รุ่นประจำที่เคยใช้ แต่ของขาดตลาด ผู้ขายเลยแนะนำรุ่นนี้มาให้ ว่ากันว่าสามารถปรับสัญญาณ Wireless ได้แรงมาก</p>
<p>เลยต้องมาทดสอบกันหน่อย ในที่นี้จะทดสอบคอนฟิกเบื้องต้น</p>
<p><span id="more-1584"></span></p>
<p>รายละเอียดรุ่น</p>
<ul>
<li>AirLive WL-5460AP v2</li>
<li>802.11g Multi-function Wireless Access Point</li>
<li>LAN: 2 port LAN1, LAN2</li>
</ul>
<p>ดีฟอลต์คอนฟิกจากโรงงาน</p>
<ul>
<li>AP default IP address : 192.168.100.252</li>
<li>Subnet Mask : 255.255.255.0</li>
<li>default passsword: airlive</li>
</ul>
<p><span style="color: #ff0000;">คำแนะนำ ให้ทดสอบทำความเข้าใจ ก่อนที่จะต่อเชื่อม Access Point เข้ากับ network ที่ใช้งานจริงอยู่</span></p>
<h4>เริ่มคอนฟิก Access Point</h4>
<p>เซ็ต IP ของพอร์ต LAN เครื่อง PC หรือ Notebook ที่จะใช้คอนฟิกให้อยู่ใน Subnet 192.168.100.x (ห้ามตั้งชนกับ 192.168.100.252)</p>
<p>ต่อสายแลนเข้ากับพอร์ต LAN1 ของ AirLive</p>
<p>ใช้ Browser เปิดไปที่ http://192.168.100.252</p>
<p>หน้าเว็บขอบคุณที่เลือกใช้</p>
<p><a href="http://spalinux.com/wp-content/uploads/2011/12/a01.png"><img class="alignnone size-full wp-image-1585" title="a01" src="http://spalinux.com/wp-content/uploads/2011/12/a01.png" alt="" width="733" height="275" /></a></p>
<p>&nbsp;</p>
<p>คลิ้กที่แท็ป &#8220;Mode&#8221; เพิ่อเริ่มคอนฟิก Wireless</p>
<p>หน้าเว็บ &#8220;Wireless Mode&#8221;</p>
<p><a href="http://spalinux.com/wp-content/uploads/2011/12/a02.png"><img class="alignnone size-full wp-image-1586" title="a02" src="http://spalinux.com/wp-content/uploads/2011/12/a02.png" alt="" width="733" height="519" /></a></p>
<p>&nbsp;</p>
<ul>
<li> เลือกโหมด AP (Access Point) แล้วกดปุ่ม [Setup]</li>
</ul>
<p>&nbsp;</p>
<p>หน้าเว็บ &#8220;AP Mode Settings&#8221; เพื่อแก้ไขค่าคอนฟิก Wireless</p>
<p><a href="http://spalinux.com/wp-content/uploads/2011/12/a03.png"><img class="alignnone size-full wp-image-1587" title="a03" src="http://spalinux.com/wp-content/uploads/2011/12/a03.png" alt="" width="734" height="676" /></a></p>
<p>&nbsp;</p>
<ul>
<li>แนะนำให้เปลี่ยนชื่อ SSID</li>
<li>บรรทัด Secrity: กดปุ่ม [Setup] เพื่อตั้งค่ารหัส (Encryption key) =&gt; ไปที่หน้าเว็บ &#8220;Wireless Security Setup&#8221;</li>
<li>บรรทัด Advanced Settings: กดปุ่ม [Setup] เพื่อเข้าสู่การตั้งค่าขั้นสูง =&gt; ไปที่หน้าเว็บ &#8220;Wireless Advanced Settings&#8221;</li>
</ul>
<p>หน้าเว็บ &#8220;Wireless Security Setup&#8221;</p>
<p><a href="http://spalinux.com/wp-content/uploads/2011/12/a04.png"><img class="alignnone size-full wp-image-1588" title="a04" src="http://spalinux.com/wp-content/uploads/2011/12/a04.png" alt="" width="710" height="259" /></a></p>
<p>&nbsp;</p>
<ul>
<li>เลือก Encryption: ที่ต้องการใช้ เช่นเลือกเป็น WPA-PSK2 Mixed</li>
<li>เลือก Pre-Shared Key Format: Passphrase</li>
<li>ใส่ค่า Pre-Shared Key: ที่ต้องการ เป็นรหัสที่ Wireless Client ต้องใส่ก่อนที่จะเชื่อมต่อกับ Access Point ได้</li>
</ul>
<p>กดปุ่ม [Apply Changes]</p>
<p>&nbsp;</p>
<p><span style="color: #0000ff;">หมายเหตุ ข้อเสียอย่างหนึ่งของ Access Point ยี่ห้อนี้คือ เปลี่ยนคอนฟิกไปแล้ว จะมีผลหลังจาก &#8220;Reboot&#8221; เท่านั้น เพราะฉะนั้น แนะนำให้เปลี่ยนคอนฟิกทุกอย่างให้เรียบร้อย แล้วค่อย reboot ครั้งเดียว</span></p>
<p><a href="http://spalinux.com/wp-content/uploads/2011/12/a05.png"><img class="alignnone size-full wp-image-1589" title="a05" src="http://spalinux.com/wp-content/uploads/2011/12/a05.png" alt="" width="356" height="122" /></a></p>
<p>&nbsp;</p>
<p>หน้าเว็บ &#8220;Wireless Advanced Settings&#8221;</p>
<p><a href="http://spalinux.com/wp-content/uploads/2011/12/a06.png"><img class="alignnone size-full wp-image-1590" title="a06" src="http://spalinux.com/wp-content/uploads/2011/12/a06.png" alt="" width="660" height="608" /></a></p>
<p>&nbsp;</p>
<ul>
<li>แนะนำให้ปิดการ &#8220;Broadcast SSID:&#8221; โดยเปลี่ยนเป็น &#8220;Disabled&#8221;</li>
</ul>
<p>กดปุ่ม [Apply Changes]</p>
<p>&nbsp;</p>
<h4>คอนฟิก DHCP Server บน Access Point</h4>
<p>สำหรับการทดสอบนี้ จะคอนฟิกให้ Access Point แจก IP address ด้วย</p>
<p><span style="color: #ff0000;">คำเตือน ปิดการใช้งาน DHCP บน AP นี้ ก่อนจะเชื่อมต่อเข้ากับ network ที่มี DHCP Server อยู่แล้ว ยกเว้น คุณจะตั้งใจให้ AP ตัวนี้เป็น DHCP Server</span></p>
<p>คลิ้กแท็ป &#8220;TCP/IP&#8221; หน้าเว็บจะแสดง LAN Interface Setup</p>
<p><a href="http://spalinux.com/wp-content/uploads/2011/12/a07.png"><img class="alignnone size-full wp-image-1591" title="a07" src="http://spalinux.com/wp-content/uploads/2011/12/a07.png" alt="" width="734" height="676" /></a></p>
<p>&nbsp;</p>
<ul>
<li>บรรทัด DHCP: เลือกเป็น Server</li>
<li>บรรทัด DHCP Client Range: ใส่ IP address ที่ต้องการแจก</li>
</ul>
<p>&nbsp;</p>
<p>เบื้องต้นทดลองเปลี่ยนคอนฟิกแค่นี้ก่อน กดแท็ป &#8220;Reboot&#8221; แล้วกดปุ่ม [Reboot] เพื่อรีบู๊ตอุปกรณ์</p>
<p><a href="http://spalinux.com/wp-content/uploads/2011/12/a08.png"><img class="alignnone size-full wp-image-1592" title="a08" src="http://spalinux.com/wp-content/uploads/2011/12/a08.png" alt="" width="734" height="307" /></a></p>
<p>&nbsp;</p>
<p>กดปุ่ม [OK] เพื่อยีนยันการ reboot</p>
<p><a href="http://spalinux.com/wp-content/uploads/2011/12/a10.png"><img class="alignnone size-full wp-image-1594" title="a10" src="http://spalinux.com/wp-content/uploads/2011/12/a10.png" alt="" width="356" height="148" /></a></p>
<p>&nbsp;</p>
<p>หน้าเว็บแสดงกำลัง Reboot เท่าที่จับเวลา ประมาณ 100 วินาที ถึงจะกลับมาใช้ได้ ใกล้เคียงกับแถบสีแดงที่ขึ้นบนหน้าเว็บเต็มพอดี เพราะฉะนั้นเปิดหน้า Rebooting ทิ้งไว้ได้เลย แต่ยกเว้นมีการเปลี่ยน IP ของ Access Point</p>
<p><a href="http://spalinux.com/wp-content/uploads/2011/12/a09.png"><img class="alignnone size-full wp-image-1593" title="a09" src="http://spalinux.com/wp-content/uploads/2011/12/a09.png" alt="" width="732" height="300" /></a></p>
<p>&nbsp;</p>
<p>ลองเซ็ต Wireless Client ตั้งค่า SSID, Encryption และ key ที่คอนฟิกไว้ แล้วลองเชื่อมต่อดู</p>
<p>&nbsp;</p>
<p>หากต้องการดู Client ที่เชื่อมต่อ ให้คลิ้กแท็ป &#8220;Status&#8221; แล้วคลิ้กลิ้งค์ย่อย &#8220;Active Clients&#8221; ที่อยู่ข้างล่างแท็ป</p>
<p><a href="http://spalinux.com/wp-content/uploads/2011/12/a11.png"><img class="alignnone size-full wp-image-1595" title="a11" src="http://spalinux.com/wp-content/uploads/2011/12/a11.png" alt="" width="733" height="388" /></a></p>
<p>&nbsp;</p>
<p>ข้อมูลอ้างอิง</p>
<ul>
<li><a href="http://www.airlive.com/" target="_blank">www.airlive.com</a></li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2011/12/basic-test-airlive-wl-5460ap-v2-wireless-access-point/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>เขียนโปรแกรมโหลดเว็บเพจด้วย PHP cURL</title>
		<link>http://spalinux.com/2011/12/program-php-curl-to-load-web-page</link>
		<comments>http://spalinux.com/2011/12/program-php-curl-to-load-web-page#comments</comments>
		<pubDate>Thu, 22 Dec 2011 16:11:06 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Utility]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[load web page]]></category>
		<category><![CDATA[php curl]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=1574</guid>
		<description><![CDATA[จากที่ได้นำเสนอ วิธีการใช้ cURL เพื่อโหลดเว็บเพจ ซึ่งเป็นการรันคำสั่งแบบ command line มาแล้ว คราวนี้จะเป็นการเขียนโปรแกรม PHP โดยเรียกใช้ฟังก์ชั่นในโมดูล curl เพื่อโหลดเว็บเพจ ตรวจสอบโมดูล php curl ก่อนที่เราจะเรียกใช้ฟังก์ชั่นจากโมดูล curl เพื่อเขียนโปรแกรมใน PHP ได้นั้น จำเป็นต้องมีโมดูล curl ติดตั้งอยู่แล้ว ซึ่งสามารถตรวจสอบได้ด้วยการรันคำสั่ง php ตามด้วยออปชั่น &#8216;-m&#8217; ดูผลลัพธ์ที่ได้ ตัวอย่างการรันคำสั่ง php ด้วยออปชั่น &#8216;-m&#8217; เพื่อดูว่ามีโมดูล curl หรือไม่ [user1@dev ~]$ php -m &#124; grep curl curl ถ้าไม่มี ต้องติดตั้งเพิ่มเติม ซึ่งอาจจะด้วยการใช้ rpm หรือ yum ก็ได้ เริ่มใช้ฟังก์ชั่น curl เริ่มต้นด้วยตัวอย่างการเขียนโปรแกรมโดยใช้ฟังก์ชั่น curl [...]]]></description>
			<content:encoded><![CDATA[<p>จากที่ได้นำเสนอ <a href="http://spalinux.com/2011/12/using-curl-to-load-web-page">วิธีการใช้ cURL เพื่อโหลดเว็บเพจ</a> ซึ่งเป็นการรันคำสั่งแบบ command line มาแล้ว</p>
<p>คราวนี้จะเป็นการเขียนโปรแกรม PHP โดยเรียกใช้ฟังก์ชั่นในโมดูล curl เพื่อโหลดเว็บเพจ</p>
<p><span id="more-1574"></span></p>
<h4>ตรวจสอบโมดูล php curl</h4>
<p>ก่อนที่เราจะเรียกใช้ฟังก์ชั่นจากโมดูล curl เพื่อเขียนโปรแกรมใน PHP ได้นั้น จำเป็นต้องมีโมดูล curl ติดตั้งอยู่แล้ว ซึ่งสามารถตรวจสอบได้ด้วยการรันคำสั่ง php ตามด้วยออปชั่น &#8216;-m&#8217; ดูผลลัพธ์ที่ได้</p>
<p>ตัวอย่างการรันคำสั่ง php ด้วยออปชั่น &#8216;-m&#8217; เพื่อดูว่ามีโมดูล curl หรือไม่</p>
<pre>[user1@dev ~]$ <strong>php -m | grep curl</strong>
curl</pre>
<p>ถ้าไม่มี ต้องติดตั้งเพิ่มเติม ซึ่งอาจจะด้วยการใช้ rpm หรือ yum ก็ได้</p>
<h4>เริ่มใช้ฟังก์ชั่น curl</h4>
<p>เริ่มต้นด้วยตัวอย่างการเขียนโปรแกรมโดยใช้ฟังก์ชั่น curl แบบง่ายสุด เพื่อโหลดเว็บเพจ มีสามขั้นตอนคือ</p>
<ul>
<li>curl_init ระบุเว็บไซต์ที่ต้องการโหลด</li>
<li>curl_exec โหลดหน้าเว็บและแสดงผลลัพธ์</li>
<li>curl_close สิ้นสุดการใช้ curl</li>
</ul>
<p>เช่นต้องการโหลดเว็บ www.php.net</p>
<pre>[user1@dev ~]$ <strong>cat curl.php</strong>
&lt;?php

// Create a curl handle
$ch = <span style="color: #0000ff;">curl_init</span>('http://www.php.net');

// Execute
$ret = <span style="color: #0000ff;">curl_exec</span>($ch);

// Close handle
<span style="color: #0000ff;">curl_close</span>($ch);

?&gt;</pre>
<p>ทดลองรันโปรแกรมที่เขียน</p>
<pre>[user1@dev ~]$ <strong>php curl.php</strong>
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;
&lt;head&gt;
 &lt;title&gt;PHP: Hypertext Preprocessor&lt;/title&gt;
 &lt;style type="text/css" media="all"&gt;
  @import url("http://static.php.net/www.php.net/styles/site.css");
  @import url("http://static.php.net/www.php.net/styles/phpnet.css");

 &lt;/style&gt;
...</pre>
<p>สังเกตว่าผลลัพธ์การโหลด หรือไฟล์เว็บเพจจะแสดงผลออกหน้าจอเลย เมื่อใช้ฟังก์ชั่น curl_exec() ไม่ได้เก็บไว้ในตัวแปร $ret</p>
<p>หากต้องการเก็บผลลัพธ์ที่ได้ไว้ในตัวแปรก่อน เพื่อนำไปประมวลผล ต้องใช้ฟังก์ชั่น curl_setopt เพื่อตั้งค่า CURLOPT_RETURNTRANSFER ให้เป็น true</p>
<pre>&lt;?php

// Create a curl handle
$ch = curl_init('http://www.php.net');

<span style="color: #0000ff;">// Set curl options</span>
<span style="color: #0000ff;">curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);</span>

// Execute
$ret = curl_exec($ch);

// Return
<span style="color: #0000ff;">print 'return = ' . $ret . "\n";</span>

// Close handle
curl_close($ch);

?&gt;</pre>
<p>ลองรันโปรแกรมหลังจากแก้ไขแล้ว</p>
<pre>[user1@dev ~]$ php curl.php
<span style="color: #0000ff;">return =</span> &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;
&lt;head&gt;
 &lt;title&gt;PHP: Hypertext Preprocessor&lt;/title&gt;
 &lt;style type="text/css" media="all"&gt;
  @import url("http://static.php.net/www.php.net/styles/site.css");
  @import url("http://static.php.net/www.php.net/styles/phpnet.css");

 &lt;/style&gt;
...</pre>
<p>&nbsp;</p>
<h4>ดูรายละเอียดการโหลดเว็บเพจ</h4>
<p>หากต้องการดูข้อมูลรายละเอียดของการโหลดเว็บเพจ สามารถใช้ฟังก์ชั่น curl_getinfo() ได้</p>
<pre>&lt;?php

// Create a curl handle
$ch = curl_init('http://www.php.net');

// Set curl options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Execute
$ret = curl_exec($ch);

<span style="color: #0000ff;">// Get information about the last transfer</span>
<span style="color: #0000ff;">$get_info = curl_getinfo($ch);</span>

<span style="color: #0000ff;">print_r($get_info);</span>

// Close handle
curl_close($ch);

?&gt;</pre>
<p>ผลการรันโปรแกรม จะแสดงค่าเกี่ยวกับการโหลดเว็บเพจทั้งหมด</p>
<pre>[user1@dev ~]$ <strong>php curl.php</strong>
Array
(
    [url] =&gt; http://www.php.net
    [content_type] =&gt; text/html;charset=utf-8
    [http_code] =&gt; 200
    [header_size] =&gt; 382
    [request_size] =&gt; 50
    [filetime] =&gt; -1
    [ssl_verify_result] =&gt; 0
    [redirect_count] =&gt; 0
    [total_time] =&gt; 1.523659
    [namelookup_time] =&gt; 0.006906
    [connect_time] =&gt; 0.249598
    [pretransfer_time] =&gt; 0.249602
    [size_upload] =&gt; 0
    [size_download] =&gt; 45325
    [speed_download] =&gt; 29747
    [speed_upload] =&gt; 0
    [download_content_length] =&gt; -1
    [upload_content_length] =&gt; 0
    [starttransfer_time] =&gt; 0.551071
    [redirect_time] =&gt; 0
    [certinfo] =&gt; Array
        (
        )

)</pre>
<p>&nbsp;</p>
<p>แต่ถ้าต้องการแสดงเฉพาะบางค่า เช่นขนาดไฟล์เว็บเพจที่โหลด ต้องระบุ CURLINFO_SIZE_DOWNLOAD ไว้ในฟังก์ชั่น curl_getinfo() ด้วย</p>
<pre>&lt;?php

// Create a curl handle
$ch = curl_init('http://www.php.net');

// Set curl options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Execute
$ret = curl_exec($ch);

// Get information about the last transfer
$get_info_size_download = curl_getinfo($ch, <span style="color: #0000ff;">CURLINFO_SIZE_DOWNLOAD</span>);

<span style="color: #0000ff;">print 'SIZE_DOWNLOAD = ' . $get_info_size_download . "\n";</span>

// Close handle
curl_close($ch);

?&gt;</pre>
<p>ผลการรันโปรแกรม</p>
<pre>[user1@dev ~]$ <strong>php curl.php</strong>
SIZE_DOWNLOAD = 45325</pre>
<p>&nbsp;</p>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a href="http://www.php.net/manual/en/intro.curl.php" target="_blank">PHP: cURL Functions &#8211; Manual</a></li>
<li><a href="http://spalinux.com/2011/12/using-curl-to-load-web-page">วิธีการใช้ cURL เพื่อโหลดเว็บเพจ</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2011/12/program-php-curl-to-load-web-page/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>วิธีการใช้ cURL เพื่อโหลดเว็บเพจ</title>
		<link>http://spalinux.com/2011/12/using-curl-to-load-web-page</link>
		<comments>http://spalinux.com/2011/12/using-curl-to-load-web-page#comments</comments>
		<pubDate>Fri, 16 Dec 2011 16:19:34 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Utility]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[curl]]></category>
		<category><![CDATA[libcurl]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=1565</guid>
		<description><![CDATA[จากที่เคยแนะนำ วิธีการใช้คำสั่ง wget รันเป็นคำสั่งบน comand line เพื่อโหลดเว็บเพจได้ มาครั้งนี้ ขอแนะนำอีกคำสั่งคือ cURL โปรแกรมทำหน้าที่คล้ายกันแต่มีคุณสมบัติมากกว่า แถม curl ยังมี library (libcurl) ที่ภาษาต่างๆ เช่น PHP นำไปพัฒนาสร้างเป็นฟังก์ชั่นให้เรียกใช้ในการเขียนโปรแกรมได้ เริ่มต้นการใช้ด้วยการรันคำสั่ง curl ตามด้วย URL ของเว็บไซต์ เช่นต้องการโหลดเว็บหน้าแรกของ www.apple.com [user1@dev ~]$ curl http://www.apple.com &#60;!DOCTYPE html&#62; &#60;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US"&#62; &#60;head&#62; &#60;meta http-equiv="content-type" content="text/html; charset=utf-8" /&#62; &#60;meta name="Author" content="Apple Inc." /&#62; &#60;meta name="viewport" content="width=1024" /&#62; &#60;meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7, [...]]]></description>
			<content:encoded><![CDATA[<p>จากที่เคยแนะนำ<a href="http://spalinux.com/2010/01/using_wget"> วิธีการใช้คำสั่ง wget</a> รันเป็นคำสั่งบน comand line เพื่อโหลดเว็บเพจได้ มาครั้งนี้ ขอแนะนำอีกคำสั่งคือ cURL โปรแกรมทำหน้าที่คล้ายกันแต่มีคุณสมบัติมากกว่า แถม curl ยังมี library (libcurl) ที่ภาษาต่างๆ เช่น PHP นำไปพัฒนาสร้างเป็นฟังก์ชั่นให้เรียกใช้ในการเขียนโปรแกรมได้</p>
<p><span id="more-1565"></span><br />
เริ่มต้นการใช้ด้วยการรันคำสั่ง curl ตามด้วย URL ของเว็บไซต์ เช่นต้องการโหลดเว็บหน้าแรกของ www.apple.com</p>
<pre>[user1@dev ~]$ <strong>curl http://www.apple.com</strong>
 &lt;!DOCTYPE html&gt;
 &lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US"&gt;
 &lt;head&gt;
 &lt;meta http-equiv="content-type" content="text/html; charset=utf-8" /&gt;
 &lt;meta name="Author" content="Apple Inc." /&gt;
 &lt;meta name="viewport" content="width=1024" /&gt;
 &lt;meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7, IE=9" /&gt;
 &lt;link id="globalheader-stylesheet" rel="stylesheet" href="http://images.apple.com/global/nav/styles/navigation.css" type="text/css" /&gt;
 &lt;title&gt;Apple&lt;/title&gt;
 ...</pre>
<p>ดีฟอลต์ผลลัพธ์ที่ได้จะแสดงผลออกทางหน้าจอ (stdout)</p>
<h4>ออปชั่น -o (output)</h4>
<p>ระบุออปชั่น &#8220;-o&#8217; ถ้าต้องการบันทึกผลลัพธ์เป็นไฟล์</p>
<pre>[user1@dev dev]$ <strong>curl -o apple-index.html http://www.apple.com</strong>
 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
 Dload  Upload   Total   Spent    Left  Speed
 100  9346  100  9346    0     0  31031      0 --:--:-- --:--:-- --:--:-- 59151</pre>
<p>ไฟล์ผลลัพธ์ที่ได้</p>
<pre>[user1@dev dev]$ <strong>ls -l</strong>
 total 12
 -rw-r--r--. 1 user1 users 9346 Dec 16 22:56 apple-index.html

[user1@dev dev]$ <strong>head apple-index.html</strong>
 &lt;!DOCTYPE html&gt;
 &lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US"&gt;
 &lt;head&gt;
 &lt;meta http-equiv="content-type" content="text/html; charset=utf-8" /&gt;
 &lt;meta name="Author" content="Apple Inc." /&gt;
 &lt;meta name="viewport" content="width=1024" /&gt;
 &lt;meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7, IE=9" /&gt;
 &lt;link id="globalheader-stylesheet" rel="stylesheet" href="http://images.apple.com/global/nav/styles/navigation.css" type="text/css" /&gt;
&lt;title&gt;Apple&lt;/title&gt;</pre>
<h4>ออปชั่น -v (verbose)</h4>
<p>หากต้องการดูรายละเอียด ขั้นตอนการโหลดเว็บเพจ สามารถทำได้โดยการระบุออปชั่น &#8220;-v&#8221;</p>
<pre>[user1@dev dev]$ <strong>curl -v http://www.apple.com</strong>
 * About to connect() to www.apple.com port 80 (#0)
 *   Trying 118.214.125.15... connected
 * Connected to www.apple.com (118.214.125.15) port 80 (#0)
 &gt; GET / HTTP/1.1
 &gt; User-Agent: curl/7.21.7 (x86_64-redhat-linux-gnu) libcurl/7.21.7 NSS/3.12.10.0 zlib/1.2.5 libidn/1.22 libssh2/1.2.7
 &gt; Host: www.apple.com
 &gt; Accept: */*
 &gt;
 &lt; HTTP/1.1 200 OK
 &lt; Content-Type: text/html; charset=UTF-8
 &lt; Server: Apache/2.2.3 (Oracle)
 &lt; Cache-Control: max-age=531
 &lt; Expires: Fri, 16 Dec 2011 16:06:55 GMT
 &lt; Date: Fri, 16 Dec 2011 15:58:04 GMT
 &lt; Content-Length: 9346
 &lt; Connection: keep-alive
 &lt;
 &lt;!DOCTYPE html&gt;
 &lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US"&gt;
 &lt;head&gt;
 &lt;meta http-equiv="content-type" content="text/html; charset=utf-8" /&gt;
 &lt;meta name="Author" content="Apple Inc." /&gt;
 &lt;meta name="viewport" content="width=1024" /&gt;
 &lt;meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7, IE=9" /&gt;
 &lt;link id="globalheader-stylesheet" rel="stylesheet" href="http://images.apple.com/global/nav/styles/navigation.css" type="text/css" /&gt;
&lt;title&gt;Apple&lt;/title&gt;
 ...</pre>
<h4>ออปชั่น -h (help)</h4>
<p>ระบุออปชั่น &#8220;-h&#8221; เพื่อดูออปชั่นอื่นๆ พร้อมคำอธิบายคร่าวๆ</p>
<pre>[user1@dev ~]$ <strong>curl  --help</strong>
Usage: curl [options...] &lt;url&gt;
Options: (H) means HTTP/HTTPS only, (F) means FTP only
     --anyauth       Pick "any" authentication method (H)
 -a, --append        Append to target file when uploading (F/SFTP)
     --basic         Use HTTP Basic Authentication (H)
     --cacert FILE   CA certificate to verify peer against (SSL)
     --capath DIR    CA directory to verify peer against (SSL)
 -E, --cert CERT[:PASSWD] Client certificate file and password (SSL)
     --cert-type TYPE Certificate file type (DER/PEM/ENG) (SSL)
...</pre>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a href="http://curl.haxx.se/" target="_blank">cURL groks URLs</a></li>
<li><a href="http://spalinux.com/2010/01/using_wget">วิธีการใช้คำสั่ง wget</a></li>
<li><a href="http://spalinux.com/2011/12/program-php-curl-to-load-web-page">เขียนโปรแกรมโหลดเว็บเพจด้วย PHP cURL</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2011/12/using-curl-to-load-web-page/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>คอนฟิก Asterisk เพื่อรองรับ SIP Client</title>
		<link>http://spalinux.com/2011/12/configure-asterisk-for-sip-client</link>
		<comments>http://spalinux.com/2011/12/configure-asterisk-for-sip-client#comments</comments>
		<pubDate>Sat, 03 Dec 2011 10:49:54 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Voice]]></category>
		<category><![CDATA[VoIP]]></category>
		<category><![CDATA[asterisk]]></category>
		<category><![CDATA[dial plan]]></category>
		<category><![CDATA[sip]]></category>
		<category><![CDATA[voice]]></category>
		<category><![CDATA[voip]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=1541</guid>
		<description><![CDATA[หลังจาก ติดตั้ง Asterisk 1.8 บน CentOS 5  เสร็จเรียบร้อยแล้ว ในช่วงเริ่มต้นการทดสอบ ก่อนที่จะเชื่อมต่อเข้ากับ PSTN หรือระบบโทรศัพท์จริง เพื่อไม่ต้องเสียค่าใช้จ่ายในการโทรเข้า-ออก แนะนำให้ทดสอบ และทำความเข้าใจ ด้วย SIP  Client โดยอาจจะใช้ที่เป็น Hardware หรือเป็น Software โปรแกรมติดตั้งบนเครื่อง หมายเหตุ เนื่องจากคอนฟิกและหลักการของ Asterisk มีเยอะมาก ในที่นี้จะแนะนำวิธีเริ่มให้ใช้งานได้ก่อน แล้วค่อยมาลงรายละเอียดอีกที สตาร์ตเซอร์วิส Asterisk [root@cent57-64a ~]# service asterisk start Starting asterisk:                                         [  OK  ] ใช้คำสั่ง ps เพื่อดูโปรเซสของ asterisk [root@cent57-64a ~]# ps -ef &#124; grep asterisk root      2638     1  [...]]]></description>
			<content:encoded><![CDATA[<p>หลังจาก<a href="http://spalinux.com/2011/12/install-asterisk-1-8-on-centos-5"> ติดตั้ง Asterisk 1.8 บน CentOS 5  </a>เสร็จเรียบร้อยแล้ว ในช่วงเริ่มต้นการทดสอบ ก่อนที่จะเชื่อมต่อเข้ากับ PSTN หรือระบบโทรศัพท์จริง เพื่อไม่ต้องเสียค่าใช้จ่ายในการโทรเข้า-ออก แนะนำให้ทดสอบ และทำความเข้าใจ ด้วย SIP  Client โดยอาจจะใช้ที่เป็น Hardware หรือเป็น Software โปรแกรมติดตั้งบนเครื่อง</p>
<p><span id="more-1541"></span></p>
<p>หมายเหตุ เนื่องจากคอนฟิกและหลักการของ Asterisk มีเยอะมาก ในที่นี้จะแนะนำวิธีเริ่มให้ใช้งานได้ก่อน แล้วค่อยมาลงรายละเอียดอีกที</p>
<h4>สตาร์ตเซอร์วิส Asterisk</h4>
<pre>[root@cent57-64a ~]# <strong>service asterisk start</strong>
Starting asterisk:                                         [  OK  ]</pre>
<p>ใช้คำสั่ง ps เพื่อดูโปรเซสของ asterisk</p>
<pre>[root@cent57-64a ~]# <strong>ps -ef | grep asterisk</strong>
root      2638     1  0 11:54 pts/0    00:00:00 /bin/sh /usr/sbin/safe_asterisk -U asterisk -G asterisk
asterisk  2641  2638 10 11:54 pts/0    00:00:01 /usr/sbin/asterisk -f -U asterisk -G asterisk -vvvg -c</pre>
<p>ไฟล์คอนฟิกหลักของ asterisk จะอยู่ใน /etc/asterisk/ ตัวอย่างไฟล์</p>
<pre>[root@cent57-64a ~]# <strong>ls -l /etc/asterisk/</strong>
total 1316
-rw-rw-r-- 1 asterisk asterisk   140 Oct 12 21:50 adsi.conf
-rw-rw-r-- 1 asterisk asterisk  2760 Oct 12 21:50 agents.conf
-rw-rw-r-- 1 asterisk asterisk  2904 Oct 12 21:50 ais.conf
-rw-rw-r-- 1 asterisk asterisk  2084 Oct 12 21:50 alarmreceiver.conf
-rw-rw-r-- 1 asterisk asterisk  3498 Oct 12 21:50 alsa.conf
-rw-rw-r-- 1 asterisk asterisk   767 Oct 12 21:50 amd.conf
-rw-rw-r-- 1 asterisk asterisk  1044 Oct 12 21:50 app_mysql.conf
-rw-rw-r-- 1 asterisk asterisk  3254 Oct 12 21:50 asterisk.adsi</pre>
<h4>คอนฟิก SIP Server</h4>
<p>คอนฟิกของ SIP จะอยู่ในไฟล์ /etc/asterisk/sip.conf</p>
<pre>[root@cent57-64a asterisk]# <strong>ls -l /etc/asterisk/sip.conf</strong>
-rw-rw-r-- 1 asterisk asterisk 77921 Nov 29 12:13 /etc/asterisk/sip.conf</pre>
<p>ตัวอย่างการแก้ไฟล์ sip.conf เพื่ออนุญาตให้ SIP Client เข้ามาใช้งานได้ แต่ต้องระบุ user, password (secret) ที่กำหนดไว้</p>
<pre><span style="color: #0000ff;">
[user1-xp]
secret=password
type=friend
host=dynamic

[user2-iphone]
secret=password
type=friend
host=dynamic
</span></pre>
<p>หลังจากแก้ไขไฟล์คอนฟิกใน /etc/asterisk/ ต้องมีการรีโหลดคอนฟิก เช่นใช้คำสั่ง service</p>
<pre>[root@cent57-64a ~]# <strong>service asterisk restart</strong>
Stopping safe_asterisk:                                    [  OK  ]
Shutting down asterisk:                                    [  OK  ]
Starting asterisk:                                         [  OK  ]
[root@cent57-64a ~]#</pre>
<p>การใช้คำสั่ง service เพื่อรีสตาร์ตเซอร์วิสของ asterisk เป็นวิธีที่ไม่แนะนำ ถ้าแก้ไขเฉพาะส่วน เช่น เฉพาะส่วนคอนฟิก sip.conf สามารถรีโหลดคอนฟิกเฉพาะส่วนคอนฟิกได้ ทำให้ไม่กระทบกับการทำงานในส่วนอื่นๆ</p>
<p>พิมพ์คำสั่ง asterisk ตามด้วยออปชั่น &#8216;-r&#8217; เพื่อเข้าสู่โหมดคอนโซลของ asterisk ซึ่งในโหมดนี้ สามารถเพิ่ม แก้ไข ลบ ตรวจสอบคอนฟิก รีโหลดคอนฟิกหลังการแก้ไข หรือดูการทำงานของ asterisk ได้</p>
<pre>[root@cent57-64a ~]# <strong>asterisk -r</strong>
Asterisk 1.8.7.0, Copyright (C) 1999 - 2011 Digium, Inc. and others.
Created by Mark Spencer &lt;markster@digium.com&gt;
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
Connected to Asterisk 1.8.7.0 currently running on cent57-64a (pid = 3409)
Verbosity is at least 3
cent57-64a*CLI&gt;</pre>
<p>พิมพ์คำสั่ง sip reload เพื่อรีโหลดคอนฟิกเฉพาะส่วนของ sip</p>
<pre>cent57-64a*CLI&gt; <strong>sip reload</strong>
Reloading SIP
cent57-64a*CLI&gt;</pre>
<p>ในโหมดนี้สามารถใช้คำสั่ง sip show users เพื่อตรวจสอบ user ของ sip ที่เราเพิ่มไว้ได้</p>
<pre>cent57-64a*CLI&gt; <strong>sip show users</strong>
Username                   Secret           Accountcode      Def.Context      ACL  ForcerPort
user1-xp                   password                          default          No   No
user2-iphone               password                          default          No   No</pre>
<h4>คอนฟิก SIP Client</h4>
<p>คอนฟิกบน SIP Client เพื่อชี้มายัง IP ของ Asterisk (SIP Server) แล้วระุบุ user, password ที่ตั้งไว้ ทดลอง call แบบระบุตัวเลขมั่วๆ ดู จะยัง call ไม่ได้ เพราะยังไม่มีการกำหนด dial plan</p>
<p>เช่นทดลอง call เบอร์ 6000 จะขึ้น error ในคอนโซล</p>
<pre>cent57-64a*CLI&gt;
== Using SIP RTP CoS mark 5
[Nov 29 12:36:21] NOTICE[3851]: chan_sip.c:22081 handle_request_invite: <span style="color: #ff0000;">Call from 'user1-xp' (192.168.1.2:168) to extension '6000' rejected because extension not found in context 'default'</span>.
cent57-64a*CLI&gt;</pre>
<h4>แก้ไข dialplan (extensions.conf)</h4>
<p>การกำหนด dial plan ต้องแก้ไขไฟล์ /etc/asterisk/extensions.conf</p>
<pre>[root@cent57-64a ~]# <strong>ls -l /etc/asterisk/extensions.conf</strong>
-rw-rw-r-- 1 asterisk asterisk 30823 Oct 12 21:50 /etc/asterisk/extensions.conf</pre>
<p>แก้ไขไฟล์ /etc/asterisk/extensions.conf โดยแก้ไขภายใต้ context ที่ชื่อ [default] ด้วยการ comment (ใส่เครื่องหมาย ; นำหน้า include) แล้วเติม เบอร์ exten ของแต่ละ SIP Client</p>
<pre><span style="color: #0000ff;">[default]</span>
;
; By default we include the demo.  In a production system, you
; probably don't want to have the demo there.
;
<span style="color: #0000ff;"><strong>
;include =&gt; demo</strong> <strong>
exten =&gt; 6001,1,Dial(SIP/user1-xp)</strong>

<strong>exten =&gt; 6002,1,Dial(SIP/user2-iphone)</strong></span></pre>
<p>ในที่นี้หมายความว่า ถ้า call เบอร์ 6001 จะเป็นการโทรไปที่ SIP Client &#8220;user1-xp&#8221; แต่ถ้า call เบอร์ 6002 จะส่งไปที่ SIP Client &#8220;user2-iphone&#8221;</p>
<p>หลังแก้ไขไฟล์ extensions.con ต้องรีโหลดคอนฟิกในส่วน dialplan</p>
<pre>cent57-64a*CLI&gt; <strong>dialplan reload</strong>
Dialplan reloaded.
== Parsing '/etc/asterisk/extensions.conf':   == Found</pre>
<p>..</p>
<p>ใช้คำสั่ง dialplan show default เพื่อดู dialplan ในส่วน context ชื่อ default</p>
<pre>cent57-64a*CLI&gt; <strong>dialplan show default</strong>
[ Context 'default' created by 'pbx_config' ]
'6001' =&gt;         1. Dial(SIP/user1-xp)                         [pbx_config]
'6002' =&gt;         1. Dial(SIP/user2-iphone)                     [pbx_config]

-= 2 extensions (2 priorities) in 1 context. =-
cent57-64a*CLI&gt;</pre>
<p>ทดลอง call ดู  เช่น SIP Client &#8220;user1-xp&#8221; โทรเบอร์ 6002 จะมีข้อความขึ้นบนคอนโซลของ asterisk ประมาณนี้</p>
<pre>cent57-64a*CLI&gt;
== Using SIP RTP CoS mark 5
--<span style="color: #0000ff;"> Executing [6002@default:1] Dial("SIP/user1-xp-00000000", "SIP/user2-iphone")</span> in new stack
== Using SIP RTP CoS mark 5
-- Called SIP/user2-iphone
--<span style="color: #0000ff;"> SIP/user2-iphone-00000001</span> is ringing
-- SIP/user2-iphone-00000001 is ringing
cent57-64a*CLI&gt;</pre>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a href="http://spalinux.com/2011/12/install-asterisk-1-8-on-centos-5">ติดตั้ง Asterisk 1.8 บน CentOS 5</a></li>
</ul>
<pre> </pre>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2011/12/configure-asterisk-for-sip-client/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ติดตั้ง Asterisk 1.8 บน CentOS 5</title>
		<link>http://spalinux.com/2011/12/install-asterisk-1-8-on-centos-5</link>
		<comments>http://spalinux.com/2011/12/install-asterisk-1-8-on-centos-5#comments</comments>
		<pubDate>Sat, 03 Dec 2011 07:36:40 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Voice]]></category>
		<category><![CDATA[VoIP]]></category>
		<category><![CDATA[asterisk]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[pbx]]></category>
		<category><![CDATA[sip]]></category>
		<category><![CDATA[voice]]></category>
		<category><![CDATA[voip]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=1531</guid>
		<description><![CDATA[Asterisk ถือว่าเป็นโปรแกรมสำหรับทำเป็น VoIP Server ได้ดีโปรแกรมหนึ่ง ด้วยคุณสมบัติที่มากมาย แล้วที่สำคัญยังใช้งานได้ฟรี การติดตั้ง Asterisk เพื่อทำเป็นเซิร์ฟเวอร์สามารถทำได้สองวิธีหลักๆ คือ ดาวน์โหลดไฟล์ ISO ชื่อ AsteriskNOW ที่ทางทีม Asterisk ได้จัดเตรียมโปรแกรมที่จำเป็นทั้งหมดแล้วสร้างเป็นไฟล์ ISO เพื่อให้ผู้ใช้ดาวน์โหลดไปเขียนใส่แผ่นซีดี เพื่อให้สะดวกต่อการติดตั้งและแทบจะพร้อมใช้งานได้เลย (based on CentOS 5) ดาวน์โหลดไฟล์ Asterisk Communications Engine แล้วนำมาติดตั้งเอง โดยอาจจะใช้ yum หรือติดตั้งเองด้วยไฟล์ rpm ในบทความนี้จะอธิบายวิธีการติดตั้งแบบหลัง โดยดาวน์โหลดไฟล์ rpm แล้วนำมาติดตั้งเองบน CentOS 5 เนื่องจากมีการพัฒนาปรับปรุงเวอร์ชั่นอยู่เรื่อยๆ ในที่นี้จะใช้เวอร์ชั่น 1.8.7 ณ วันที่ทดลองติดตั้ง (29/11/54) โดยติดตั้งบน CentOS 5.7 ไฟล์ rpm ที่ต้องใช้จากแผ่นดีวีดี CentOS 5.7 คือ [...]]]></description>
			<content:encoded><![CDATA[<p>Asterisk ถือว่าเป็นโปรแกรมสำหรับทำเป็น VoIP Server ได้ดีโปรแกรมหนึ่ง ด้วยคุณสมบัติที่มากมาย แล้วที่สำคัญยังใช้งานได้ฟรี</p>
<p>การติดตั้ง Asterisk เพื่อทำเป็นเซิร์ฟเวอร์สามารถทำได้สองวิธีหลักๆ คือ</p>
<ul>
<li>ดาวน์โหลดไฟล์ ISO ชื่อ AsteriskNOW ที่ทางทีม Asterisk ได้จัดเตรียมโปรแกรมที่จำเป็นทั้งหมดแล้วสร้างเป็นไฟล์ ISO เพื่อให้ผู้ใช้ดาวน์โหลดไปเขียนใส่แผ่นซีดี เพื่อให้สะดวกต่อการติดตั้งและแทบจะพร้อมใช้งานได้เลย (based on CentOS 5)</li>
<li>ดาวน์โหลดไฟล์ Asterisk Communications Engine แล้วนำมาติดตั้งเอง โดยอาจจะใช้ yum หรือติดตั้งเองด้วยไฟล์ rpm</li>
</ul>
<p>ในบทความนี้จะอธิบายวิธีการติดตั้งแบบหลัง โดยดาวน์โหลดไฟล์ rpm แล้วนำมาติดตั้งเองบน CentOS 5</p>
<p><span id="more-1531"></span></p>
<p>เนื่องจากมีการพัฒนาปรับปรุงเวอร์ชั่นอยู่เรื่อยๆ ในที่นี้จะใช้เวอร์ชั่น 1.8.7 ณ วันที่ทดลองติดตั้ง (29/11/54) โดยติดตั้งบน CentOS 5.7</p>
<p>ไฟล์ rpm ที่ต้องใช้จากแผ่นดีวีดี CentOS 5.7 คือ &#8220;yum-kmod&#8221;</p>
<pre>[root@cent57-64a CentOS]# <strong>rpm -i yum-kmod-1.1.16-16.el5.centos.noarch.rpm</strong></pre>
<hr />
<p>ดาวน์โหลดไฟล์ rpm ต่างๆ ด้านล่างจาก http://packages.digium.com/centos/5/current/x86_64/RPMS/</p>
<pre>[root@cent57-64a digium]# <strong>rpm -i dahdi-firmware-oct6114-064-1.05.01-1_centos5.noarch.rpm</strong>
[root@cent57-64a digium]# <strong>rpm -i dahdi-firmware-oct6114-128-1.05.01-1_centos5.noarch.rpm</strong>
[root@cent57-64a digium]# <strong>rpm -i dahdi-firmware-tc400m-MR6.12-1_centos5.noarch.rpm</strong>
[root@cent57-64a digium]# <strong>rpm -i dahdi-firmware-hx8-2.06-1_centos5.noarch.rpm</strong>
[root@cent57-64a digium]# <strong>rpm -i dahdi-firmware-vpmoct032-1.11.0-1_centos5.noarch.rpm</strong>
[root@cent57-64a digium]# <strong>rpm -i kmod-dahdi-linux-fwload-vpmadt032-2.5.0.2-1_centos5.<span style="color: #0000ff;">2.6.18_274.7.1.el5</span>.x86_64.rpm</strong>
<span style="color: #ff0000;">error: Failed dependencies:</span>
<span style="color: #ff0000;">        kernel-x86_64 = 2.6.18-274.7.1.el5 is needed by kmod-dahdi-linux-fwload-vpmadt032-2.5.0.2-1_centos5.2.6.18_274.7.1.el5.x86_64</span></pre>
<p>หากติดตั้งไฟล์ &#8220;kmod-dahdi-linux-fwload-vpmadt032&#8243; ไม่สำเร็จ ฟ้องข้อผิดพลาดแบบด้านบน เป็นเพราะเวอร์ชั่นของ Kernel ไม่ตรงกับไฟล์</p>
<p>ตรวจสอบเวอร์ชั่น Kernel ที่รันอยู่ และไฟล์ rpm ของ kernel ที่ติดตั้ง</p>
<pre>[root@cent57-64a digium]# <strong>uname -a</strong>
Linux cent57-64a.spalinux.com <span style="color: #ff6600;">2.6.18-274.el5</span> #1 SMP Fri Jul 22 04:43:29 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux

[root@cent57-64a digium]# <strong>rpm -qa | grep kernel</strong>
kernel-headers-<span style="color: #ff6600;">2.6.18-274.el5</span>
kernel-devel-2.6.18-274.el5
kernel-2.6.18-274.el5</pre>
<p>ต้องปรับปรุง (upgrade) เวอร์ชั่นของ kernel เป็นล่าสุด โดยดูตัวอย่างวิธีปรับปรุงได้จาก  <a href="http://spalinux.com/2011/08/upgrade_kernel_on_centos_5-6">upgrade kernel บน CentOS 5.6</a></p>
<p>ตัวอย่างการ upgrade จากไฟล์ rpm ที่ดาวน์โหลดมา สังเกตว่าตัวเลข<span style="color: #0000ff;"> 2.6.18-274.7.1.el5</span> ต้องตรงกับเวอร์ชั่นของ &#8220;kmod-dahdi-linux-fwload-vpmadt032&#8243;</p>
<pre>[root@cent57-64a updates]# <strong>rpm -Uvh kernel-<span style="color: #0000ff;">2.6.18-274.7.1.el5</span>.x86_64.rpm kernel-devel-2.6.18-274.7.1.el5.x86_64.rpm kernel-headers-2.6.18-274.7.1.el5.x86_64.rpm</strong>
Preparing...                ########################################### [100%]
1:kernel                 ########################################### [ 33%]
2:kernel-devel           ########################################### [ 67%]
3:kernel-headers         ########################################### [100%]</pre>
<p>ต้องรีบู๊ตเครื่องหลัง upgrade kernel</p>
<p>ตรวจสอบเวอร์ชั่น kernel อีกครั้ง</p>
<pre>[root@cent57-64a ~]# <strong>uname -a</strong>
Linux cent57-64a.spalinux.com <span style="color: #0000ff;"><strong>2.6.18-274.7.1.el5</strong></span> #1 SMP Thu Oct 20 16:21:01 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux

[root@cent57-64a ~]# <strong>rpm -qa | grep kernel</strong>
kernel-<span style="color: #0000ff;">2.6.18-274.7.1.el5</span>
kernel-devel-2.6.18-274.7.1.el5
kernel-headers-2.6.18-274.7.1.el5</pre>
<p>ทดลองติดตั้งไฟล์ &#8220;kmod-dahdi-linux-fwload-vpmadt032&#8243;</p>
<pre>[root@cent57-64a digium]#<strong> rpm -i kmod-dahdi-linux-fwload-vpmadt032-2.5.0.2-1_centos5.2.6.18_274.7.1.el5.x86_64.rpm</strong>
WARNING: /lib/modules/2.6.18-274.7.1.el5/dahdi/dahdi_vpmadt032_loader.ko needs unknown symbol vpmadtreg_unregister
WARNING: /lib/modules/2.6.18-274.7.1.el5/dahdi/dahdi_vpmadt032_loader.ko needs unknown symbol vpmadtreg_register</pre>
<p>หมายเหตุ ไม่ต้องสนใจ WARNING ที่เกิดขึ้น</p>
<pre>[root@cent57-64a digium]# <strong>rpm -i dahdi-firmware-2.0.3-1_centos5.noarch.rpm</strong></pre>
<hr />
<p>ดาวน์โหลดไฟล์ rpm ต่างๆ ด้านล่างจาก http://packages.asterisk.org/centos/5/current/x86_64/RPMS/ และติดตั้งตามลำดับ</p>
<pre>[root@cent57-64a asterisk]# <strong>rpm -i asterisknow-version-1.7.1-3_centos5.noarch.rpm</strong>
[root@cent57-64a asterisk]# <strong>rpm -i asterisk18-core-1.8.7.0-2_centos5.x86_64.rpm</strong>
[root@cent57-64a asterisk]# <strong>rpm -i kmod-dahdi-linux-2.5.0.2-1_centos5.2.6.18_274.7.1.el5.x86_64.rpm</strong>
[root@cent57-64a asterisk]# <strong>rpm -i dahdi-linux-2.5.0.2-1_centos5.x86_64.rpm</strong>
[root@cent57-64a asterisk]#<strong> rpm -i libopenr2-1.2.0-1_centos5.x86_64.rpm</strong>
[root@cent57-64a asterisk]# <strong>rpm -i libpri-1.4.11.5-1_centos5.x86_64.rpm</strong>
[root@cent57-64a asterisk]#<strong> rpm -i libss7-1.0.2-1_centos5.x86_64.rpm</strong>
[root@cent57-64a asterisk]#<strong> rpm -i libtonezone-2.5.0.2-1_centos5.x86_64.rpm</strong>
[root@cent57-64a asterisk]#<strong> rpm -i asterisk18-dahdi-1.8.7.0-2_centos5.x86_64.rpm</strong>
[root@cent57-64a asterisk]#<strong> rpm -i asterisk18-doc-1.8.7.0-2_centos5.x86_64.rpm</strong>
[root@cent57-64a asterisk]# <strong>rpm -i asterisk18-voicemail-1.8.7.0-2_centos5.x86_64.rpm</strong>
[root@cent57-64a asterisk]#<strong> rpm -i asterisk-sounds-core-en-gsm-1.4.21-1_centos5.noarch.rpm</strong>
[root@cent57-64a asterisk]#<strong> rpm -i asterisk18-configs-1.8.7.0-2_centos5.x86_64.rpm</strong></pre>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a href="http://spalinux.com/2011/08/upgrade_kernel_on_centos_5-6">upgrade kernel บน CentOS 5.6</a></li>
<li><a href="http://spalinux.com/2011/12/configure-asterisk-for-sip-client">คอนฟิก Asterisk เพื่อรองรับ SIP Client</a></li>
<li><a href="http://www.asterisk.org/" target="_blank">Asterisk &#8211; The Open Source Telephony Projects</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2011/12/install-asterisk-1-8-on-centos-5/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>เก็บข้อมูลการใช้เว็บผ่าน Linux Router ด้วย Squid Transparent Proxy</title>
		<link>http://spalinux.com/2011/11/how-to-log-web-traffic-via-linux-router-using-squid-transparent-proxy</link>
		<comments>http://spalinux.com/2011/11/how-to-log-web-traffic-via-linux-router-using-squid-transparent-proxy#comments</comments>
		<pubDate>Fri, 25 Nov 2011 17:44:17 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Networking]]></category>
		<category><![CDATA[Proxy]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[router]]></category>
		<category><![CDATA[Squid]]></category>
		<category><![CDATA[Transparent Proxy]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=1519</guid>
		<description><![CDATA[ด้วยกฎหมาย พรบ. ที่เริ่มมีผลบังคับ ให้เก็บข้อมูลการใช้เว็บอินเตอร์เน็ต ว่าเป็นใครใช้ เข้าเว็บไหน เมื่อไร ถ้าเป็นเครื่องที่เราสามารถดูแลได้ วิธีหนึ่งที่ทำได้คือ คอนฟิก Proxy ใน ฺBrowser ของแต่ละเครื่องที่จะใช้อินเตอร์เน็ต ชี้ไปยัง Proxy Server ที่ทำหน้าที่เก็บข้อมูลการใช้งาน แต่ถ้าเราไม่สามารถควบคุมดูแลได้ หรือเครื่องที่ใช้งานมีการเปลี่ยนแปลงตลอดเวลา เช่นให้บริการอินเตอร์เน็ต สำหรับผู้มาติดต่องาน ถ้าเป็นแบบนี้ แนะนำให้คอนฟิก Transparent Proxy บน Linux Router เพื่อให้ทำหน้าที่เก็บข้อมูลการใช้เว็บโดยอัตโนมัติ ระบบทดสอบ Linux Router ติดตั้ง Squid มีพอร์ต LAN สองพอร์ต eth0, eth1 เครื่องผู้ใช้งานทั้งหมดต่อพอร์ต eth0 ของ Linux Router พอร์ต eth1 ของ Linux Router ต่อไปยังอินเตอร์เน็ต Redirect Web Traffic ให้เข้าไปใน Proxy [...]]]></description>
			<content:encoded><![CDATA[<p>ด้วยกฎหมาย พรบ. ที่เริ่มมีผลบังคับ ให้เก็บข้อมูลการใช้เว็บอินเตอร์เน็ต ว่าเป็นใครใช้ เข้าเว็บไหน เมื่อไร</p>
<p>ถ้าเป็นเครื่องที่เราสามารถดูแลได้ วิธีหนึ่งที่ทำได้คือ คอนฟิก Proxy ใน ฺBrowser ของแต่ละเครื่องที่จะใช้อินเตอร์เน็ต ชี้ไปยัง Proxy Server ที่ทำหน้าที่เก็บข้อมูลการใช้งาน</p>
<p>แต่ถ้าเราไม่สามารถควบคุมดูแลได้ หรือเครื่องที่ใช้งานมีการเปลี่ยนแปลงตลอดเวลา เช่นให้บริการอินเตอร์เน็ต สำหรับผู้มาติดต่องาน</p>
<p>ถ้าเป็นแบบนี้ แนะนำให้คอนฟิก Transparent Proxy บน Linux Router เพื่อให้ทำหน้าที่เก็บข้อมูลการใช้เว็บโดยอัตโนมัติ</p>
<p><span id="more-1519"></span></p>
<h4>ระบบทดสอบ</h4>
<ul>
<li>Linux Router ติดตั้ง Squid มีพอร์ต LAN สองพอร์ต eth0, eth1</li>
<li>เครื่องผู้ใช้งานทั้งหมดต่อพอร์ต eth0 ของ Linux Router</li>
<li>พอร์ต eth1 ของ Linux Router ต่อไปยังอินเตอร์เน็ต</li>
</ul>
<h4></h4>
<h4>Redirect Web Traffic ให้เข้าไปใน Proxy Server</h4>
<p>เริ่มแรกต้องบังคับให้การใช้เว็บอินเตอร์เน็ตทั้งหมดต้องผ่าน Linux Router เข้าพอร์ต eth0 แล้วออกอินเตอร์เน็ตทางพอร์ต eth1</p>
<p>ถ้าเราต้องการให้การใช้เว็บ (TCP Port 80) ทั้งหมด เข้าพอร์ต eth0 ต้องผ่านเข้าไปใน Proxy Server (TCP Port 3128) ก่อน เพื่อให้เก็บข้อมูลการใช้งาน สามารถใช้คำสั่ง iptables ตามตัวอย่าง</p>
<pre>
[root@router ~]# <b>iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128</b>
</pre>
<h4>คอนฟิก Squid ให้ทำหน้าที่เป็น Transparent Proxy</h4>
<p>อย่างที่สองคือต้องแก้ไขไฟล์คอนฟิก Squid ซึ่งอยู่ใน /etc/squid/squid.conf</p>
<p>การแก้ไขคอนฟิกขึ้นอยู่กับเวอร์ชั่นของ Squid ที่ติดตั้ง</p>
<p>คำแนะนำ : เพื่อคุณสมบัติและประสิทธิภาพที่ดีกว่า แนะนำให้ใช้เวอร์ชั่นใหม่ล่าสุดที่สามารถติดตั้งได้</p>
<p><span style="text-decoration: underline;"><strong>เวอร์ชั่นเก่ากว่า 2.6</strong></span></p>
<pre>
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
</pre>
<p><span style="text-decoration: underline;"><strong>เวอร์ชั่น 2.6 &#8211; 3.0</strong></span></p>
<pre>
http_port 3128 transparent
</pre>
<p><span style="text-decoration: underline;"><strong>ตั้งแต่เวอร์ชั่น 3.1</strong></span></p>
<pre>
http_port 3128 intercept
</pre>
<p>หรือ</p>
<pre>
http_port 3128 transparent
</pre>
<p>หลังการแก้ไขคอนฟิกไฟล์ของ squid ต้องรีสตาร์ตเซอร์วิส squid</p>
<pre>
[root@router ~]# <b>service squid restart</b>
</pre>
<p>สามารถดูข้อมูลการใช้งานเว็บได้ในไฟล์ /var/log/squid/access.log</p>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a href="http://spalinux.com/2008/05/configure_squid_proxy_server">คอนฟิก Squid Proxy Server</a></li>
<li><a href="http://www.squid-cache.org/" target="_blank">squid : Optimising Web Delivery</a></li>
<li><a href="http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch32_:_Controlling_Web_Access_with_Squid" target="_blank">Quick HOWTO : Ch32 : Controlling Web Access with Squid</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2011/11/how-to-log-web-traffic-via-linux-router-using-squid-transparent-proxy/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ตัดบางส่วนจากข้อความภาษาไทยด้วย PHP Multibyte String</title>
		<link>http://spalinux.com/2011/11/get-part-from-thai-sentence-using-php-multibyte-string</link>
		<comments>http://spalinux.com/2011/11/get-part-from-thai-sentence-using-php-multibyte-string#comments</comments>
		<pubDate>Tue, 22 Nov 2011 14:02:09 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Thai]]></category>
		<category><![CDATA[mbstring]]></category>
		<category><![CDATA[mutibyte string]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[substr]]></category>
		<category><![CDATA[thai]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=1503</guid>
		<description><![CDATA[โปรแกรมประเภทเว็บบอร์ดหรือเว็บ Social ที่ต้องการตัดบางส่วนจากข้อความหรือบทความที่ยาว เพื่อเป็นตัวอย่าง แสดงในหน้าแรก หรือการ Share หัวข้อบทความเป็นตัวอย่าง จากเว็บไซต์อื่นๆ หากเป็นภาษาอังกฤษ สามารถทำได้อย่างง่าย แต่ปัญหาคือเวลาตัดคำภาษาไทย มักจะไม่ได้ตามที่ต้องการ และอาจมีอักษรประหลาดแสดงขึ้นมาด้วย ในบทความนี้จะแสดงการใช้ฟังก์ชั่น PHP Multibyte String เพื่อตัดบางส่วนของข้อความได้ตามต้องการได้ หมายเหตุ เครื่องที่ใช้ทดสอบ ตั้งค่าภาษาในรูปแบบ UTF-8 $ echo $LANG en_US.UTF-8 ถ้าเป็นภาษาอังกฤษ สามารถเขียนโปรแกรม PHP โดยใช้ฟังก์ชั่น substr เช่นต้องการข้อความโดยตัดตั้งแต่อักษรตัวแรก (0) ยาวไปจำนวน 7 ตัว &#60;?php $en_msg = 'This is an example'; print substr($en_msg, 0, 7) . "\n"; ?&#62; รันโปรแกรม ก็จะได้ข้อความตามที่ต้องการ $ php [...]]]></description>
			<content:encoded><![CDATA[<p>โปรแกรมประเภทเว็บบอร์ดหรือเว็บ Social ที่ต้องการตัดบางส่วนจากข้อความหรือบทความที่ยาว เพื่อเป็นตัวอย่าง แสดงในหน้าแรก หรือการ Share หัวข้อบทความเป็นตัวอย่าง จากเว็บไซต์อื่นๆ</p>
<p>หากเป็นภาษาอังกฤษ สามารถทำได้อย่างง่าย แต่ปัญหาคือเวลาตัดคำภาษาไทย มักจะไม่ได้ตามที่ต้องการ และอาจมีอักษรประหลาดแสดงขึ้นมาด้วย</p>
<p>ในบทความนี้จะแสดงการใช้ฟังก์ชั่น PHP Multibyte String เพื่อตัดบางส่วนของข้อความได้ตามต้องการได้</p>
<p><span id="more-1503"></span>หมายเหตุ เครื่องที่ใช้ทดสอบ ตั้งค่าภาษาในรูปแบบ UTF-8</p>
<pre>$ <strong>echo $LANG</strong>
en_US.UTF-8</pre>
<p>ถ้าเป็นภาษาอังกฤษ สามารถเขียนโปรแกรม PHP โดยใช้ฟังก์ชั่น substr เช่นต้องการข้อความโดยตัดตั้งแต่อักษรตัวแรก (0) ยาวไปจำนวน 7 ตัว</p>
<pre><!--?php <br ?-->&lt;?php
$en_msg = 'This is an example';
print <span style="color: #0000ff;">substr($en_msg, 0, 7)</span> . "\n";
?&gt;</pre>
<p>รันโปรแกรม ก็จะได้ข้อความตามที่ต้องการ</p>
<pre>$ <strong>php test-substr.php</strong>
This is</pre>
<p>แต่ถ้าเป็นข้อความภาษาไทย ข้อความที่ตัดได้จะไม่ใช่ เช่น ต้องการตั้งแต่อักษรตัวแรก (0) ยาวไปจำนวน 15 ตัวอักษร&lt;</p>
<pre><!--?php <br ?-->&lt;?php
$th_msg = 'ตัวอย่างข้อความภาษาไทยที่ใช้ทดสอบ';
print substr($th_msg, 0, 15) . "\n";
?&gt;</pre>
<p>ทดลองรันจะได้ตามตัวอย่าง</p>
<pre>$ <strong>php test-substr.php</strong>
ตัวอย</pre>
<p>เนื่องมาจากฟังก์ชั่น substr ไม่สามารถจัดการตัวอักษร UTF-8 ได้อย่างถูกต้อง จำเป็นต้องเปลี่ยนไปใช้ฟังก์ชั่น Multibyte String substr (mb_substr)</p>
<p>รูปแบบการใช้ฟังก์ชั่น mb_substr จะเหมือนกับ substr เพียงแต่ต้องระบุรูปแบบของภาษาด้วย&lt;</p>
<pre><!--?php <br ?-->&lt;?php
$th_msg = 'ตัวอย่างข้อความภาษาไทยที่ใช้ทดสอบ';
print <span style="color: #0000ff;">mb_substr($th_msg, 0, 15, 'UTF-8')</span>;
?&gt;</pre>
<p>ทดลองรันโปรแกรม</p>
<pre>$ <strong>php test-substr.php</strong>
<span style="color: #ff0000;">PHP Fatal error:  Call to undefined function mb_substr() in /home/user1/mbstring/test-substr.php on line 3</span>
หากขึ้น error แบบนี้ แสดงว่าไม่ได้ติดตั้งโมดูล Multibyte String ใน PHP</pre>
<p>ต้องคอมไพล์ PHP ใหม่ หรือติดตั้งไฟล์ rpm ชื่อ php-mbstring เพิ่มเติม</p>
<p>สามารถรัน php ตามด้วยออปชั่น &#8216;-m&#8217; เพื่อดูว่ามีโมดูล mbstring แล้วหรือไม่</p>
<p>หากติดตั้งเพิ่มเติมเรียบร้อยแล้ว</p>
<pre>$ <strong>php -m | grep mbstring</strong>
mbstring</pre>
<p>ทดลองรันอีกครั้ง ก็จะขึ้นจำนวนตัวอักษรถูกต้อง</p>
<pre>$ <strong>php test-substr.php</strong>
ตัวอย่างข้อความ</pre>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a href="http://www.php.net/manual/en/function.substr.php" target="_blank">PHP: substr &#8211; Manual</a></li>
<li><a href="http://www.php.net/manual/en/function.mb-substr.php" target="_blank">PHP: mb_substr &#8211; Manual</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2011/11/get-part-from-thai-sentence-using-php-multibyte-string/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>เขียนโปรแกรมด้วย PHP DOM เพื่อดึงข้อมูลจากไฟล์ HTML</title>
		<link>http://spalinux.com/2011/11/programming-using-php-dom-to-parse-html-file</link>
		<comments>http://spalinux.com/2011/11/programming-using-php-dom-to-parse-html-file#comments</comments>
		<pubDate>Sat, 12 Nov 2011 17:02:54 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=1493</guid>
		<description><![CDATA[ได้รับข้อมูลในรูปแบบไฟล์ HTML เพื่อให้ดึงค่าจากบางฟิลด์ (field) ออกมา ใช้ในการทำรายงาน ในตอนแรกลองเขียนโปรแกรม PHP ขึ้นมาเอง โดยใช้ Regular Expression ทำไปซักพัก เริ่มยากขึ้น เหตุเพราะรูปแบบอันหลากหลายของไฟล์ HTML ไม่ว่าจะเป็นตัวอักษรพิมพ์ใหญ่เล็ก การเรียงลำดับ tag การเว้นวรรค พบวิธีการดึงข้อมูลโดยใช้ PHP DOM ง่ายขึ้นเยอะ เลยนำมาแชร์เล่าสู่กันฟัง ตัวอย่างไฟล์ test.html เพื่อจะดึงข้อมูล $ cat test.html &#60;html&#62; &#60;head&#62; &#60;title&#62;My Page&#60;/title&#62; &#60;/head&#62; &#60;body&#62; &#60;table&#62;  &#60;tr&#62;   &#60;td id="head_id"&#62;Id&#60;/td&#62;   &#60;td id="head_name"&#62;Name&#60;/td&#62;  &#60;/tr&#62;  &#60;tr&#62;   &#60;td id="data_id1"&#62;&#60;a href="view.php?id=1"&#62;1&#60;/a&#62;&#60;/td&#62;   &#60;td id="data_name1"&#62;Alice&#60;/td&#62;  &#60;/tr&#62;  &#60;tr&#62;   [...]]]></description>
			<content:encoded><![CDATA[<p>ได้รับข้อมูลในรูปแบบไฟล์ HTML เพื่อให้ดึงค่าจากบางฟิลด์ (field) ออกมา ใช้ในการทำรายงาน</p>
<p>ในตอนแรกลองเขียนโปรแกรม PHP ขึ้นมาเอง โดยใช้ Regular Expression ทำไปซักพัก เริ่มยากขึ้น เหตุเพราะรูปแบบอันหลากหลายของไฟล์ HTML ไม่ว่าจะเป็นตัวอักษรพิมพ์ใหญ่เล็ก การเรียงลำดับ tag การเว้นวรรค</p>
<p>พบวิธีการดึงข้อมูลโดยใช้ PHP DOM ง่ายขึ้นเยอะ เลยนำมาแชร์เล่าสู่กันฟัง</p>
<p><span id="more-1493"></span></p>
<p>ตัวอย่างไฟล์ test.html เพื่อจะดึงข้อมูล</p>
<pre>$ <strong>cat test.html</strong>

&lt;html&gt;
&lt;head&gt;
&lt;title&gt;My Page&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;table&gt;
 &lt;tr&gt;
  &lt;td id="head_id"&gt;Id&lt;/td&gt;
  &lt;td id="head_name"&gt;Name&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td id="data_id1"&gt;&lt;a href="view.php?id=1"&gt;1&lt;/a&gt;&lt;/td&gt;
  &lt;td id="data_name1"&gt;Alice&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td id="data_id2"&gt;&lt;a href="view.php?id=2"&gt;2&lt;/a&gt;&lt;/td&gt;
  &lt;td id="data_name2"&gt;Bob&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td id="data_id3"&gt;&lt;a href="view.php?id=3"&gt;3&lt;/a&gt;&lt;/td&gt;
  &lt;td id="data_name3"&gt;Carl&lt;/td&gt;
 &lt;/tr&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<h4>เริ่มต้นโหลดไฟล์ html ด้วย php dom</h4>
<p>เขียนไฟล์ php เริ่มต้นโหลดไฟล์ html</p>
<pre>&lt;?php
$html = new <span style="color: #0000ff;">DOMDocument</span>();
$html-&gt;<span style="color: #0000ff;">loadHTMLFile</span>('test.html');
var_dump($html);
?&gt;</pre>
<p>คำอธิบาย</p>
<ul>
<li>สร้าง object จาก class ชื่อ DOMDocument ตั้งไว้เป็นตัวแปรชื่อ $html</li>
<li>เรียก method ชื่อ loadHTMLFile เพื่อโหลดไฟล์ HTML ที่ต้องการดึงข้อมูล (parse)</li>
</ul>
<p>ทดลองรันโปรแกรม</p>
<pre>$ <strong>php parse-dom.php</strong>
<span style="color: #ff0000;">PHP Fatal error:  Class 'DOMDocument' not found in /var/www/html/php/dom/parse-dom.php on line 3</span>
$</pre>
<p>รันแล้ว error แบบนี้ เพราะว่าไม่มี php module ที่ชื่อ dom</p>
<p>ต้องติดตั้ง extension ชื่อ libxml เพิ่มเติม ทำได้สองแบบ</p>
<p>หากคอมไพล์ php เอง ต้อง คอมไพล์ใหม่ด้วยการระบุออปชั่น &#8211;enable-libxml เพิ่มเติมตอนรัน configure</p>
<p>แต่ถ้าติดตั้ง php จาก rpm บน Fedora, RedHat หรือ CentOS ต้องติดตั้งไฟล์ php-xml เพิ่มเติม</p>
<p>ตัวอย่างติดตั้ง rpm เพิ่มเติม บน CentOS 5.5 (updates)</p>
<pre>[root@web updates]# <strong>rpm -ivh php53-xml-5.3.3-1.el5.x86_64.rpm</strong>
Preparing...                ########################################### [100%]
   1:php53-xml              ########################################### [100%]</pre>
<p>รัน php ด้วยออปชั่น -m เพื่อดู  module ที่เพิ่มขึ้นมา</p>
<pre>$ <strong>php -m</strong>
...
<span style="color: #0000ff;">dom</span>
wddx
xmlreader
xmlwriter
xsl</pre>
<p>ทดลองรันโปรแกรมอีกครั้ง</p>
<pre>$ <strong>php parse-dom.php</strong>
object(DOMDocument)#1 (0) {
}</pre>
<h4>ดึงข้อมูลตาม html tag ที่ต้องการ</h4>
<p>ทำได้โดยง่ายด้วย method ชื่อ getElementsByTagName() ระบุชื่อ tag ที่ต้องการค้นหา</p>
<p>ตัวอย่าง ต้องการดึงข้อมูลที่อยู่ใน tag &#8220;td&#8221; หรือระหว่าง &lt;td&gt;&lt;/td&gt;</p>
<pre>&lt;?php
$html = new DOMDocument();
$html-&gt;loadHTMLFile('test.html');
$tds = $html-&gt;<span style="color: #0000ff;">getElementsByTagName</span>('td');
foreach ($tds as $td) {
    print $td-&gt;<span style="color: #0000ff;">nodeValue</span> . "\n";
}
?&gt;</pre>
<p>ทดลองรันโปรแกรม จะเห็นผลลัพธ์ที่ได้</p>
<pre>$ <strong>php parse-dom.php</strong>
Id
Name
1
Alice
2
Bob
3
Carl</pre>
<h4>ดึงข้อมูลตาม id ในไฟล์ html ที่ต้องการ</h4>
<p>ทำได้โดยใช้ method ชื่อ <span style="color: #0000ff;">getElementById</span>() ระบุ id ที่ต้องการค้นหา</p>
<p>ตัวอย่าง ต้องการดึงข้อมูลที่อยู่ใน tag ที่ระบุด้วย id &#8220;data_name2&#8243;</p>
<pre>&lt;?php
$html = new DOMDocument();
$html-&gt;loadHTMLFile('test.html');
$id2 = $html-&gt;<span style="color: #0000ff;">getElementById</span>('data_name2');
print $id2-&gt;<span style="color: #0000ff;">nodeValue</span> . "\n";
?&gt;</pre>
<p>ทดลองรันโปรแกรม จะเห็นผลลัพธ์ที่ได้</p>
<pre>$ <strong>php parse-dom.php</strong>
Bob</pre>
<p>ลองนำไปต่อยอด พัฒนากันต่อครับ</p>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a href="http://www.php.net/manual/en/book.dom.php" target="_blank">PHP: DOM &#8211; Manual</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2011/11/programming-using-php-dom-to-parse-html-file/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ปรับหน้าเว็บเพจให้พอดีหน้าจอ iPhone</title>
		<link>http://spalinux.com/2011/11/how-to-make-web-page-fit-on-iphone-screen</link>
		<comments>http://spalinux.com/2011/11/how-to-make-web-page-fit-on-iphone-screen#comments</comments>
		<pubDate>Mon, 07 Nov 2011 17:47:56 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[viewport]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=1475</guid>
		<description><![CDATA[อยู่ในช่วงปรับเว็บเพจที่พัฒนาใช้งานบน PC ให้สามารถรันบน browser ใน มือถือได้ด้วย เลยต้องปรับแต่งหน้าจอเพื่อให้ผู้ใช้งานได้สะดวก ในที่นี้ขอแชร์วิธีการเพิ่มขนาดเว็บเพจ เพื่อให้พอดีกับหน้าจอ Safari บน iPhone ด้วยการใช้ &#8220;viewport&#8221; ตัวอย่างไฟล์ HTML แบบง่ายๆ สำหรับหน้าจอการ Login &#60;html&#62; &#60;head&#62; &#60;title&#62;Login&#60;/title&#62; &#60;/head&#62; &#60;body&#62; &#60;div style="padding: 5px; background-color: #cccccc"&#62; &#60;form&#62; Username:&#60;br&#62; &#60;input type="text" name="username"&#62; &#60;br&#62; Password:&#60;br&#62; &#60;input type="text" name="password"&#62;&#60;br&#62; &#60;br&#62; &#60;input type="submit" value="login"&#62; &#60;/form&#62; &#60;/div&#62; &#60;/body&#62; &#60;/html&#62; เมื่อเปิดด้วย Safari บน iPhone จะเป็นแบบนี้ จะเห็นว่า ขนาดของฟอร์มมีขนาดเล็กเกินไป ผู้ใช้จำต้องขยายขนาด [...]]]></description>
			<content:encoded><![CDATA[<p>อยู่ในช่วงปรับเว็บเพจที่พัฒนาใช้งานบน PC ให้สามารถรันบน browser ใน มือถือได้ด้วย เลยต้องปรับแต่งหน้าจอเพื่อให้ผู้ใช้งานได้สะดวก</p>
<p>ในที่นี้ขอแชร์วิธีการเพิ่มขนาดเว็บเพจ เพื่อให้พอดีกับหน้าจอ Safari บน iPhone ด้วยการใช้ &#8220;viewport&#8221;</p>
<p><span id="more-1475"></span></p>
<p>ตัวอย่างไฟล์ HTML แบบง่ายๆ สำหรับหน้าจอการ Login</p>
<pre>&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Login&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div style="padding: 5px; background-color: #cccccc"&gt;
&lt;form&gt;
Username:&lt;br&gt;
&lt;input type="text" name="username"&gt;
&lt;br&gt;
Password:&lt;br&gt;
&lt;input type="text" name="password"&gt;&lt;br&gt;
&lt;br&gt;
&lt;input type="submit" value="login"&gt;
&lt;/form&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>เมื่อเปิดด้วย Safari บน iPhone จะเป็นแบบนี้</p>
<p><a href="http://spalinux.com/wp-content/uploads/2011/11/Picture-001.png"><img class="alignnone size-full wp-image-1477" title="Picture 001" src="http://spalinux.com/wp-content/uploads/2011/11/Picture-001.png" alt="" width="447" height="211" /></a></p>
<p>จะเห็นว่า ขนาดของฟอร์มมีขนาดเล็กเกินไป ผู้ใช้จำต้องขยายขนาด เพื่อจะกดใช้งาน ทำให้ไม่สะดวก</p>
<p>ได้ไอเดียมาจากหน้า login ของโปรแกรม wordpress โดยต้องเพิ่ม tag meta &#8220;viewport&#8221; ในไฟล์ HTML เพื่อให้ขนาดของเว็บเพจมีขนาดใหญ่ขึ้น</p>
<pre>&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Login&lt;/title&gt;
<span style="color: #0000ff;">&lt;meta name="viewport" content="width=320; initial-scale=0.9; maximum-scale=1.0; user-scalable=0;" /&gt;</span>
&lt;/head&gt;
&lt;body&gt;
&lt;div style="padding: 5px; background-color: #cccccc"&gt;
&lt;form&gt;
Username:&lt;br&gt;
&lt;input type="text" name="username"&gt;
&lt;br&gt;
Password:&lt;br&gt;
&lt;input type="text" name="password"&gt;&lt;br&gt;
&lt;br&gt;
&lt;input type="submit" value="login"&gt;
&lt;/form&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>เมื่อเปิดด้วย Safari บน iPhone ขนาดก็จะเพิ่มขึ้นมา</p>
<p><a href="http://spalinux.com/wp-content/uploads/2011/11/Picture-002.png"><img class="alignnone size-full wp-image-1478" title="Picture 002" src="http://spalinux.com/wp-content/uploads/2011/11/Picture-002.png" alt="" width="448" height="285" /></a><br />
สามารถปรับเปลี่ยนตามที่ต้องการได้ ทดลองดูให้เหมาะกับเว็บเพจของคุณ</p>
<pre>&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Login&lt;/title&gt;
<span style="color: #0000ff;">&lt;meta name="viewport" content="width=100%; initial-scale=1.4; maximum-scale=1.4; user-scalable=0;" /&gt; </span>&lt;/head&gt;
&lt;body&gt;
&lt;div style="padding: 5px; background-color: #cccccc"&gt;
&lt;form&gt;
Username:&lt;br&gt;
&lt;input type="text" name="username"&gt;
&lt;br&gt;
Password:&lt;br&gt;
&lt;input type="text" name="password"&gt;&lt;br&gt;
&lt;br&gt;
&lt;input type="submit" value="login"&gt;
&lt;/form&gt;
&lt;/div&gt;</pre>
<pre>&lt;/body&gt;
&lt;/html&gt;</pre>
<p><a href="http://spalinux.com/wp-content/uploads/2011/11/Picture-003.png"><img class="alignnone size-full wp-image-1479" title="Picture 003" src="http://spalinux.com/wp-content/uploads/2011/11/Picture-003.png" alt="" width="448" height="398" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2011/11/how-to-make-web-page-fit-on-iphone-screen/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

