<?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>PHP Concept</title>
	<atom:link href="http://phpconcept.com/feed" rel="self" type="application/rss+xml" />
	<link>http://phpconcept.com</link>
	<description></description>
	<lastBuildDate>Tue, 06 Dec 2011 16:02:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>เมื่ออักษรภาษาไทยกลายเป็น ??????</title>
		<link>http://phpconcept.com/archives/25</link>
		<comments>http://phpconcept.com/archives/25#comments</comments>
		<pubDate>Tue, 15 Feb 2005 13:29:18 +0000</pubDate>
		<dc:creator>wachira</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://phpconcept.wordpress.com/?p=25</guid>
		<description><![CDATA[ปรับปรุง: 7 สิงหาคม 2551 ผมเคยติดตั้งและใช้งาน PHP และ MySQL มาหลายครั้งหลายหน ไม่ว่าจะเป็นการติดตั้งบน Linux หรือ Windows ทั้งที่ Compile เองและติดตั้งแบบ package ซึ่งการติดตั้งบน Windows ดูจะติดตั้งอย่างสะดวกและรวดเร็วมากขึ้น เพราะมีผู้ทำโปรแกรมช่วยติดตั้ง Apache PHP และ MySQL อัตโนมัติ เช่น AppServ  และ XAMPP  เป็นต้น แต่คราวนี้ผมเจอปัญหาหลังจากการติดตั้ง Apache PHP และ MySQL บนระบบปฏิบัติการ Windows เพราะเมื่อทดลอง query ข้อมูลที่เป็นภาษาไทยจาก MySQL กลับพบว่าได้ผลลัพธ์ในการแสดงผลภาษาไทยที่ไม่ถูกต้อง คือตัวอักษรภาษาไทยจะแสดงออกมาเป็นเครื่องหมายคำถาม (?) ทั้งหมด ในขณะที่ผมได้เพิ่ม option ที่เกี่ยวกับการ set character ให้เป็นภาษาไทยใน my.ini แล้ว ดังตัวอย่างต่อไปนี้ [...]]]></description>
			<content:encoded><![CDATA[<p>ปรับปรุง: 7 สิงหาคม 2551</p>
<p>ผมเคยติดตั้งและใช้งาน PHP และ MySQL มาหลายครั้งหลายหน ไม่ว่าจะเป็นการติดตั้งบน Linux หรือ Windows ทั้งที่ Compile เองและติดตั้งแบบ package ซึ่งการติดตั้งบน Windows ดูจะติดตั้งอย่างสะดวกและรวดเร็วมากขึ้น เพราะมีผู้ทำโปรแกรมช่วยติดตั้ง Apache PHP และ MySQL อัตโนมัติ เช่น <a href="http://www.appservnetwork.com/" target="_blank">AppServ</a>  และ <a href="http://www.apachefriends.org/en/index.html" target="_blank">XAMPP</a>  เป็นต้น<span id="more-25"></span></p>
<p>แต่คราวนี้ผมเจอปัญหาหลังจากการติดตั้ง Apache PHP และ MySQL บนระบบปฏิบัติการ Windows เพราะเมื่อทดลอง query ข้อมูลที่เป็นภาษาไทยจาก MySQL กลับพบว่าได้ผลลัพธ์ในการแสดงผลภาษาไทยที่ไม่ถูกต้อง คือตัวอักษรภาษาไทยจะแสดงออกมาเป็นเครื่องหมายคำถาม (?) ทั้งหมด ในขณะที่ผมได้เพิ่ม option ที่เกี่ยวกับการ set character ให้เป็นภาษาไทยใน my.ini แล้ว ดังตัวอย่างต่อไปนี้</p>
<pre class="brush: text; gutter: true">[mysqld]
default-character-set=tis620</pre>
<p>หลังจากที่ได้ทำการตรวจสอบแล้วในฐานข้อมูล MySQL โดยใช้โปรแกรม เช่น MySQL-Front (http://www.mysqlfront.de/) แล้วก็พบว่าข้อมูลที่เก็บอยู่ก็เป็นภาษาไทยถูกต้อง และเมื่อลองดูตัวแปรต่างๆ ที่เกี่ยวข้องกับ character ต่างๆ ก็พบค่าต่อไปนี้</p>
<p>- character_set_client = tis620<br />
- character_set_connection = tis620<br />
- character_set_database = tis620<br />
- character_set_results = tis620<br />
- character_set_server = tis620<br />
- character_set_system = utf8<br />
- collation_connection = tis620_thai_ci<br />
- collation_database = tis620_thai_ci<br />
- collation_server = tis620_thai_ci</p>
<p>เมื่อลองไปค้นในเว็บไซท์ของ MySQL ในส่วนที่เกี่ยวข้องกับกลุ่มอักขระ (character set) ก็พบส่วนที่เกี่ยวข้องกับกลุ่มอักขระ ใน Chapter 10. Character Set Support (http://dev.mysql.com/doc/mysql/en/charset.html) ซึ่งได้อธิบายความหมายของ Character set ไว้ว่าคือ กลุ่มของสัญลักษณ์และการ encode อักขระต่างๆ</p>
<p>ส่วน collation หมายถึง กลุ่มของกฎเกณฑ์ที่ใช้ในการเปรียบเทียบอักขระต่างๆ ใน กลุ่มอักขระหนึ่งๆ  สำหรับภาษาไทยมีกลุ่มอักขระคือ tis620 และมี collation คือ tis620_thai_ci</p>
<p>ทั้งนี้ระดับการใช้งานของ charcter set และ collation มีอยู่ด้วยกันทั้งหมด 4 ระดับคือ server database table และ connection</p>
<p>สำหรับปัญหาที่ผมเจอนี้ ผมมุ่งประเด็นไปที่ connection โดยตั้งสมมติฐานว่าปัญหาของการแสดงผลภาษาไทยที่ผิดพลาดน่าจะเกิดระหว่างการติดต่อระหว่าง client (php script) กับ server (MySQL server)</p>
<p>สิ่งที่เกิดขึ้นระหว่างการติดต่อระหว่าง client และ server คือ client จะส่ง SQL statement เช่น query ต่างๆ ให้กับ server หลังจากนั้น server ก็จะตอบกลับ เช่น การส่งผลลัพธ์ของ SQL statement นั้นๆ กลับไปให้ client ในระหว่างที่มีการติดต่อกันนี้จะมีส่วนของ character set และ collation เข้ามาเกี่ยวข้อง คือ</p>
<ul>
<li>Character set ของ client ในขณะที่ส่ง query ให้กับ server: มีตัวแปรที่เกี่ยวข้องคือ<strong>character_set_client</strong></li>
<li>Character set ที่ server แปล query หลังจากที่ได้รับจาก client: ตัวแปรที่เกี่ยวข้องคือ <strong>character_set_connection</strong> และ <strong>collation_connection</strong> โดย server จะใช้ค่าของตัวแปร character_set_connection ในการแปล character set ของ query ที่ client ส่งมา ( character_set_client) ให้เป็นตามค่าที่กำหนดไว้ในตัวแปร character_set_connection</li>
<li>Character set ที่ server จะทำการแปลก่อนที่จะส่งผลลัพธ์กลับไปให้แก่ client: ตัวแปรที่เกี่ยวข้องคือ <strong>character_set_results</strong></li>
</ul>
<p><a href="http://www.phpconcept.com/wp-content/uploads/mysql_charset.gif"><img class="aligncenter size-full wp-image-26" title="mysql_charset" src="http://www.phpconcept.com/wp-content/uploads/mysql_charset.gif" alt="" width="435" height="169" /></a></p>
<p>ดังนั้นตัวแปรที่ควรจะทำการตรวจสอบก่อนก็คือ character_set_results ว่าค่าของตัวแปรนั้นเป็นค่าอะไรหรือเป็นค่าที่เกี่ยวข้องกับปัญหานี้หรือไม่ ผมทดสอบโดยการกำหนดค่าให้ chacter_set_results มีค่าเป็น tis620 ก่อนจะทำการส่ง query จริงๆ ไปให้แก่ MySQL โดยการใช้คำสั่งต่อไปนี้</p>
<pre class="brush: php; gutter: true">$charset = "SET character_set_results=tis620";
mysql_query($charset) or die("Invalid query: " . mysql_error());</pre>
<p>ผลปรากฎว่าการกำหนดค่าให้ตัวแปร character_set_results มีค่าเป็น tis620 ดังกล่าว สามารถช่วยแก้ปัญหาแสดงผลภาษาไทยให้ถูกต้องได้ นอกจากนี้สามารถใช้คำสั่งต่อไปนี้ในการแก้ปัญหาภาษาไทย คือ</p>
<p>SET NAMES &#8217;tis620&#8242; ซึ่งมีค่าเทียบเท่ากับ</p>
<p>SET character_set_client=&#8217;tis620&#8242;<br />
SET character_set_results=&#8217;tis620&#8242;<br />
SET character_set_connection=&#8217;tis620&#8242;</p>
<p>SET character_set_results=NULL ซึ่งมีความหมายคือ ไม่ต้องการให้ server ทำการแปลงข้อมูลก่อนที่จะทำการส่งให้กับ client</p>
<p>สรุปแล้วปัญหาที่เกิดขึ้นน่าจะเกิดจากค่าของตัวแปร character_set_results ซึ่งถูกกำหนดให้เป็น character set ที่ไม่ใช่ tis620 ทำให้อักขระภาษาไทยที่ส่งกลับมาให้ client นั้นแสดงผลไม่ถูกต้อง</p>
<p>ในกรณีที่ไม่สามารถแก้ไขค่า config ของ MySQL ได้ด้วยตัวเองนั้น   สามารถแก้ปัญหาด้วยการต้องแทรกคำสั่งที่กำหนดให้ character_set_results เป็น tis620 ทันทีหลังจากเชื่อมต่อกับฐานข้อมูล MySQL เช่น</p>
<pre class="brush: php; gutter: true">$link = mysql_connect($host, $username, $password);
mysql_select_db($dbname);
$charset = "SET NAMES 'tis620'";
mysql_query($charset);</pre>
<p>หากสามารถแก้ไขค่า config ของ MySQL ได้ ก็ให้เพิ่มข้อมูลในไฟล์ my.ini ดังนี้</p>
<pre class="brush: text; gutter: true">[client]
default-character-set=tis620

[mysqld]
default-character-set=tis620
character-set-server=tis620
collation-server=tis620_thai_ci
ini_connect='SET collation_connection=tis620_thai_ci'
ini_connect='SET NAMES tis620'</pre>
<p>แล้วทำการ restart MySQL</p>
<p>แต่ทางที่ดีนั้นควรจะทำการสร้างเว็บและฐานข้อมูลโดยใช้ UTF-8 จะดีที่สุดครับ (<a href="http://www.diary.in.th/my/archives/332">อ่านเพิ่มเติมได้ที่นี่</a>)</p>
<p>หวังว่าบทความนี้จะช่วยแก้ปัญหาให้กับบางท่านได้นะครับ <img src='http://phpconcept.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://phpconcept.com/archives/25/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP5 ติดต่อกับ MySQL ไม่ได้?</title>
		<link>http://phpconcept.com/archives/18</link>
		<comments>http://phpconcept.com/archives/18#comments</comments>
		<pubDate>Wed, 11 Aug 2004 13:17:01 +0000</pubDate>
		<dc:creator>wachira</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://phpconcept.wordpress.com/?p=18</guid>
		<description><![CDATA[ในบทความที่แล้วผมเขียนอธิบายวิธีการติดตั้ง Apache HTTP Server เวอร์ชัน 2 และ PHP เวอร์ชัน 5 สำหรับ MS Windows ซึ่งในบทความไม่ได้พูดถึงการแก้ไขค่า configuration ของ PHP ให้สามารถติดต่อกับ MySQL ได้ ผมได้ทดสอบดูแล้วก็พบว่าใน PHP5 นี้มีการปรับเปลี่ยนบางอย่าง ซึ่งทำให้เมื่อทำวิธีการเดิมแล้วจะทำให้เกิดข้อความเตือน และจะทำให้ไม่สามารถติดต่อกับ MySQL ได้ สิ่งที่เปลี่ยนไปอย่างหนึ่งใน PHP5 ก็คือ ในเวอร์ชันนี้จะไม่มี MySQL client library รวมอยู่ด้วย สาเหตุส่วนหนึ่ง เป็นเพราะ ส่วนใหญ่แล้วระบบต่างๆ ในปัจจุบันได้มีการติดตั้ง MySQL client library ไว้ก่อนแล้ว ซึ่งหากมี client library มากับตัว PHP เองด้วยก็จะทำให้เกิดปัญหาในการทำงานได้ การปรับปรุงตัว client library ยังหละหลวมและยังพัฒนาไม่ทันเวอร์ชันของ PHP ที่มีการพัฒนาปรับปรุงเรื่อยๆ [...]]]></description>
			<content:encoded><![CDATA[<p>ในบทความที่แล้วผมเขียนอธิบายวิธีการติดตั้ง Apache HTTP Server เวอร์ชัน 2 และ PHP เวอร์ชัน 5 สำหรับ MS Windows ซึ่งในบทความไม่ได้พูดถึงการแก้ไขค่า configuration ของ PHP ให้สามารถติดต่อกับ MySQL ได้ ผมได้ทดสอบดูแล้วก็พบว่าใน PHP5 นี้มีการปรับเปลี่ยนบางอย่าง ซึ่งทำให้เมื่อทำวิธีการเดิมแล้วจะทำให้เกิดข้อความเตือน และจะทำให้ไม่สามารถติดต่อกับ MySQL ได้</p>
<p><a href="http://www.phpconcept.com/wp-content/uploads/php_errormsg.gif"><img class="aligncenter size-full wp-image-21" title="php_errormsg" src="http://www.phpconcept.com/wp-content/uploads/php_errormsg.gif" alt="" width="460" height="77" /></a><span id="more-18"></span>สิ่งที่เปลี่ยนไปอย่างหนึ่งใน PHP5 ก็คือ ในเวอร์ชันนี้จะไม่มี MySQL client library รวมอยู่ด้วย สาเหตุส่วนหนึ่ง เป็นเพราะ</p>
<ul>
<li>ส่วนใหญ่แล้วระบบต่างๆ ในปัจจุบันได้มีการติดตั้ง MySQL client library ไว้ก่อนแล้ว ซึ่งหากมี client library มากับตัว PHP เองด้วยก็จะทำให้เกิดปัญหาในการทำงานได้</li>
<li>การปรับปรุงตัว client library ยังหละหลวมและยังพัฒนาไม่ทันเวอร์ชันของ PHP ที่มีการพัฒนาปรับปรุงเรื่อยๆ</li>
<li>ปัญหาเกี่ยวกับ license เนื่องจากในเวอร์ชันต่อไปนั้น MySQL client library จะพัฒนาภายใต้ GPL ซึ่งไม่สามารถที่จะรวมเข้ากับ license ของส่วนอื่นๆ ที่ใช้ license ต่างกัน เช่น Apache License ได้</li>
</ul>
<p>จากสาเหตุข้างต้นทำให้ทางเลือกที่ดีที่สุดก็คือการแยกเอา MySQL client library ออกจาก PHP5 นั่นเอง</p>
<p>ดังนั้นแล้วการทำให้ PHP5 สามารถทำการติดต่อกับ MySQL ได้นั้น สิ่งที่เราจะต้องทำมีขั้นตอนต่อไปนี้ครับ</p>
<p>1. แก้ไขไฟล์ php.ini ให้เรียกใช้ module ของ MySQL โดยใช้คำสั่ง<br />
extension=php_mysql.dll<br />
(ลองค้นหาบรรทัดนี้ใน php.ini เพราะจะมีอยู่แล้ว แต่จะถูกคอมเม้นต์ไว้ด้วยเครื่องหมาย semicolon ( ; ) ให้ลบออก)</p>
<p>2. copy ไฟล์ libmysql.dll ไปไว้ที่ไดเรกทอรี SYSTEMROOT ของวินโดวส์ เช่น c:/windows/system32 สำหรับ windows XP</p>
<p>3. ทำการ restart Apache Web Server</p>
<p>4. ตรวจสอบดูว่า module ของ MySQL ได้ถูกเรียกใช้งานหรือไม่ โดยการสร้างไฟล์ PHP เช่น test.php และใส่คำสั่ง phpinfo(); ไว้ข้างใน พร้อมกับเรียกไฟล์นี้ เช่น http://localhost/test.php ซึ่งหาก MySQL module ถูกเรียกใช้งานแล้วจะปรากฎรายละเอียดดังรูปต่อไปนี้ ซึ่งเราก็จะสามารถใช้ PHP ติดต่อกับ MySQL ได้ตามปกติครับ</p>
<p><a href="http://www.phpconcept.com/wp-content/uploads/mysql_module.gif"><img class="aligncenter size-full wp-image-22" title="mysql_module" src="http://www.phpconcept.com/wp-content/uploads/mysql_module.gif" alt="" width="460" height="295" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://phpconcept.com/archives/18/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Re-direct โดย META tags vs PHP</title>
		<link>http://phpconcept.com/archives/15</link>
		<comments>http://phpconcept.com/archives/15#comments</comments>
		<pubDate>Thu, 27 May 2004 13:14:03 +0000</pubDate>
		<dc:creator>wachira</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://phpconcept.wordpress.com/?p=15</guid>
		<description><![CDATA[ทุกครั้งที่เรามีการแก้ไขหรือเปลี่ยนแปลงที่อยู่ของโฮมเพจ สิ่งหนึ่งที่เราต้องทำก็คือแจ้งให้ผู้อ่านที่เปิดเข้ามายังเว็บเพจเดิม ทราบว่ามีการเปลี่ยนแปลงที่อยู่เกิดขึ้น เพื่อให้ทำการแก้ไข bookmark ไปยังที่อยู่ใหม่ ผมคิดว่าหลายๆ ท่านคงเคยเจอมาแล้ว ซึ่งมักจะเป็นข้อความทำนองนี้คือ &#8220;เราได้ทำการย้ายที่อยู่ของเว็บเพจใหม่ อีกสักครู่ท่านจะถูกนำไปที่อยู่ใหม่โดยอัตโนมัติ&#8221; วิธีการนี้เรียกว่า การ Re-direct สงสัยไหมครับว่าเขาทำยังไง? วิธีการหนึ่งที่นิยมใช้ในการทำ Re-direct คือใช้ META tags ครับ รูปแบบโดยทั่วไปของ META tags มีอยู่ 2 แบบ คือ &#60;META HTTP-EQUIV=&#8221;name&#8221; CONTENT=&#8221;content&#8221;&#62; &#60;META NAME=&#8221;name&#8221; CONTENT=&#8221;content&#8221;&#62; META tags นี้จะต้องอยู่ภายใน Head tag อีกที คือต้องอยู่ระหว่าง &#60;HEAD&#62; และ &#60;/HEAD&#62; tag ครับ ถ้าสังเกตดูจะเห็นว่ารูปแบบทั้งสองแตกต่างกันที่แอตทริบิว HTTP-EQUIV และ NAME ซึ่งผมจะอธิบายต่อไปในภายหลัง META tags มีไว้ใช้ทำอะไร? META [...]]]></description>
			<content:encoded><![CDATA[<p>ทุกครั้งที่เรามีการแก้ไขหรือเปลี่ยนแปลงที่อยู่ของโฮมเพจ สิ่งหนึ่งที่เราต้องทำก็คือแจ้งให้ผู้อ่านที่เปิดเข้ามายังเว็บเพจเดิม ทราบว่ามีการเปลี่ยนแปลงที่อยู่เกิดขึ้น เพื่อให้ทำการแก้ไข bookmark ไปยังที่อยู่ใหม่ ผมคิดว่าหลายๆ ท่านคงเคยเจอมาแล้ว ซึ่งมักจะเป็นข้อความทำนองนี้คือ &#8220;เราได้ทำการย้ายที่อยู่ของเว็บเพจใหม่ อีกสักครู่ท่านจะถูกนำไปที่อยู่ใหม่โดยอัตโนมัติ&#8221; วิธีการนี้เรียกว่า การ Re-direct สงสัยไหมครับว่าเขาทำยังไง?<span id="more-15"></span></p>
<p>วิธีการหนึ่งที่นิยมใช้ในการทำ Re-direct คือใช้ META tags ครับ รูปแบบโดยทั่วไปของ META tags มีอยู่ 2 แบบ คือ</p>
<ol>
<li>&lt;META HTTP-EQUIV=&#8221;name&#8221; CONTENT=&#8221;content&#8221;&gt;</li>
<li>&lt;META NAME=&#8221;name&#8221; CONTENT=&#8221;content&#8221;&gt;</li>
</ol>
<p>META tags นี้จะต้องอยู่ภายใน Head tag อีกที คือต้องอยู่ระหว่าง &lt;HEAD&gt; และ &lt;/HEAD&gt; tag ครับ ถ้าสังเกตดูจะเห็นว่ารูปแบบทั้งสองแตกต่างกันที่แอตทริบิว HTTP-EQUIV และ NAME ซึ่งผมจะอธิบายต่อไปในภายหลัง</p>
<h3>META tags มีไว้ใช้ทำอะไร?</h3>
<p>META tags เป็น tags ที่เราใช้เพื่อใส่ตัวข้อมูล metadata เอาละสิครับแล้วเจ้า metadata คืออะไร? Metadata ก็คือ คำอธิบายข้อมูล หรือข้อมูลที่บอกรายละเอียดของข้อมูล (data about data) เพื่อให้เราทราบว่าข้อมูลที่เราได้รับนั้นมันคืออะไร</p>
<p>นอกจากทำให้เราเข้าใจแล้ว metadata ก็เป็นสิ่งที่ช่วยทำให้เครื่องคอมพิวเตอร์สามารถเข้าใจถึงข้อมูลที่มันได้รับด้วยเช่นกัน ตัวอย่างของ metadata ที่เราเห็นในชีวิตประจำวันก็คือ ป้ายหรือฉลากที่ติดอยู่บนภาชนะบรรจุอาหาร เครื่องดื่ม หรือสิ่งของต่างๆ เพื่อที่จะอธิบายข้อมูลว่าแต่ละรายการคืออะไร เพียงแค่เราอ่านฉลากก็ทำให้เราทราบถึงคุณลักษณะของสิ่งที่บรรจุอยู่ภายใน</p>
<p>metadata ไม่ได้ถูกคิดค้นมาเพื่อใช้งานกับเว็บเพจ เพราะแรกเริ่มเดิมทีนั้น metadata ได้ถูกใช้ในกลุ่มพัฒนาฐานข้อมูลที่อ้างอิงถึงสารสนเทศในห้องสมุดเพื่อให้บรรณารักษ์ได้ใช้ในการจัดการระบบห้องสมุด ซึ่งถ้าหากจะว่าไปแล้วเราก็อาจเปรียบเทียบได้ว่า เว็บเพจต่างๆ นั้นเปรียบเสมือนห้องสมุดโลกขนาดใหญ่ ด้วยเหตุผลนี้เองจึงได้มีแนวความคิดในการนำ metadata มาประยุกต์ใช้กับเว็บเพจต่างๆ</p>
<p>ถ้าเราลองพิจารณาดูเว็บเพจต่างๆ ในโลกจะเห็นว่ามีจำนวนมากมายมหาศาล นอกจากนี้แล้วยังมีการเปลี่ยนแปลงอยู่ตลอดเวลาตามใจของผู้ที่เป็นเจ้าของ ดังนั้นสามารถเรียกได้ว่าเครือข่าย world wide web ไม่มีโครงสร้างของข้อมูลข่าวสารแต่อย่างใด ซึ่งแตกต่างกับระบบของห้องสมุดที่มีการจัดระบบสิ่งพิมพ์ประเภทต่างๆ ไว้ให้เป็นหมวดหมู่เดียวกันในระบบที่เป็นมาตรฐานเดียวกันทั่วโลก คือ ระบบ Library of Congress Classification (LC) หรือ ระบบ Dewey Decimal System จะเห็นว่าเมื่อมีระบบจัดเก็บที่เป็นหมวดหมู่ก็จะสามารถทำให้ทำการสืบค้นได้อย่างสะดวกรวดเร็ว</p>
<p>META tags สามารถใช้ในการอธิบายว่าเว็บเพจนั้นเป็นอย่างไร มีเนื้อหาเกี่ยวข้องกับอะไร และอื่นๆ เพี่อความง่ายและรวดเร็วต่อการสืบค้นข้อมูลต่างๆ ในอินเทอร์เน็ต เช่น</p>
<pre class="brush: html; gutter: true">&lt;HEAD&gt;
&lt;TITLE&gt;PHPConcept.com&lt;/TITLE&gt;
&lt;META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=tis-620"&gt;
&lt;META NAME="keywords" CONTENT="PHP"&gt;
&lt;META NAME="description" CONTENT="homepage about PHP Scripting language."&gt;
&lt;META NAME="author" CONTENT="Wachira Promsaka Na Sakolnakorn"&gt;
&lt;/HEAD&gt;</pre>
<p>จากตัวอย่างข้างต้นจะเห็นว่า แอตทริบิว NAME จะเป็นตัวที่บอกว่าเราต้องการกำหนดค่าให้กับอะไร และแอตทริบิว CONTENT นั้นเป็นค่าที่เราต้องการกำหนดให้นั่นเอง ส่วนแอตทริบิว HTTP-EQUIV นั้นเป็นการกำหนดค่าที่เทียบเท่า (equivalent) กับค่าของ HTTP headers ซึ่งโดยปกติแล้วเว็บเซิร์ฟเวอร์จะเป็นผู้ส่ง HTTP Response headers ให้แก่บราวเซอร์</p>
<p>จากการใช้ META tags นี้ก็จะทำให้บราวเซอร์ได้รับค่าที่เทียบเท่า HTTP headers ที่เรากำหนดขึ้นเองด้วย ซึ่งโดยทั่วไปแล้วบราวเซอร์ก็จะปฏิบัติตาม HTTP headers ที่มันได้รับ เช่น</p>
<p>&lt;META HTTP-EQUIV=&#8221;expires&#8221; CONTENT=&#8221;Wed, 26 Feb 1997 08:21:57 GMT&#8221;&gt;<br />
เทียบเท่ากับ HTTP header คือ</p>
<p>Expires: Wed, 26 Feb 1997 08:21:57 GMT<br />
ความหมายก็คือ กำหนดให้เว็บเพจนี้หมดอายุเมื่อวันพุธที่ 26 กุมภาพันธ์ 2546 เวลา 08:21:57 GMT</p>
<p>ถ้าอยากลองดูว่าทันทีที่เราเปิดดูเว็บไซต์อะไรสักอย่าง มีการส่ง HTTP Request Header ของบราวเซอร์ และรับข้อมูล HTTP Response header จากเซิร์ฟเวอร์ยังไงบ้าง ให้ลองดูที่เว็บนี้ครับ http://web-sniffer.net/ หรือเว็บนี้ครับ http://www.rexswain.com/httpview.html</p>
<h3>เมื่อเราเรียดดูเว็บเพจที่มี META tags</h3>
<p>เมื่อเราเรียกดูเว็บเพจผ่านทางเว็บบราวเซอร์ข้อมูลต่างๆ ของ META tags จะไม่ปรากฎให้เราเห็นบนจอ นอกเสียจากว่าเราจะเปิดดูซอร์สโค้ดของเว็บเพจนั้นๆ แล้วใครบ้างจะเป็นคนเห็นและใช้ข้อมูลต่างๆ เหล่านี้? ผู้ใช้ข้อมูลของ META tags ก็คือ search engine และตัวบราวเซอร์นั่นเอง ซึ่ง search engine บางตัวก็จะใช้ข้อมูลของ metadata ในการทำดัชนีเว็บไซต์ ดังนั้นการเลือกใช้คีย์เวิร์ดที่ถูกต้องเหมาะสมก็ส่งผลต่อการที่เว็บไซต์ของเราจะถูกพบโดย search engineได้ง่ายขึ้น</p>
<p>เคล็ดลับหนึ่งในการสร้างคีย์เวิร์ดเพื่อใช้ใน META tags ก็คือ ทำตัวเองให้เหมือนกับเป็นคนที่กำลังค้นหาเว็บไซต์ที่เกี่ยวของกับเว็บไซต์ของเรา ลองนึกดูว่าเขาจะใช้อะไรเป็นคีย์เวิร์ดในการค้นหาบ้าง คุณอาจจะลองถามเพื่อนๆ ดูก็ได้ หรืออีกวิธีหนึ่งก็ดูจากซอร์สโค้ดของเว็บไซต์ที่ใกล้เคียงกับเรา จากนั้นก็ค่อยเลือกใช้คีย์เวิร์ดที่ตรงตามความต้องการของเราจริงๆ อีกที</p>
<h3>การ Re-direct โดยใช้ META tags</h3>
<p>ในการ re-direct เว็บเพจโดยใช้ META tags นั้น เราต้องการกำหนดให้แอตทริบิว HTTP-EQUIV ให้มีค่าเท่ากับ Refresh โดยมีรูปแบบของคำสั่งดังนี้</p>
<p>&lt;META HTTP-EQUIV=&#8221;Refresh&#8221; CONTENT=&#8221;3;URL=http://www.some.org/some.html&#8221;&gt;</p>
<p>เทียบเท่ากับ HTTP header คือ Refresh: 3;URL=http://www.some.org/some.html  ซึ่งเป็นการกำหนดให้ทำการเปิดเว็บเพจที่มี URL http://www.some.org/some.html ภายใน 3 วินาทีหลังจากที่แสดงเว็บเพจปัจจุบันเสร็จเรียบร้อยแล้ว เราสามารถกำหนดให้บราวเซอร์ทำการเปิดเว็บเพจใหม่ได้ทันทีโดยการกำหนดให้เป็นตัวเลขวินาทีเป็น 0 ตัวอย่างข้างล่างนี้คือตัวอย่างที่ใช้งานได้จริง</p>
<pre class="brush: html; gutter: true">&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="content-type" content="text/html;charset=tis-620 " /&gt;
&lt;meta http-equiv="refresh" content="0;url=http://www.phpconcept.com/newpage/" /&gt;
&lt;title&gt;Refresh Page&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;p&gt;This page has moved to&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.phpconcept.com/newpage/"&gt;http://www.phpconcept.com/newpage/&lt;/a&gt;
 If you are not re-directed to the page automatically, please use the link above.&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<h3>การ Re-direct โดยใช้ PHP</h3>
<p>ใน PHP มีคำสั่งที่ใช้ในการส่ง HTTP header คือ คำสั่ง header มีรูปแบบคือ<br />
void header ( string string [, bool replace [, int http_response_code]])</p>
<p>การ Re-direct โดยใช้ PHP สามารถทำได้ 2 แบบคือ<br />
1. ทำการ Re-direct ไปยังเว็บไซต์ใหม่ทันทีโดยใช้ location header มีรูปแบบคือ</p>
<pre class="brush: php; gutter: true">&lt;?
 header("location:http://www.phpconcept.com/newpage/");
 exit;
?&gt;</pre>
<p>2. ทำการ Re-direct ทันทีโดยใช้ refresh header มีรูปแบบคือ</p>
<p>ตัวอย่างนี้แสดงให้เห็นว่าเราสามารถทำการ Re-direct ไปยังเว็บเพจใหม่ได้โดยการกำหนดให้เวลามีค่าเป็น 0 วินาที</p>
<pre class="brush: php; gutter: true">&lt;?php
 header("refresh: 0; url=http://www.phpconcept.net/newpage/");
?&gt;</pre>
<p>นอกจากนี้คุณยังสามารถเขียน url สั้นๆ ได้หากเป็นการ Re-direct ไปที่เว็บเซิร์ฟเวอร์เดียวกัน</p>
<pre class="brush: php; gutter: true">&lt;?php
 header("refresh: 5; url=/webdsn/");
?&gt;</pre>
<pre class="brush: php; gutter: true">&lt;?php
 header("refresh: 3; url=/");
?&gt;</pre>
<p>ข้อควรระวังก็คือการใช้คำสั่ง header() นี้จะต้องถูกเรียกใช้ก่อนที่จะมีการส่งค่าอื่นๆ เพื่อให้บราวเซอร์แสดงผล คุณจะไม่สามารถนำ HTML tags บรรทัดว่างๆ หรือแม้แต่กระทั่งช่องว่างเพียง 1 ช่องแทรกไว้ก่อนคำสั่งนี้<br />
เช่นดังตัวอย่างต่อไปนี้</p>
<pre class="brush: php; gutter: true">&lt;html&gt;
 &lt;?php
 /* This will give an error. Note the output
 * above, which is before the header() call */
 header("Location: http://www.example.com/");
?&gt;</pre>
<p>คำสั่ง header() นี้สามารถใช้งานได้หลากหลายเช่น สามารถกำหนดให้เว็บเพจหมดอายุได้เช่นกัน คุณสามารถอ่านรายละเอียดเพิ่มเติมของคำสั่ง header() นี้ได้ที่ http://www.php.net/header ครับ</p>
]]></content:encoded>
			<wfw:commentRss>http://phpconcept.com/archives/15/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Regular Expression (ตอนจบ)</title>
		<link>http://phpconcept.com/archives/12</link>
		<comments>http://phpconcept.com/archives/12#comments</comments>
		<pubDate>Mon, 01 Apr 2002 13:12:05 +0000</pubDate>
		<dc:creator>wachira</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://phpconcept.wordpress.com/?p=12</guid>
		<description><![CDATA[PHP Regular Expression (ตอนจบ) ฟังก์ชันของ PHP ที่ใช้กับ Regular Expression จากหน้าที่ผ่านมาจะมีเฉพาะตัวอย่างของ regex อาจจะทำให้เกิดความงุนงงสักหน่อยนะครับ ในส่วนนี้เราจะพูดถึงฟังก์ชันของ PHP ที่นำเอา regex ไปใช้ซึ่งได้แก่ ereg( ) &#8212; regular expression match ereg_replace( ) &#8212; replace regular expression eregi( ) &#8212; case insensitive regular expression match eregi_replace( ) &#8212; replace regular expression case insensitive ฟังก์ชันของ PHP ที่ใช้กับ Regular Expression จากหน้าที่ผ่านมาจะมีเฉพาะตัวอย่างของ regex อาจจะทำให้เกิดความงุนงงสักหน่อยนะครับ ในส่วนนี้เราจะพูดถึงฟังก์ชันของ PHP [...]]]></description>
			<content:encoded><![CDATA[<p>PHP Regular Expression (ตอนจบ) ฟังก์ชันของ PHP ที่ใช้กับ Regular Expression<br />
จากหน้าที่ผ่านมาจะมีเฉพาะตัวอย่างของ regex อาจจะทำให้เกิดความงุนงงสักหน่อยนะครับ ในส่วนนี้เราจะพูดถึงฟังก์ชันของ PHP ที่นำเอา regex ไปใช้ซึ่งได้แก่</p>
<ul>
<li>ereg( ) &#8212; regular expression match</li>
<li>ereg_replace( ) &#8212; replace regular expression</li>
<li>eregi( ) &#8212; case insensitive regular expression match</li>
<li>eregi_replace( ) &#8212; replace regular expression case insensitive</li>
</ul>
<h3><span id="more-12"></span>ฟังก์ชันของ PHP ที่ใช้กับ Regular Expression</h3>
<p>จากหน้าที่ผ่านมาจะมีเฉพาะตัวอย่างของ regex อาจจะทำให้เกิดความงุนงงสักหน่อยนะครับ ในส่วนนี้เราจะพูดถึงฟังก์ชันของ PHP ที่นำเอา regex ไปใช้ซึ่งได้แก่</p>
<ul>
<li>ereg( ) &#8212; regular expression match</li>
<li>ereg_replace( ) &#8212; replace regular expression</li>
<li>eregi( ) &#8212; case insensitive regular expression match</li>
<li>eregi_replace( ) &#8212; replace regular expression case insensitive</li>
</ul>
<p><strong>ereg( )</strong> มี syntax คือ int ereg (string pattern, string string [, array regs]) ความหมายก็คือค้นหารูปแบบ (pattern) ที่กำหนดใน string ที่ให้มา ถ้าคนพบรูปแบบที่กำหนดก็จะคืนค่า True ถ้าไม่พบหรือเกิดความผิดพลาด ก็จะคืนค่า False ตัวอย่างง่ายๆ เช่น</p>
<pre class="brush: php; gutter: true">&lt;?php
$text = "Hello";
if (ereg("^[0-9]", $text)) {
   echo "$text is valid.";
} else {
   echo "$text is invalid.";
}
?&gt;</pre>
<p>จากตัวอย่างข้างต้น ฟังก์ชัน ereg จะคืนค่า false และจะพิมพ์ประโยค Hello is invalid. ออกมา</p>
<p>นอกจากนี้เรายังสามารถใช้ parenthesized substring ( ) มาช่วยในการดึงข้อความย่อย (substring) ค่าออกมาจาก $string หลังจากเจอรูปแบบที่ตรงกับที่กำหนด เช่น</p>
<pre class="brush: php; gutter: true">&lt;?php
$date = "08-04-2002";
if (ereg("([0-9]{2})-([0-9]{2})-([0-9]{4})", $date, $regs)) {
   $date = $regs[1];
   $month = $regs[2];
   $year = $regs[3] + 543;
   echo "$date $month $year";
} else {
   echo "รูปแบบของวันที่ไม่ถูกต้องครับ!";
}
?&gt;</pre>
<p>จากตัวอย่างข้างบน จะได้ผลลัพธ์ คือ &#8220;08 04 2545&#8243; จะเห็นว่ามีตัวแปร $regs เพิ่มขึ้นมา (อาจจะตั้งเป็นชื่ออื่นๆ ได้) ตัวแปรนี้จะเป็นตัวแปร array ที่รับค่าต่างๆ จาก ( ) (parenthesized substring) โดยจะมีรูปแบบดังนี้</p>
<ul>
<li>$regs[0] จะมีค่าเท่ากับข้อความเดิมทั้งหมด ในตัวอย่างนี้ก็คือ &#8220;08-04-2002&#8243;</li>
<li>$regs[1] จะมีค่าเท่ากับข้อความย่อยในวงเล็บเปิดที่อยู่อันแรกซ้ายมือสุด คือ &#8220;08&#8243;</li>
<li>$regs[2] จะมีค่าเท่ากับข้อความย่อยในวงเล็บเปิดที่ถัดมาจากอันแรก คือ &#8220;04&#8243;</li>
<li>$regs[3] จะมีค่าเท่ากับข้อความย่อยในวงเล็บเปิดที่ถัดมาจากอันที่สอง คือ &#8220;2002&#8243;</li>
</ul>
<p>และถ้าหากมีวงเล็บอันที่สี่ซ้อน เพิ่มขึ้นมาอีกก็จะมีค่าเป็น $regs[4] เป็นเช่นนี้ต่อไปจนถึง $regs[9] ครับ รวมแล้วก็มีทั้งหมด 10 ตัวครับ</p>
<p>ตัวอย่างการดึงตัวเลข 4 ตัวที่ติดกันออกมาจากข้อความ</p>
<pre class="brush: php; gutter: true">&lt;?php
 $user_text = @$_POST["user_text"];

if (isset($user_text)) {
	$user_text = htmlspecialchars(quotemeta($user_text));
	echo "&lt;b&gt;ข้อความของคุณคือ&lt;/b&gt;: $user_text&lt;br&gt;";
	if (ereg("[0-9][0-9][0-9][0-9]", $user_text, $regs)) {
		echo "&lt;b&gt;ตัวเลขติดกัน 4 ตัวแรกที่พบคือ&lt;/b&gt;: $regs[0]&lt;br&gt;";
	} else {
		echo "ไม่พบตัวเลขติดกัน 4 ตัวตามรูปแบบที่กำหนด&lt;br&gt;";
	}
}
?&gt;</pre>
<p>ตัวอย่างการตรวจสอบความถูกต้องของ email</p>
<pre class="brush: php; gutter: true">&lt;?php
function check_email($input_email) {
if( eregi( "^" .
	"[a-z0-9]+([_\\.-][a-z0-9]+)*" . //user
	"@" .
	"([a-z0-9]+([\.-][a-z0-9]+)*)+" . //domain
	"\\.[a-z]{2,}" . //sld, tld
	"$", $input_email, $regs)
	) { return TRUE; } else { return FALSE; }
}
if (isset($_POST["user_email"])) {
	$user_email = $_POST["user_email"];
	echo "&lt;b&gt;Email ที่คุณป้อนมาคือ&lt;/b&gt;: $user_email&lt;br&gt;";
	if (check_email($user_email)) {
		echo "&lt;b&gt;Email ที่คุณป้อนมีรูปแบบถูกต้องแล้วครับ&lt;/b&gt;";
	} else {
	echo "&lt;b&gt;Email ที่คุณป้อนมีรูปแบบไม่ถูกต้องครับ&lt;/b&gt;";
	}
}
?&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://phpconcept.com/archives/12/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Regular Expressions</title>
		<link>http://phpconcept.com/archives/10</link>
		<comments>http://phpconcept.com/archives/10#comments</comments>
		<pubDate>Mon, 01 Apr 2002 13:09:54 +0000</pubDate>
		<dc:creator>wachira</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://phpconcept.wordpress.com/?p=10</guid>
		<description><![CDATA[PHP Regular Expressions Regular Expression หรือเรียกสั้นๆ regex เป็นเครื่องมือที่มีประโยชน์มากในการค้นหาตัวอักษร คำ หรือ ข้อความรูปแบบต่างๆ ที่เราต้องการจากข้อความอื่นๆ เมื่อค้นหาได้แล้วเราก็อาจจะแทนที่ด้วยข้อความอื่นๆ ได้ การใช้ regex ไม่ได้มีเฉพาะใน PHP นะครับ อย่างใน text editor เช่น vi emacs หรือ ใน Perl VBscript และ shell program อย่างเช่น awk และ sed ก็มีเหมือนกัน แม้กระทั่งใน MySQL ก็มีเช่นกันครับ Metacharacters ถ้าคุณต้องการจะใช้ regex ละก็คงหนีไม่พ้นที่จะต้องทำความรู้จักกับ metacharacters ครับ เพราะนอกจากเราจะใช้ตัวอักษรและตัวเลขต่างๆ ในการสร้างรูปแบบ (pattern) ของตัวอักษรที่เราต้องการจะค้นหาแล้ว เราสามารถใช้ metacharacters มาช่วยสร้างรูปแบบอื่นๆ ที่มีความซับซ้อนมากขึ้นได้เมื่อลองแบ่งประเภทของ Metacharacters อาจแบ่งได้ดังนี้ 1. [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>PHP Regular Expressions Regular Expression หรือเรียกสั้นๆ regex เป็นเครื่องมือที่มีประโยชน์มากในการค้นหาตัวอักษร คำ หรือ ข้อความรูปแบบต่างๆ ที่เราต้องการจากข้อความอื่นๆ เมื่อค้นหาได้แล้วเราก็อาจจะแทนที่ด้วยข้อความอื่นๆ ได้</p>
<p>การใช้ regex ไม่ได้มีเฉพาะใน PHP นะครับ อย่างใน text editor เช่น vi emacs หรือ ใน Perl VBscript และ shell program อย่างเช่น awk และ sed ก็มีเหมือนกัน แม้กระทั่งใน <a href="http://www.mysql.com/documentation/mysql/bychapter/manual_Regexp.html" target="_blank">MySQL</a> ก็มีเช่นกันครับ</p>
<p><strong>Metacharacters</strong></p>
<p>ถ้าคุณต้องการจะใช้ regex ละก็คงหนีไม่พ้นที่จะต้องทำความรู้จักกับ metacharacters ครับ เพราะนอกจากเราจะใช้ตัวอักษรและตัวเลขต่างๆ ในการสร้างรูปแบบ (pattern) ของตัวอักษรที่เราต้องการจะค้นหาแล้ว เราสามารถใช้ metacharacters มาช่วยสร้างรูปแบบอื่นๆ ที่มีความซับซ้อนมากขึ้นได้<span id="more-10"></span>เมื่อลองแบ่งประเภทของ Metacharacters อาจแบ่งได้ดังนี้</p>
<p>1. Metacharacters ที่เกี่ยวกับตำแหน่ง (Positioning)</p>
<table border="1" cellpadding="5">
<tbody>
<tr>
<td width="40">^</td>
<td>ใช้แทนรูปแบบที่ขึ้นต้นด้วยคำที่กำหนดในตำแหน่งเริ่มต้นของข้อความ เช่น &#8220;^the&#8221; จะตรงกับข้อความใดๆ ที่ขึ้นต้นด้วย the</td>
</tr>
<tr>
<td>$</td>
<td>ใช้แทนรูปแบบที่ลงท้ายด้วยคำที่กำหนด เช่น &#8220;on the table$&#8221; จะตรงกับข้อความใดๆ ที่ลงท้ายด้วย on the table</td>
</tr>
<tr>
<td>.</td>
<td>ใช้แทนตัวอักษรใดๆ 1 ตัวอักษร ยกเว้น newline (\n) เช่น &#8220;com.&#8221; จะ ตรงกับ com1 และ coms แต่จะไม่ตรงกับ telecom (เพราะไม่มีตัวอักษรใดต่อท้าย)</td>
</tr>
</tbody>
</table>
<p>2. Metacharacters ที่เกี่ยวกับจำนวนครั้งที่ปรากฏของตัวอักษร</p>
<table border="1" cellpadding="5">
<tbody>
<tr>
<td width="40">?</td>
<td>แทนตัวอักษรว่าสามารถจะไม่ปรากฏหรือปรากฏ 1 ครั้ง เช่น ab? จะตรงกับ &#8220;a&#8221; หรือ &#8220;ab&#8221; (ตัว b จะไม่ปรากฏ หรือปรากฏ 1 ครั้ง)</td>
</tr>
<tr>
<td>*</td>
<td>แทนตัวอักษรว่าสามารถจะไม่ปรากฏหรือปรากฏได้หลายครั้ง เช่น ab* จะตรงกับ &#8220;a&#8221;, &#8220;ab&#8221;, &#8220;abb&#8221;, &#8220;abbb&#8221;, &#8220;abbbb&#8221; และ &#8220;abbbb&#8230;&#8221;</td>
</tr>
<tr>
<td>+</td>
<td>แทนตัวอักษรว่าสามารถจะต้องปรากฏ 1 ครั้ง หรือปรากฏได้หลายครั้ง เช่น ab+ จะตรงกับ &#8220;ab&#8221;, &#8220;abb&#8221;, &#8220;abbb&#8221;, &#8220;abbbb&#8221; และ &#8220;abbbb&#8230;&#8221;</td>
</tr>
<tr>
<td>{n}</td>
<td>เมื่อ n แทนจำนวนตัวเลข ความหมายก็คือ จะต้องปรากฏ n ครั้ง เช่น ab{4} จะตรงกับ &#8220;abbbb&#8221; เท่านั้น(b จะต้องปรากฏ 4 ครั้ง)</td>
</tr>
<tr>
<td>{n,}</td>
<td>เมื่อ n แทนจำนวนตัวเลข ความหมายก็คือ จะต้องปรากฏอย่างน้อย n ครั้ง เช่น ab{2, } จะตรงกับ &#8220;abb&#8221;, &#8220;abbb&#8221;, &#8220;abbbb&#8221; และ &#8220;abbbb&#8230;&#8221;</td>
</tr>
<tr>
<td>{n,m}</td>
<td>เมื่อ n และ m แทนจำนวนตัวเลข ความหมายคือ จะต้องปรากฏอย่างน้อย n ครั้งแต่ไม่เกิน m ครั้ง เช่น ab{2,5} จะตรงกับ &#8220;abb&#8221;, &#8220;abbbb&#8221; และ &#8220;abbbbb&#8221; เท่านั้น</td>
</tr>
</tbody>
</table>
<p>3. Metacharacters ที่กำหนดกลุ่มและช่วงของตัวอักษร</p>
<table border="1" cellpadding="5">
<tbody>
<tr>
<td width="40">[ ]</td>
<td>แทนตัวอักษรหนึ่งตัว ซึ่งจะปรากฏเป็นตัวอักษรตัวใดตัวหนึ่งใน [ ] เช่น [xy] จะตรงกับ &#8220;x&#8221;, &#8220;y&#8221;, &#8220;5x&#8221;, &#8220;abcdx&#8221; ถ้าไม่ปรากฏ x หรือ y อยู่เลยก็จะถือว่าไม่ตรง เช่น &#8220;qwert&#8221;</td>
</tr>
<tr>
<td>-</td>
<td>ใช้ร่วมกับ [ ] แทนช่วงของตัวอักษรหรือตัวเลข เช่น [a-e] จะตรงกับ &#8220;1234a&#8221;, &#8220;hello&#8221; แต่จะไม่ตรงกับ &#8220;HELLO&#8221;</td>
</tr>
</tbody>
</table>
<p>4. Metacharacters อื่นๆ</p>
<table border="1" cellpadding="5">
<tbody>
<tr>
<td width="40">( )</td>
<td>ใช้สำหรับจัดกลุ่มตัวอักษรเข้าด้วยกัน หรือกำหนดกลุ่มของรูปแบบย่อย เช่น a(bc)? จะตรงกับ a หรือ abc (ab จะไม่ปรากฏ หรือปรากฏ 1 ครั้ง)</td>
</tr>
<tr>
<td></td>
<td>ใช้เป็น escape character และความหมายอื่นๆ เช่น ถ้าต้องการหา &#8220;*&#8221; ในข้อความจะต้องใช้ &#8220;\*&#8221;การใช้ baclslash ในอีกความหมายหนึ่งก็คือ ใช้แทน non-printing character เช่น \a แทน alarm, BEL character (hex 07), \n แทน newline (hex 0A) \r แทน carriage return (hex 0D) และ \t แทน tab (hex 09) เป็นต้น</td>
</tr>
<tr>
<td>|</td>
<td>ใช้เป็นทางเลือกว่าจะเลือกค่าที่อยู่ทางซ้ายหรือขวาของ | เช่น &#8220;gr(a|e)y&#8221; จะตรงกับคำว่า &#8220;gray&#8221; หรือ &#8220;grey&#8221;</td>
</tr>
</tbody>
</table>
<p>5. Metacharacters พิเศษที่แทนกลุ่มของตัวอักษรต่างๆ ซึ่งจะต้องใช้ใน bracket [ ] เสมอ</p>
<table border="1" cellpadding="5">
<tbody>
<tr>
<td width="40">[:alpha:]</td>
<td>จะตรงกับข้อความที่มีตัวอักษรใดๆ ตั้งแต่ a ถึง z หรือ A ถึง Z หรือเขียนได้เป็น [0-9a-zA-Z] ตรงกับ &#8220;ABC&#8221;, &#8220;abc&#8221;, &#8220;aBc&#8221; แต่จะไม่ตรงกับ &#8220;123&#8243;</td>
</tr>
<tr>
<td>[:alnum:]</td>
<td>จะตรงกับข้อความที่มีตัวอักษรและตัวเลข (alphanumeric character) หรือเขียนได้เป็น [0-9a-zA-Z] ซึ่งเท่ากับ [[:alnum:]] เช่น &#8220;ab12&#8243;, &#8220;12d&#8221; แต่จะไม่ตรงกับ &#8220;&amp;*&#8221; และ &#8220;:;&#8221; เป็นต้น</td>
</tr>
<tr>
<td>[:digit:]</td>
<td>จะตรงกับข้อความที่มีตัวเลขอย่างน้อยหนึ่งตัว เช่น &#8220;1&#8243;, &#8220;1a2b3c&#8221; แต่จะไม่ตรงกับ &#8220;abc&#8221; เป็นต้น</td>
</tr>
<tr>
<td>[:lower:]</td>
<td>จะตรงกับข้อความที่มีตัวอักษรตัวเล็กอย่างน้อยหนึ่งตัว (lowercase characters) เช่น &#8220;xyzabc&#8221; แต่จะไม่ตรงกับ &#8220;ABC&#8221;, &#8220;B123&#8243; และ &#8220;123&#8243; เป็นต้น</td>
</tr>
<tr>
<td>[:upper:]</td>
<td>จะตรงกับข้อความที่มีตัวอักษรตัวใหญ่อย่างน้อยหนึ่งตัว (lowercase characters) เช่น &#8220;XZabc&#8221;, &#8220;A23&#8243; แต่จะไม่ตรงกับ &#8220;abc&#8221;, &#8220;a123&#8243; และ &#8220;123&#8243; เป็นต้น</td>
</tr>
<tr>
<td>[:space:]</td>
<td>จะตรงกับข้อความที่มี space อย่างน้อย 1 ตัว เช่น &#8221; &#8220;, &#8220;a bc&#8221;, &#8220;12 3&#8243; แต่จะไม่ตรงกับ &#8220;ab&#8221;, &#8220;abZX&#8221; และ &#8220;456&#8243; เป็นต้น</td>
</tr>
<tr>
<td>[:print:]</td>
<td>จะตรงกับข้อความที่มีตัวอักษรใดๆ ที่สามารถแสดงออกมาได้ (printable character) เช่น &#8220;abcX&#8221;, &#8220;124&#8243; และ &#8221; &#8221; แต่จะไม่ตรงกับ &#8220;\n&#8221; (newline)</td>
</tr>
<tr>
<td>[:graph:]</td>
<td>จะตรงกับข้อความที่มี graphical character ยกเว้น space (&#8221; &#8220;) เช่น &#8220;abc&#8221;, &#8220;ab&amp;&#8221; และ &#8220;1aA&#8221; แต่จะไม่ตรงกับ &#8221; &#8220;</td>
</tr>
<tr>
<td>[:xdigit:]</td>
<td>จะตรงกับข้อความที่มีเลขฐานสิบหก ได้แก่ a ถึง f , 0 ถึง 9 และ A ถึง F เช่น &#8220;1B&#8221;, &#8220;0A&#8221; แต่จะไม่ตรงกับ &#8220;XZ&#8221; เป็นต้น</td>
</tr>
<tr>
<td>[:punct:]</td>
<td>จะตรงกับข้อความที่มี punctuation อย่างน้อยหนึ่งตัว เช่น &#8220;a;&#8221;, &#8220;a23b?&#8221; แต่จะไม่ตรงกับ &#8220;abc&#8221;, &#8220;123&#8243; และ &#8220;AB3&#8243; เป็นต้น</td>
</tr>
</tbody>
</table>
<p>ลองมาดูตัวอย่างที่ซับซ้อนขึ้นมาหน่อยนะครับ</p>
<p>&#8220;id.[0-9]&#8221; จะตรงกับข้อความในรูปแบบ id ตามด้วยตัวอักษรใดๆหนึ่งตัวและตัวเลขอีกหนึ่งตัว<br />
เช่น &#8220;<strong>ida1</strong>&#8221; &#8220;<strong>idx2</strong>&#8221; &#8220;<strong>idc5</strong>abc&#8221; &#8220;<strong>id34</strong>56&#8243; และ แต่จะไม่ตรงกับ &#8220;id5x&#8221; เพราะ x ไม่ใช่ตัวเลขระหว่าง 1 ถึง 9</p>
<p>&#8220;^id.[0-9]$&#8221; จะตรงกับข้อความในรูปแบบ id ตามด้วยตัวอักษรใดๆหนึ่งตัวและตัวเลขอีกหนึ่งตัว<br />
เช่น &#8220;<strong>ida1</strong>&#8221; &#8220;<strong>idx2</strong>&#8221; แต่จะไม่ตรงกับ &#8220;idc5abc&#8221; &#8220;id3456&#8243; &#8220;dfidf6sdf&#8221; &#8220;id5x&#8221;</p>
<p>&#8220;^.{5}$&#8221; จะตรงกับข้อความที่มีตัวอักษรหรือตัวเลข 5 ตัวติดกันเท่านั้น<br />
เช่น &#8220;<strong>abcde</strong>&#8221; &#8220;<strong>12345</strong>&#8221; &#8220;<strong>a1b2c</strong>&#8221; แต่จะไม่ตรงกับ &#8220;abcdef&#8221; &#8220;ab1&#8243; &#8220;123a5bc&#8221; เป็นต้น</p>
<p>&#8220;a(bc)*&#8221; จะตรงกับข้อความที่มีตัวอักษร a อย่างเดียว หรือตามด้วย bc อย่างน้อย 1 ครั้ง<br />
เช่น &#8220;<strong>a</strong>&#8221; &#8220;<strong>abc</strong>&#8221; &#8220;<strong>abcbc</strong>&#8221; &#8220;<strong>abcbcbc</strong>&#8221; แต่จะไม่ตรงกับ &#8220;abcb&#8221; เป็นต้น</p>
<p>&#8220;a(bc){2,4}&#8221; จะตรงกับข้อความที่มีตัวอักษร &#8220;<strong>abcbc</strong>&#8221; &#8220;<strong>abcbcbc</strong>&#8221; และ &#8220;<strong>abcbcbcbc</strong>&#8221; เท่านั้น และจะไม่ตรงกับ &#8220;abcbcbcbcbc&#8221;</p>
<p>&#8220;a(bc)?&#8221; จะตรงกับข้อความ &#8220;<strong>a</strong>&#8221; และ &#8220;<strong>abc</strong>&#8221; เท่านั้น</p>
<p>&#8220;[a-z]&#8221; จะตรงกับข้อความที่มีตัวอักษรตัวเล็กตั้งแต่ a ถึง z ในข้อความ<br />
เช่น &#8220;<strong>x</strong>&#8221; &#8220;<strong>a</strong>456<strong>xcdf</strong>&#8221; &#8220;1234<strong>u</strong>&#8221; แต่จะไม่ตรงกับ &#8220;34116&#8243; &#8220;@#$%&#8221; และ &#8220;ABC&#8221; เป็นต้น</p>
<p>&#8220;^[a-zA-Z]&#8221; จะตรงกับข้อความที่ขึ้นต้นด้วยตัวอักษรตัวเล็กหรือตัวใหญ่<br />
เช่น &#8220;<strong>a</strong>999&#8243; &#8220;<strong>A</strong> dog&#8221; และ &#8220;<strong>A</strong>BCD&#8221; แต่จะไม่ตรงกับ &#8220;2 dogs&#8221; &#8220;23sdfadg&#8221; เป็นต้น</p>
<p>จากตัวอย่างข้างบนถ้าเราเปลี่ยนเป็น &#8220;[^a-zA-Z]&#8221; ความหมายจะตรงกับข้อความอะไรก็ได้ที่มีตัวอักษรที่ไม่ใช่ตัวอักษรตัวเล็ก หรือตัวใหญ่ปนอยู่ด้วย เช่น &#8220;ab<strong>%</strong>Sd&#8221; &#8220;abc<strong>45</strong>&#8221; และ &#8220;Abc<strong>#</strong>&#8221; แต่ถ้าต้องการให้ตรงกับตัวอักษรตัวแรกของข้อความจะต้องไม่เป็นตัวอักษรตัว เล็กหรือใหญ่ จะต้องใช้รูปแบบเป็น &#8220;^[^a-zA-Z]&#8221; ซึ่งจะตรงกับ &#8220;<strong>1</strong>2AB&#8221; และ &#8220;<strong>#</strong>ABc&#8221; แต่จะไม่ตรงกับ &#8220;ab%Sd&#8221; &#8220;abc45&#8243; และ &#8220;Abc#&#8221; ส่วน &#8220;[^a-zA-Z]$&#8221; ก็จะหมายถึงข้อความอะไรก็ได้ที่ไม่ลงท้ายด้วยตัวอักษรตัวเล็กหรือตัวใหญ่ เช่น &#8220;AbcD<strong>2</strong>&#8221; และ &#8220;abcd<strong>%</strong>&#8221; เป็นต้น</p>
<p>&#8220;[0-9]%&#8221; จะตรงกับข้อความที่มีตัวเลขแล้วตามด้วย %<br />
เช่น &#8220;<strong>90%</strong>&#8221; &#8220;<strong>90%</strong>df&#8221; &#8220;a<strong>4%</strong>&#8221; &#8220;ad<strong>7%</strong>&#8221; แต่จะไม่ตรงกับ &#8220;xx%&#8221; เป็นต้น</p>
<p>&#8220;[0-9][0-9]%&#8221; จะตรงกับข้อความที่มีตัวเลข 2 ตัวแล้วตามด้วย %<br />
เช่น &#8220;<strong>90%</strong>&#8221; &#8220;<strong>90%</strong>z&#8221; &#8220;is <strong>90%</strong>&#8221; แต่จะไม่ตรงกับ &#8220;xx%&#8221; &#8220;ad7%&#8221; เป็นต้น</p>
<p>&#8220;[0-9][0-9]%$&#8221; จะตรงกับข้อความที่มีตัวเลข 2 ตัวแล้วตามด้วย % เท่านั้น ซึ่งจะต้องไม่มีอะไรต่อท้ายเครื่องหมาย %<br />
เช่น &#8220;<strong>90%</strong>&#8221; &#8220;is <strong>90%</strong>&#8221; แต่จะไม่ตรงกับ &#8220;90%z&#8221; &#8220;xx%&#8221; &#8220;ad7%&#8221; เป็นต้น</p>
<p>สำหรับ brackets [ ] นั้นจะมีข้อควรระวังเมื่อเรานำ metacharacters เช่น ^ . [ ] $ * + ? { } เข้าไปไว้ใน brackets [ ] แล้วมันจะกลายเป็นตัวอักษรธรรมดาๆ ตัวหนึ่ง โดยความหมายของ metacharacters จะหายไป<br />
ตัวอย่างเช่น &#8220;[*][0-9]&#8221; จะตรงกับข้อความที่มีตัว * แล้วตามด้วยตัวเลข เช่น &#8220;d9x<strong>*8</strong>x&#8221;</p>
<p>จากตัวอย่างที่แล้ว ถ้าเรานำเครื่องหมาย brackets [ ] ที่ครอบ * อยู่ออก ก็จะกลายเป็น &#8220;*[0-9]&#8221; ซึ่งเมื่อไม่มีเครื่องหมาย brackets อยู่แล้ว จะทำให้ * กลับไปเป็น metacharacters เช่นเดิม และเมื่อทดลองคำสั่งนี้ เราก็จะได้ error ออกมาเป็น Warning: REG_BADRPT&#8230;<br />
เพื่อแก้ปัญหานี้เราสามารถนำ escape character ( \ ) มาช่วย โดยการใส่ \ เข้าไปข้างหน้า * ก็จะได้เป็น &#8220;\*[0-9]&#8221; ซึ่งก็จะมีความหมายเท่ากับ &#8220;[*][0-9]&#8221; นั่นเองครับ</p>
<p>สำหรับ Metacharacters พิเศษที่แทนกลุ่มของตัวอักษรต่างๆ นั้นเราสามารถนำมาใช้กำหนดรูปแบบที่เราต้องการได้ เช่น ^[[:alpha:]] จะมีความหมายเท่ากับ ^[a-zA-Z] ในตัวอย่างที่ผ่านมา หรือเราสามารถเขียนในรูปแบบอื่นๆ ได้ เช่น ถ้าต้องการหาข้อความที่ประกอบด้วยตัวเลข 0 ถึง 9 หรือตัวอักษร a ถึง e ก็สามารถเขียนได้เป็น [[:digit:]a-e] ซึ่งจะตรงกับข้อความ เช่น &#8220;1&#8243; &#8220;15&#8243; &#8220;<strong>a</strong>&#8221; &#8220;<strong>b0abc</strong>zvh&#8221; แต่จะไม่ตรงกับ &#8220;g&#8221; และ &#8220;hjvz&#8221; เป็นต้น</p>
<p>นอกจากนี้มีข้อที่ควรสังเกตอีกประการหนึ่งก็คือ เราสามารถนำเอา regex 2 อันมารวมกันได้ ซึ่งรูปแบบของการเปรียบเทียบก็จะตรงกับรูปแบบของการรวมกันนั้นๆ เช่น &#8220;[a-z][0-9]$&#8221; ก็จะตรงกับข้อความที่มีตัวอักษร 2 ตัวท้ายเป็นตัวอักษรตัวเล็กตามด้วยตัวเลข เช่น &#8220;ASDF<strong>z5</strong>&#8221; และ &#8220;1235<strong>d0</strong>&#8221; และก็จะไม่ตรงกับ &#8220;ABCD4&#8243; เป็นต้น</p>
<p>ตัวอย่างการนำเอา regex หลายๆ ตัวมารวมกัน เช่น &#8220;[0-9]{2}-[0-9]{2}-[0-9]{4}&#8221; ซึ่งก็จะเป็นรูปแบบ xx-xx-xxxx โดยที่ x แต่ละตัวแทนตัวเลข เช่น 08-04-2002 เป็นต้น ซึ่งถ้าไม่ได้จัดเรียงตัวเลขรูปแบบนี้ก็จะไม่ตรงกับรูปแบบของ regex ที่กำหนด</p>
</div>
<div></div>
]]></content:encoded>
			<wfw:commentRss>http://phpconcept.com/archives/10/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>เริ่มต้นกับ PHP tag</title>
		<link>http://phpconcept.com/archives/8</link>
		<comments>http://phpconcept.com/archives/8#comments</comments>
		<pubDate>Fri, 01 Feb 2002 13:05:56 +0000</pubDate>
		<dc:creator>wachira</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://phpconcept.wordpress.com/?p=7</guid>
		<description><![CDATA[ขณะนี้คุณกำลังอ่านข้อความจากเว็บเพจ ข้อความที่คุณกำลังอ่านอยู่ ไม่ว่าจะเป็น ตัวเข้ม หรือ ตัวเอียง แบบนี้ ล้วนเกิดมาจากการแปลความหมายของ HTML โดยเว็บบราวเซอร์ สำหรับท่านที่เขียนโฮมเพจเป็นและเข้าใจ HTML คงจะเข้าใจสิ่งที่เกิดขึ้นนี้ดีนะครับ ตัวเข้มแบบนี้ เราก็ใช้แท็ก ตัวเข้ม ส่วนตัวเอียงก็ใช้แท็ก ตัวเอียง จะว่าไปแล้ว HTML ก็จึงเปรียบเสมือนเป็น presentation language ที่เป็นตัวสั่งให้บราวเซอร์แสดงผลตามคำสั่งของแท็กต่างๆ เพราะ HTML จริงๆ แล้วเป็นแค่ไฟล์ข้อความ ขอเพียงแค่คุณเข้าใจคำสั่งต่างๆ ของ HTML คุณสามารถที่จะเขียนเว็บเพจโดยใช้โปรแกรม text editor อะไรก็ได้ เช่น Notepad ใน windows vi หรือ pico ใน Unix ถ้าคุณสงสัยว่าเว็บเพจแต่ละหน้าที่คุณอ่านมาจากคำสั่ง HTML อะไรบ้าง สำหรับ Internet Explorer คุณสามารถที่จะดูได้โดยการเลือกที่ view และ source แล้วคุณก็จะเห็นคำสั่ง HTML มากมายครับในปัจจุบันมีโปรแกรมที่ช่วยอำนวยความสะดวกในการเขียนเว็บเพจ โดยที่คุณไม่ต้องเข้าไปยุ่งกับ HTML [...]]]></description>
			<content:encoded><![CDATA[<p>ขณะนี้คุณกำลังอ่านข้อความจากเว็บเพจ <img src='http://phpconcept.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ข้อความที่คุณกำลังอ่านอยู่ ไม่ว่าจะเป็น ตัวเข้ม หรือ ตัวเอียง แบบนี้ ล้วนเกิดมาจากการแปลความหมายของ HTML โดยเว็บบราวเซอร์ สำหรับท่านที่เขียนโฮมเพจเป็นและเข้าใจ HTML คงจะเข้าใจสิ่งที่เกิดขึ้นนี้ดีนะครับ</p>
<p>ตัวเข้มแบบนี้ เราก็ใช้แท็ก <strong>ตัวเข้ม</strong> ส่วนตัวเอียงก็ใช้แท็ก <em>ตัวเอียง</em> จะว่าไปแล้ว HTML ก็จึงเปรียบเสมือนเป็น presentation language ที่เป็นตัวสั่งให้บราวเซอร์แสดงผลตามคำสั่งของแท็กต่างๆ เพราะ HTML จริงๆ แล้วเป็นแค่ไฟล์ข้อความ ขอเพียงแค่คุณเข้าใจคำสั่งต่างๆ ของ HTML คุณสามารถที่จะเขียนเว็บเพจโดยใช้โปรแกรม text editor อะไรก็ได้ เช่น Notepad ใน windows vi หรือ pico ใน Unix</p>
<p>ถ้าคุณสงสัยว่าเว็บเพจแต่ละหน้าที่คุณอ่านมาจากคำสั่ง HTML อะไรบ้าง สำหรับ Internet Explorer คุณสามารถที่จะดูได้โดยการเลือกที่ view และ source แล้วคุณก็จะเห็นคำสั่ง HTML มากมายครับ<span id="more-8"></span>ในปัจจุบันมีโปรแกรมที่ช่วยอำนวยความสะดวกในการเขียนเว็บเพจ โดยที่คุณไม่ต้องเข้าไปยุ่งกับ HTML เลย เช่น Dreamweaver หรือ Namo editor โปรแกรมเหล่านี้จะช่วยให้คุณสร้างเว็บเพจได้สะดวกและรวดเร็วขึ้น แต่ถ้าคุณสนมีความสนใจและอยากที่จะศึกษา PHP แล้วละก็ คุณคงต้องมีความรู้พื้นฐานเกี่ยวกับ HTML ด้วยครับ</p>
<p>ภาษา HTML ไม่ใช่เรื่องยากเลยครับ คุณอาจจะเรียนรู้ด้วยตัวเองจากเว็บเพจของคนอื่นๆ โดยการศึกษาจาก source code นั่นแหละครับ ขอแค่เครื่องคอมพิวเตอร์ของคุณติดตั้งเว็บบราวเซอร์ไว้ คุณก็จะสามารถทดลองสร้างเว็บเพจแบบง่ายๆ ได้ที่เครื่องคอมพิวเตอร์ของคุณเอง</p>
<p>จะเห็นว่าการสร้างเว็บเพจไม่ใช่เรื่องยากอีกต่อไปครับ ใครๆ ก็ทำได้ เดี๋ยวนี้เว็บมาสเตอร์เองก็มีเกลื่อนบ้านเกลื่อนเมือง เด็กนักเรียนประถมก็สามารถสร้างเว็บของตัวเองได้ แถมทำได้สวยซะด้วย น่าชื่นชมครับ หรือแม้แต่คุณพ่อของผมซึ่งเกษียณอายุราชการแล้ว ก็มีงานอดิเรกในการทำเว็บเพจเหมือนกัน ลองดูฝีมือของคุณพ่อผมได้ที่ www.prd.go.th/prd1 สิครับ ไม่มีใครแก่เกินเรียนครับ <img src='http://phpconcept.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>แล้ว HTML เกี่ยวกับ PHP ตรงไหนละครับ? ก็เกี่ยวตรงที่คุณกำลังจะการสร้างเว็บเพจไงครับ ยังไงๆ ก็ต้องมีคำสั่ง HTML ปรากฏอยู่ใน source code ของเว็บเพจ แล้ว PHP จะไปอยู่ตรงไหนหล่ะ? คำตอบก็คือ PHP สามารถที่จะไปแทรกอยู่ตรงไหนของ HTML ก็ได้ครับ</p>
<p>ก่อนที่จะอธิบายต่อไป ผมขอยกย่อหน้าหนึ่งใน PHP คืออะไร? มาให้คุณอ่านอีกครั้งครับ<br />
&#8220;PHP เป็น Server-side scripting language คือในทุกๆ ครั้งก่อนที่เครื่องคอมพิวเตอร์ซึ่งให้บริการเป็น Web Server จะส่งหน้าเว็บเพจที่เขียนด้วย PHP ให้เรา มันจะทำการประมวลผลตามคำสั่งที่มีอยู่ให้เสร็จเสียก่อน แล้วจึงค่อยส่งผลลัพธ์ที่ได้ให้เรา ผลลัพธ์ที่ได้นั้นก็คือเว็บเพจที่เราเห็นนั่นเอง&#8221;</p>
<p>จากการที่ PHP เป็น Server-side scripting language ก็เลยทำให้คุณไม่เห็นคำสั่งของ PHP เมื่อคุณดู source code ของเว็บเพจในเว็บบราวเซอร์ เพราะคำสั่ง PHP ได้ถูกประมวลผลไปเรียบร้อยแล้วครับ</p>
<p>คำสั่งของ HTML จะอยู่ระหว่างเครื่องหมายน้อยกว่า(&lt;) และเครื่องหมายมากกว่า(&gt;) ซึ่งเราเรียกว่า HTML tag เช่น<br />
และเป็นต้น ส่วนคำสั่งของ PHP นั้นก็จะอยู่ใน PHP tag ซึ่งมีรูปแบบต่างๆ กันได้ 4 แบบ คือ</p>
<pre class="brush: text; gutter: false">Short style: &lt;? ……………… ?&gt;
XML style: &lt;?php ………… ?&gt;
Script style: &lt;SCRIPT Language="php"&gt; …… &lt;/SCRIPT&gt;
ASP style: &lt;% …………… %&gt;</pre>
<p>คุณสามารถที่จะใช้ PHP tag ในรูปแบบไหนก็ได้ แต่การเขียนแบบ Short style นั้นจะเป็นที่นิยมในหมู่นักพัฒนา PHP มากกว่ารูปแบบอื่นๆ ครับ ทั้งนี้การที่คุณจะใช้รูปแบบ Short style ได้นั้น คุณจะต้องตั้งค่าให้ PHP ยอมรับรูปแบบนี้โดยการตั้งค่าใน php.ini หรือในระหว่างการ compile PHP ให้ enable short tag ด้วย และการเขียนในรูปแบบ ASP style ก็ต้องมีการตั้งค่าให้สามารถใช้ในรูปแบบนี้ได้เช่นกันครับ<br />
การนำเอา PHP tag ไปแทรกใน HTML tag นั้น คุณสามารถเอาไปแทรกที่ตำแหน่งไหนก็ได้ตั้งแต่ต้นไฟล์ไปจนถึงท้ายไฟล์ แต่ในบางทีอาจจะกลับกันนะครับ ถ้าส่วนใหญ่ที่นั้นเป็น PHP ก็จะกลายเป็นว่า HTML แทรกอยู่ใน PHP</p>
<p>ถ้าสังเกตอีกนิด คุณจะเห็นว่าเว็บเพจที่ใช้ PHP จะลงท้ายด้วย .php .php3 หรือ .phtml เช่น index.php เป็นต้น ทั้งนี้ก็เพื่อเป็นการบอกให้ Web server รู้ว่าไฟล์ที่มันจะต้องส่งให้เรานี้เป็น PHP ซึ่งมันจะต้องทำการประมวลผลตามคำสั่งของ PHP เสียก่อน แล้วจึงค่อยส่งไฟล์ที่ได้หลังจากการประมวลผลแล้วให้เรา สาเหตุที่ Web server รู้ว่าไฟล์ที่ลงท้ายด้วย .php นี้ เป็น PHP ก็เพราะ คำสั่ง AddType application/x-httpd-php .php ที่เราเพิ่มเข้าไปในไฟล์ httpd.conf ในวิธีการติดตั้ง PHP ไงครับ</p>
<p>ผมจะลองยกตัวอย่างการแทรก PHP เข้าไปใน HTML นะครับ สำหรับตัวเลขที่อยู่ข้างหน้า จะแสดงหมายเลขบรรทัดนะครับ และตัวอย่างที่ยกมานี้เป็นเพียงส่วนหนึ่งแค่นั้นครับ ถ้าหากยังไม่เข้าใจคำสั่งก็ไม่เป็นไรครับ (ในส่วนที่เป็น PHP จะแสดงด้วยสีเขียว)</p>
<p>ตัวอย่างที่ 1</p>
<pre class="brush: php; gutter: true">&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Test page&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;?php
$today = date( "dS F Y h:i:s A" );
echo "Today is ".$today;
?&gt;
...</pre>
<p>ตัวอย่างที่ 2</p>
<pre class="brush: php; gutter: true">&lt;table border="0" cellspacing="5" cellpadding="0"&gt;
&lt;tr&gt;
&lt;td&gt;ชื่อ :*&lt;/td&gt;&lt;td&gt;&lt;input type="text" size="25" name="input_postname" &lt;?php
if (isset($input_postname)) {
echo "value="$input_postname"";
} ?&gt;&gt;&lt;/td&gt;
&lt;/tr&gt;
…</pre>
<p>สำหรับตัวอย่างที่ 3 และตัวอย่างที่ 4 ต่อไปในจะให้ผลที่แตกต่างกันครับ</p>
<p>ตัวอย่างที่ 3</p>
<pre class="brush: php; gutter: true">&lt;?php
session_start();
session_register("my_var");
?&gt;
…</pre>
<p>ตัวอย่างที่ 4</p>
<pre class="brush: php; gutter: true"> 
&lt;?php
session_start();
session_register("my_var");
?&gt;
 …</pre>
<p>ในตัวอย่างที่ 4 จะเว้นบรรทัดแรกไว้ ซึ่งผลที่ได้ก็คือเกิด error ขึ้น ซึ่งก็จะมีคำเตือนว่า &#8220;Warning: Cannot send session cache limiter &#8211; headers already sent …&#8221; ทั้งนี้เพราะบรรทัดแรกที่เว้นว่างไว้นั้นจะถูกส่งออกไปให้กับเว็บบราวเซอร์แสดงผล เพราะมันไม่ได้อยู่ใน PHP tag สาเหตุที่เกิด error นี้ขึ้นก็เพราะจากการใช้คำสั่ง session_start() เพราะคำสั่งนี้จะต้องไม่มีค่าอะไรส่งออกไปให้เว็บบราวเซอร์ก่อนมันถูกเรียกใช้งาน ซึ่งจริงๆ แล้วแม้กระทั่งคุณเคาะ space 1 ครั้ง แทรกเข้าไปข้างหน้า &lt;? ในตัวอย่างที่ 3 เท่านี้ก็จะเกิด error แล้วครับ</p>
<p>สำหรับตัวอย่างที่ 5 และตัวอย่างที่ 6 ต่อไปในจะให้ผลที่เหมือนกันครับ</p>
<p>ตัวอย่างที่ 5</p>
<pre class="brush: php; gutter: true">&lt;?php
session_start();
session_register("my_var");
?&gt;
 …</pre>
<p>ตัวอย่างที่ 6</p>
<pre class="brush: php; gutter: true">&lt;?php

session_start();
session_register("my_var");
?&gt;
 …</pre>
<p>ตัวอย่างที่ 7 นี้เป็นงานใช้ if-else statement ในการเลือกแสดงผล HTML tag ตามเงื่อนไข</p>
<p>ตัวอย่างที่ 7</p>
<pre class="brush: php; gutter: true">...
&amp;lt;? if ($today == "Wed") {
	echo "&amp;lt;b&amp;gt;&amp;lt;font color="red"&amp;gt;Let''s go to see the movie!&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;";
} else {
	echo "&amp;lt;b&amp;gt;&amp;lt;font color="blue"&amp;gt;I wanna stay at home tonight&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;";
} ?&amp;gt;
...</pre>
<p>ตัวอย่างที่ 8 จะให้ผลเช่นเดียวกันกับตัวอย่างที่ 7 ครับ</p>
<p>ตัวอย่างที่ 8</p>
<pre class="brush: php; gutter: true">...
&lt;? if ($today == "Wed") { ?&gt;
&lt;b&gt;&lt;font color="red"&gt;Let''s go to see the movie!&lt;/font&gt;&lt;/b&gt;
&lt;? } else { ?&gt;
&lt;b&gt;&lt;font color="blue"&gt;I wanna stay at home tonight&lt;/font&gt;&lt;/b&gt;
&lt;? } ?&gt;
...</pre>
<p>จะเห็นว่าคุณสามารถที่เขียน PHP tag แทรกเข้าไปในรูปแบบต่างๆ และสามารถเขียนได้หลายรูปแบบ แต่ทั้งนี้ สิ่งที่อยู่ภายใน PHP tag นั้นจะต้องเป็นคำสั่งของ PHP และต้องไม่ลืม ?&gt; สำหรับการปิด PHP tag ด้วยครับ</p>
]]></content:encoded>
			<wfw:commentRss>http://phpconcept.com/archives/8/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP คืออะไร?</title>
		<link>http://phpconcept.com/archives/7</link>
		<comments>http://phpconcept.com/archives/7#comments</comments>
		<pubDate>Sat, 01 Sep 2001 13:03:15 +0000</pubDate>
		<dc:creator>wachira</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://phpconcept.wordpress.com/?p=4</guid>
		<description><![CDATA[PHP แต่เดิมย่อมาจาก Personal Home Page แต่ต่อมาก็เปลี่ยนเป็นย่อมาจาก PHP Hypertext Preprocessor ครับ แต่ก่อนจะอธิบายต่อไปก็คงต้องพูดถึง PHP ว่ามันมีความสำคัญยังไง และทำไมเราต้องให้ความสนใจมันด้วย เคยได้ยินคำว่า Dynamic Web pages ไหมครับ? Dynamic แปลว่า ไม่อยู่นิ่ง มีการเคลื่อนไหว เมื่อเอามารวมกับ Web pages แล้ว ความหมายก็จะออกมาเป็น Dynamic Web pages ก็คือ เว็บเพจที่ไม่อยู่นิ่งและมีการเปลี่ยนแปลง เอ๊ะ? หมายความว่าเว็บเพจมันเปลี่ยนแปลงตัวเองได้รึ? ก็ใช่ครับ มันเปลี่ยนแปลงในลักษณะที่มีการตอบโต้กับผู้ใช้หรือคนที่เข้ามาดูเว็บนั่นเองครับ ส่วนมันจะเปลี่ยนแปลงหรือตอบโต้กับผู้ใช้ยังไงนั้นก็แล้วแต่คนที่ทำเว็บจะกำหนดไว้ครับ ยกตัวอย่างเช่น เว็บไซต์พวก E-Commerce ซื้อขายสินค้าต่างๆ ตัวอย่างก็คือ Amazon.com ที่ขายหนังสือ เมื่อเราสั่งหนังสือไปแล้ว มันจะทำการแสดงรายชื่อหนังสือพร้อมยอดเงินทั้งหมดให้เราดู และเว็บไซต์พวก Search Engine ต่างๆ นั่นก็จัดเป็น Dynamic Web pages [...]]]></description>
			<content:encoded><![CDATA[<p>PHP แต่เดิมย่อมาจาก Personal Home Page แต่ต่อมาก็เปลี่ยนเป็นย่อมาจาก PHP Hypertext Preprocessor ครับ แต่ก่อนจะอธิบายต่อไปก็คงต้องพูดถึง PHP ว่ามันมีความสำคัญยังไง และทำไมเราต้องให้ความสนใจมันด้วย</p>
<p>เคยได้ยินคำว่า Dynamic Web pages ไหมครับ? Dynamic แปลว่า ไม่อยู่นิ่ง มีการเคลื่อนไหว เมื่อเอามารวมกับ Web pages แล้ว ความหมายก็จะออกมาเป็น Dynamic Web pages ก็คือ เว็บเพจที่ไม่อยู่นิ่งและมีการเปลี่ยนแปลง</p>
<p>เอ๊ะ? หมายความว่าเว็บเพจมันเปลี่ยนแปลงตัวเองได้รึ? ก็ใช่ครับ มันเปลี่ยนแปลงในลักษณะที่มีการตอบโต้กับผู้ใช้หรือคนที่เข้ามาดูเว็บนั่นเองครับ ส่วนมันจะเปลี่ยนแปลงหรือตอบโต้กับผู้ใช้ยังไงนั้นก็แล้วแต่คนที่ทำเว็บจะกำหนดไว้ครับ</p>
<p>ยกตัวอย่างเช่น เว็บไซต์พวก E-Commerce ซื้อขายสินค้าต่างๆ ตัวอย่างก็คือ Amazon.com ที่ขายหนังสือ เมื่อเราสั่งหนังสือไปแล้ว มันจะทำการแสดงรายชื่อหนังสือพร้อมยอดเงินทั้งหมดให้เราดู และเว็บไซต์พวก Search Engine ต่างๆ นั่นก็จัดเป็น Dynamic Web pages เช่นกันครับ เมื่อคุณกรอกคำที่ต้องการค้นหาลงไปแล้ว มันก็จะแสดงผลออกมาให้ดูใช่ไหมครับ นั่นแหละครับเป็น Dynamic Web pages แท้ๆ เลย</p>
<p>นอกจาก Dynamic Web pages แล้วเคยได้ยินคำว่า Static Web pages ไหมครับ? ถึงคุณจะตอบว่าเพิ่งได้ยินเป็นครั้งแรก แต่ผมบอกได้เลยว่าคุณน่าจะเคยสัมผัสหรือเข้าไปดูเว็บลักษณะนี้มาบ้างแล้ว ก็คือเป็นเว็บเพจที่เป็นยังไงก็เป็นอยู่อย่างนั้นไงครับ <img src='http://phpconcept.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ไม่มีการโต้ตอบกับคนดู เพราะ Static แปลว่า คงที่ครับ เช่นเว็บพวกเอกสารสำคัญ เอกสารวิชาการต่างๆ</p>
<p>แต่เว็บเพจหลายๆ แห่งก็จัดว่าเป็น Static Web pages แต่ผู้สร้างใช้เทคนิคของ Dynamic Web pages มาสร้างได้เหมือนกันนะครับ เอ&#8230; แล้วอย่างนี้เว็บเพจที่มีเว็บมาสเตอร์คอยปรับปรุงข่าวต่างๆ ให้ทันสมัยอยู่ตลอดละครับ? เช่นมีการเปลี่ยนข่าวในหน้าแรกเป็นประจำอยู่ทุกๆ วัน เว็บเหล่านี้เป็น Dynamic หรือ Static Web pages ครับ? ลองคิดดูนะครับ <img src='http://phpconcept.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>ทีนี้ Dynamic Web pages มันให้ประโยชน์ยังไง? เป็น Static Web pages อยู่ดีๆ แล้วทำไมต้องมาทำให้เป็น Dynamic ด้วย? ลองคิดถึง Amazon.com อีกทีนะครับ สมมติว่ามันเป็น Static Web pages แบบที่เรียกว่าไม่มีระบบฐานข้อมูลอะไรเลย ทุกอย่างถูกบันทึกอยู่ในกระดาษล้วนๆ เมื่อมีการรับคำสั่งซื้อหนังสือผ่านเว็บฟอร์ม พอคุณสั่งซื้อหนังสือเสร็จแล้ว ก็มีข้อความตอบมาทางเว็บว่า ขณะนี้เราได้รับคำสั่งซื้อของคุณแล้ว และพนักงานของเรากำลังทำการตรวจคำสั่งซื้อของท่าน เมื่อพนักงานเราทำการตรวจสอบเสร็จแล้วเราจะแจ้งกลับไปทาง email ที่ท่านให้มาอีกครั้งหนึ่ง</p>
<p><span id="more-7"></span></p>
<p>เบื้องหลังฉากการทำงานลักษณะนี้อาจจะเป็นดังนี้ครับ พนักงานคนหนึ่งนำคำสั่งซื้อของคุณที่พิมพ์ออกมาจากเครื่องพิมพ์ ตรวจสอบดูว่าคุณสั่งซื้อหนังสืออะไรมาบ้างและคุณสั่งมาอย่างละกี่เล่ม แล้วนำไปเช็คดูในคลังสินค้าว่ามีหนังสือตามที่คุณสั่งมาหรือเปล่า แต่ละเล่มราคาเท่าไหร่ คุณให้เค้าส่งให้แบบไหน? ธรรมดาหรือด่วน? ต้องบวกค่าขนส่งเข้าไปอีกเท่าใด เมื่อรวมภาษี เข้าไปแล้วยอดรวมเป็นราคาเท่าไหร่? แล้วพนักงานคนนี้ก็จัดแจงส่ง email แจ้งยอดรวมทั้งหมดตอบคุณกลับมา ทั้งหมดนี่อาจใช้เวลาไม่ถึงชั่วโมงหรือเป็นชั่วโมงหรือเป็นวันๆ ขึ้นอยู่กับคำสั่งซื้อของคุณและของคนอื่นๆ ที่สั่งเข้ามาพร้อมๆ กันว่ามีจำนวนมากน้อยแค่ไหน จะเห็นว่าใช้เวลาค่อนข้างมาก แน่นอนว่าการตรวจสอบใช้เวลามากๆ แบบนี้ย่อมไม่เป็นผลดีต่อธุรกิจครับ</p>
<p>แล้วในเมื่อปัจจุบันเรามีระบบคอมพิวเตอร์ มีระบบฐานข้อมูลอยู่แล้วทำไมเราจึงไม่นำมาใช้ เมื่อใครคนหนึ่งคิดได้ดังนั้น ก็เลยมีการเชื่อมโยงระบบฐานข้อมูลกับเว็บเพจเกิดเป็น Database-driven Web pages ขึ้นมาไงครับ</p>
<p>ขอย้อนกลับมาที่ระบบสั่งซื้อหนังสืออีกครั้งหนึ่งครับ เมื่อมีการนำระบบฐานข้อมูลเข้ามาใช้ร่วมกับเว็บเพจ ในระบบฐานข้อมูลก็จะมี รายชื่อหนังสือ ชื่อผู้แต่งของหนังสือแต่ละเล่ม ปีที่ตีพิมพ์ สำนักพิมพ์ ราคาและปริมาณที่มีอยู่ในคลังสินค้า อะไรอย่างนี้เป็นต้นครับ ทีนี้เมื่อมีการสั่งซื้อผ่านเว็บเพจเข้ามา คอมพิวเตอร์ก็จะทำการตรวจสอบ คิดราคา คิดยอดเงินทั้งหมด แล้วแจ้งผลให้คุณทราบผ่านทางเว็บเพจหลังจากที่คุณทำการสั่งซื้อแล้วทันที สะดวกและรวดเร็วกว่าขั้นตอนแรกไหมครับ และวิธีการในลักษณะนี้ก็ทำให้ประหยัดค่าใช้จ่ายด้วย เพราะไม่ต้องมาจ้างคนจำนวนมากมาคอยตรวจสอบความถูกต้องของคำสั่งซื้อ</p>
<p>แล้ว PHP เข้ามาเกี่ยวข้องตรงไหน? เกี่ยวตรงที่เราสามารถสร้าง Dynamic Web pages ได้จาก PHP ไงครับ เราสามารถใช้ PHP สร้างเว็บเพจที่มีการโต้ตอบกับผู้ใช้ สามารถกำหนดให้มีการแสดงผลบนเว็บได้แตกต่างกันไปตามแต่ผู้ใช้ต้องการ และเราสามารถใช้ PHP ในการติดต่อกับระบบฐานข้อมูลต่างๆ เพื่อสร้างเป็น Database-driven Web pages ขึ้นมาได้เช่นกัน</p>
<p>PHP เป็น Server-side scripting language คือในทุกๆ ครั้งก่อนที่เครื่องคอมพิวเตอร์ซึ่งให้บริการเป็น Web Server จะส่งหน้าเว็บเพจที่เขียนด้วย PHP ให้เรา มันจะทำการประมวลผลตามคำสั่งที่มีอยู่ให้เสร็จเสียก่อน แล้วจึงค่อยส่งผลลัพธ์ที่ได้ให้เรา ผลลัพธ์ที่ได้นั้นก็คือเว็บเพจที่เราเห็นนั่นเอง</p>
<p>ถึงตอนนี้ หากคุณเริ่มจะสนใจ PHP แล้ว ผมอยากให้คุณทราบว่า PHP เป็นภาษาที่ง่ายต่อการเรียนรู้ ยิ่งถ้าคุณมีความคุ้นเคยกับภาษา C หรือ Perl Script ก็จะยิ่งง่ายเข้าไปใหญ่ เพราะ syntax คล้ายกันมากนั่นเอง และหากคุณใช้ PHP เขียนเว็บเพจแล้วเกิดปัญหาหรือข้อสงสัย คุณก็สามารถที่จะสอบถามไปยังผู้ใช้ PHP ที่มีอยู่จำนวนมากมายทั่วโลกได้ คนไทยเองก็ใช้ PHP กันค่อนข้างมากนะครับ จะเห็นว่าในปัจจุบันมีหนังสือเกี่ยวกับ PHP ออกวางจำหน่ายหลายเล่ม และถ้าคุณลองค้นหารายละเอียดของผู้ให้บริการ Web hosting ต่างๆ แล้ว ก็จะเห็นว่าหลายๆ แห่งจะมี PHP หรือ ASP ให้เลือกใช้ ครับ</p>
<p>ในเมื่อ PHP เป็นที่นิยมกันขนาดนี้แล้ว จะลองศึกษากันสักนิดดีไหมครับ? <img src='http://phpconcept.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://phpconcept.com/archives/7/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using memcached
Page Caching using memcached
Database Caching 2/44 queries in 0.017 seconds using memcached
Object Caching 535/614 objects using memcached

Served from: phpconcept.com @ 2012-02-23 06:58:48 -->
