<?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>jQuery, Ajax, PHP, JSON, XML, Web Technologies &#187; function</title>
	<atom:link href="http://blog.chonla.com/category/function/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.chonla.com</link>
	<description>คุยกันเรื่อง jQuery, Ajax, PHP, JSON, XML และ Web Technologies เป็นภาษาไทยกันดีกว่า</description>
	<lastBuildDate>Thu, 02 Sep 2010 18:43:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>include? require? ใช้ตัวไหนดี ฤๅจะเด็ดทีเดียวเสียทั้งคู่</title>
		<link>http://blog.chonla.com/2009/06/include-require-%e0%b9%83%e0%b8%8a%e0%b9%89%e0%b8%95%e0%b8%b1%e0%b8%a7%e0%b9%84%e0%b8%ab%e0%b8%99%e0%b8%94%e0%b8%b5-%e0%b8%a4%e0%b9%85%e0%b8%88%e0%b8%b0%e0%b9%80%e0%b8%94%e0%b9%87%e0%b8%94%e0%b8%97/</link>
		<comments>http://blog.chonla.com/2009/06/include-require-%e0%b9%83%e0%b8%8a%e0%b9%89%e0%b8%95%e0%b8%b1%e0%b8%a7%e0%b9%84%e0%b8%ab%e0%b8%99%e0%b8%94%e0%b8%b5-%e0%b8%a4%e0%b9%85%e0%b8%88%e0%b8%b0%e0%b9%80%e0%b8%94%e0%b9%87%e0%b8%94%e0%b8%97/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 16:16:06 +0000</pubDate>
		<dc:creator>chonla</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[include]]></category>
		<category><![CDATA[include_once]]></category>
		<category><![CDATA[require]]></category>
		<category><![CDATA[require_once]]></category>

		<guid isPermaLink="false">http://blog.chonla.com/?p=199</guid>
		<description><![CDATA[คำถามง่าย ๆ ว่า ระหว่าง include กับ require ใน PHP นั้น ต่างกันตรงไหน สำหรับคนที่ใช้งานบ่อย ๆ บางคนอาจจะไม่เคยสังเกต ความจริงแล้ว ทั้ง 2 ฟังก์ชั่นนี้ ต่างก็ทำหน้าที่เหมือน ๆ กัน คือ ทำการรวมเอาไฟล์ที่ระบุ และประมวลผลไฟล์นั้นเข้ามา (include and evaluate) ส่วนที่แตกต่างกันจะแตกต่างกันอยู่จุดเดียว ก็คือการจัดการกับ Error ที่เกิดขึ้น โดยที่ทั้งสองฟังก์ชั่นเวลาเกิดปัญหาจะแสดง warning ออกมาเหมือนกัน โดยที่ require จะแสดงออกมาเป็น fatal error แต่ include จะแสดงเป็น warning เฉย ๆ นั่นหมายถึงว่าถ้าเราใช้ require แล้วเวลาเกิด error (เช่น ไม่มีไฟล์ที่ต้องการ) ก็จะเกิดเป็น fatal error และจะไม่ทำการประมวลผลส่วนที่เหลือของหน้าต่อ [...]]]></description>
			<content:encoded><![CDATA[<p>คำถามง่าย ๆ ว่า ระหว่าง include กับ require ใน PHP นั้น ต่างกันตรงไหน สำหรับคนที่ใช้งานบ่อย ๆ บางคนอาจจะไม่เคยสังเกต</p>
<p>ความจริงแล้ว ทั้ง 2 ฟังก์ชั่นนี้ ต่างก็ทำหน้าที่เหมือน ๆ กัน คือ ทำการรวมเอาไฟล์ที่ระบุ และประมวลผลไฟล์นั้นเข้ามา (include and evaluate) ส่วนที่แตกต่างกันจะแตกต่างกันอยู่จุดเดียว ก็คือการจัดการกับ Error ที่เกิดขึ้น</p>
<p><span id="more-199"></span>โดยที่ทั้งสองฟังก์ชั่นเวลาเกิดปัญหาจะแสดง warning ออกมาเหมือนกัน โดยที่ require จะแสดงออกมาเป็น fatal error แต่ include จะแสดงเป็น warning เฉย ๆ นั่นหมายถึงว่าถ้าเราใช้ require แล้วเวลาเกิด error (เช่น ไม่มีไฟล์ที่ต้องการ) ก็จะเกิดเป็น fatal error และจะไม่ทำการประมวลผลส่วนที่เหลือของหน้าต่อ ในขณะที่ warning จะแสดงเป็น warning และจะยังคงประมวลผลส่วนที่เหลือของหน้าต่อไป</p>
<p>หลักการนี้ได้รวมถึงฟังก์ชั่น include_once และ require_once ด้วยครับ (** include_once และ require_once จะเป็นการเอาไฟล์มารวมเพียงครั้งเดียว ถึงแม้่จะเรียกหลายครั้งก็ตาม **)</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://blog.chonla.com/wp-content/plugins/add-to-any/share_save_171_16.gif" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.chonla.com/2009/06/include-require-%e0%b9%83%e0%b8%8a%e0%b9%89%e0%b8%95%e0%b8%b1%e0%b8%a7%e0%b9%84%e0%b8%ab%e0%b8%99%e0%b8%94%e0%b8%b5-%e0%b8%a4%e0%b9%85%e0%b8%88%e0%b8%b0%e0%b9%80%e0%b8%94%e0%b9%87%e0%b8%94%e0%b8%97/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>สร้าง Square Thumbnail แบบ Facebook กันเถอะ</title>
		<link>http://blog.chonla.com/2008/12/%e0%b8%aa%e0%b8%a3%e0%b9%89%e0%b8%b2%e0%b8%87-square-thumbnail-%e0%b9%81%e0%b8%9a%e0%b8%9a-facebook-%e0%b8%81%e0%b8%b1%e0%b8%99%e0%b9%80%e0%b8%96%e0%b8%ad%e0%b8%b0/</link>
		<comments>http://blog.chonla.com/2008/12/%e0%b8%aa%e0%b8%a3%e0%b9%89%e0%b8%b2%e0%b8%87-square-thumbnail-%e0%b9%81%e0%b8%9a%e0%b8%9a-facebook-%e0%b8%81%e0%b8%b1%e0%b8%99%e0%b9%80%e0%b8%96%e0%b8%ad%e0%b8%b0/#comments</comments>
		<pubDate>Mon, 01 Dec 2008 11:09:06 +0000</pubDate>
		<dc:creator>chonla</dc:creator>
				<category><![CDATA[Image]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[GD]]></category>
		<category><![CDATA[Thumbnail]]></category>

		<guid isPermaLink="false">http://blog.chonla.com/?p=136</guid>
		<description><![CDATA[งง Thumbnail แบบ Facebook คืออะไร ความจริงแล้วผมก็ไม่อยากอ้างถึง Facebook ซักเท่าไหร่ แต่ก็เป็นเพราะว่า ผมไปเห็นการสร้าง Thumbnail แบบนี้ครั้งแรกที่ Facebook ครับ ดังนั้น ใครจะบอกว่า เฮ้ย ของที่นั่นที่นี่ตะหาก อันนั้นก็แล้วแต่ครับ แค่ผมเห็นที่ Facebook เท่านั้นเองครับ ตามลอจิกของมันก็ไม่ได้ยุ่งยากอะไรครับ แต่จะแตกต่างจากที่เราเคยคิดในเรื่องการสร้าง Thumbnail ทั่ว ๆ ไป คือ ไม่ใช่แค่ย่อรูปลงมา แต่เราจะ Crop เอาเฉพาะส่วนที่ต้องการ ทำให้เราได้ Thumbnail ที่เป็นรูปสี่เหลี่ยมจัตุรัสครับ หลักการง่าย ๆ คือ เราจะย่อลงมาให้ด้านที่สั้นที่สุดให้มีขนาดตามที่ต้องการ หลังจากนั้นก็ทำการ Crop รูปที่เหลือให้เป็นสี่เหลี่ยมจัตุรัสตามขนาดที่เราเลือกเท่านั้นเองครับ ตำแหน่งของการ Crop ที่ผมเลือก คือตรงกึ่งกลางของภาพครับ ด้วยเหตุผลที่ว่า ปกติแล้ว ภาพถ่าย เนื้อหาที่สำคัญจะอยู่บริเวณกลาง ๆ ของภาพครับ ดังนั้นเราก็จะ Crop [...]]]></description>
			<content:encoded><![CDATA[<p>งง Thumbnail แบบ Facebook คืออะไร ความจริงแล้วผมก็ไม่อยากอ้างถึง Facebook ซักเท่าไหร่ แต่ก็เป็นเพราะว่า ผมไปเห็นการสร้าง Thumbnail แบบนี้ครั้งแรกที่ Facebook ครับ ดังนั้น ใครจะบอกว่า เฮ้ย ของที่นั่นที่นี่ตะหาก อันนั้นก็แล้วแต่ครับ แค่ผมเห็นที่ Facebook เท่านั้นเองครับ</p>
<p><span id="more-136"></span></p>
<p>ตามลอจิกของมันก็ไม่ได้ยุ่งยากอะไรครับ แต่จะแตกต่างจากที่เราเคยคิดในเรื่องการสร้าง Thumbnail ทั่ว ๆ ไป คือ ไม่ใช่แค่ย่อรูปลงมา แต่เราจะ Crop เอาเฉพาะส่วนที่ต้องการ ทำให้เราได้ Thumbnail ที่เป็นรูปสี่เหลี่ยมจัตุรัสครับ</p>
<p>หลักการง่าย ๆ คือ เราจะย่อลงมาให้ด้านที่สั้นที่สุดให้มีขนาดตามที่ต้องการ หลังจากนั้นก็ทำการ Crop รูปที่เหลือให้เป็นสี่เหลี่ยมจัตุรัสตามขนาดที่เราเลือกเท่านั้นเองครับ</p>
<p>ตำแหน่งของการ Crop ที่ผมเลือก คือตรงกึ่งกลางของภาพครับ ด้วยเหตุผลที่ว่า ปกติแล้ว ภาพถ่าย เนื้อหาที่สำคัญจะอยู่บริเวณกลาง ๆ ของภาพครับ ดังนั้นเราก็จะ Crop เฉพาะส่วนกลาง ๆ ของภาพมาใช้นั่นเองครับ</p>
<p>เมื่อได้ลอจิกง่าย ๆ ตามนี้แล้ว ก็จะได้ Code ตามนี้ครับ</p>
<pre name="code" class="php">
function create_square_thumb($srcimg, $thumbimg, $size)
{
$src = imagecreatefromjpeg($srcimg);
if (!$src) return FALSE;

list($w, $h) = getimagesize($srcimg);
$nw = 0;
$nh = 0;
$sx = 0;
$sy = 0;
if ($w &gt; $h)
{
$nh = $size;
$nw = $size * $w / $h;
$sx = ($w - $h) / 2;
$ss = $h;
}
else
{
$nw = $size;
$nh = $size * $h / $w;
$sy = ($h - $w) / 2;
$ss = $w;
}

$tmp = imagecreatetruecolor($size, $size);
if (!$tmp) return FALSE;

if (imagecopyresampled($tmp, $src, 0, 0, $sx, $sy, $size, $size, $ss, $ss))
return imagejpeg($tmp, $thumbimg, 100);
return FALSE;
}
</pre>
<p>วิธีเรียกใช้งานก็ง่ายดายเหลือเกินครับ แค่</p>
<pre name="code" class="php">
<em>bool</em> create_square_thumb(<em>&lt;ชื่อรูปต้นฉบับ&gt;</em>, <em>&lt;ชื่อรูป Thumbnail ที่ต้องการ&gt;</em>, <em>&lt;ขนาดความกว้างของรูป Thumbnail ที่ต้องการ&gt;</em>);
</pre>
<p>ใครที่สร้างไฟล์ไม่ได้ก็อย่าลืม set permission ของ path ปลายทางให้สามารถ write ได้ด้วยนะครับ (เช่น 777)</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://blog.chonla.com/wp-content/plugins/add-to-any/share_save_171_16.gif" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.chonla.com/2008/12/%e0%b8%aa%e0%b8%a3%e0%b9%89%e0%b8%b2%e0%b8%87-square-thumbnail-%e0%b9%81%e0%b8%9a%e0%b8%9a-facebook-%e0%b8%81%e0%b8%b1%e0%b8%99%e0%b9%80%e0%b8%96%e0%b8%ad%e0%b8%b0/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Redirect แล้วอย่าคิดว่าจะไม่เห็นนะ</title>
		<link>http://blog.chonla.com/2008/11/redirect-%e0%b9%81%e0%b8%a5%e0%b9%89%e0%b8%a7%e0%b8%ad%e0%b8%a2%e0%b9%88%e0%b8%b2%e0%b8%84%e0%b8%b4%e0%b8%94%e0%b8%a7%e0%b9%88%e0%b8%b2%e0%b8%88%e0%b8%b0%e0%b9%84%e0%b8%a1%e0%b9%88%e0%b9%80%e0%b8%ab/</link>
		<comments>http://blog.chonla.com/2008/11/redirect-%e0%b9%81%e0%b8%a5%e0%b9%89%e0%b8%a7%e0%b8%ad%e0%b8%a2%e0%b9%88%e0%b8%b2%e0%b8%84%e0%b8%b4%e0%b8%94%e0%b8%a7%e0%b9%88%e0%b8%b2%e0%b8%88%e0%b8%b0%e0%b9%84%e0%b8%a1%e0%b9%88%e0%b9%80%e0%b8%ab/#comments</comments>
		<pubDate>Thu, 27 Nov 2008 13:45:19 +0000</pubDate>
		<dc:creator>chonla</dc:creator>
				<category><![CDATA[HTTP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Performance Tuning]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[HTTP Header]]></category>
		<category><![CDATA[Redirect]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://blog.chonla.com/?p=132</guid>
		<description><![CDATA[คำสั่งการทำ Redirect ใน PHP นั้น อย่างที่เรารู้ ๆ กันอยู่ว่าเพียงแค่พิมพ์ว่า header("location:http://blog.chonla.com"); ซึ่งความจริงแล้ว มันเป็นการกำหนดค่า Location ลงไปใน HTTP Header นั่นเอง เรายังสามารถกำหนด Header อื่น ๆ ลงไปใน HTTP Header ได้อีก แต่วันนี้ผมจะพูดถึงเฉพาะ Location ครับ มีหลายคนหลงคิดไปเองว่า การสั่ง Redirect ด้วยวิธีนี้นั้น ผู้ใช้จะไม่เห็นส่วนที่เหลือในเว็บ เว็บหนึ่งที่มีการตรวจสอบว่าผู้ใช้ล็อกอินแล้วหรือยัง ถ้ายังให้ redirect ไปยังหน้าล็อกอิน แต่ถ้าล็อกอินอยู่แล้วก็ให้แสดงเนื้อหาในเว็บนั้นเลย ตามโค๊ดด้านล่างนี้ครับ &#60;?php if (!$login) header("location:login.php"); ?&#62; เนื้อหาสำคัญที่จะเข้าถึงได้เฉพาะผู้ที่ล็อกอินแล้วเท่านั้น สิ่งที่เกิดขึ้นจริงคือ เมื่อ PHP แปลคำสั่งถึง header ที่กำหนด location แล้ว จะเป็นการส่ง HTTP Response [...]]]></description>
			<content:encoded><![CDATA[<p>คำสั่งการทำ Redirect ใน PHP นั้น อย่างที่เรารู้ ๆ กันอยู่ว่าเพียงแค่พิมพ์ว่า</p>
<pre class="php" name="code">header("location:http://blog.chonla.com");</pre>
<p>ซึ่งความจริงแล้ว มันเป็นการกำหนดค่า Location ลงไปใน HTTP Header นั่นเอง เรายังสามารถกำหนด Header อื่น ๆ ลงไปใน HTTP Header ได้อีก แต่วันนี้ผมจะพูดถึงเฉพาะ Location ครับ</p>
<p><span id="more-132"></span></p>
<p>มีหลายคนหลงคิดไปเองว่า การสั่ง Redirect ด้วยวิธีนี้นั้น ผู้ใช้จะไม่เห็นส่วนที่เหลือในเว็บ เว็บหนึ่งที่มีการตรวจสอบว่าผู้ใช้ล็อกอินแล้วหรือยัง ถ้ายังให้ redirect ไปยังหน้าล็อกอิน แต่ถ้าล็อกอินอยู่แล้วก็ให้แสดงเนื้อหาในเว็บนั้นเลย ตามโค๊ดด้านล่างนี้ครับ</p>
<pre class="php" name="code">&lt;?php
if (!$login)
    header("location:login.php");
?&gt;
เนื้อหาสำคัญที่จะเข้าถึงได้เฉพาะผู้ที่ล็อกอินแล้วเท่านั้น</pre>
<p>สิ่งที่เกิดขึ้นจริงคือ เมื่อ PHP แปลคำสั่งถึง header ที่กำหนด location แล้ว จะเป็นการส่ง HTTP Response 302 กลับไป ซึ่งหมายถึงสิ่งที่เว็บบราวเซอร์ต้องการนั้นอยู่อีกที่หนึ่ง รวมถึงระบุ URL ของหน้านั้น ๆ กลับไปให้ <strong><span style="color: #ff0000;">และยังทำการแปลส่วนที่เหลือจนจบและส่งกลับไปให้บราวเซอร์ด้วย</span></strong></p>
<p>เริ่มเห็นปัญหาแล้วหรือยังล่ะครับ ถ้าเริ่มเห็นอะไรเหมือนที่ผมเห็นแล้ว ลองไปดู <a title="LIVE DEMO : Clean Redirection" href="http://sandbox.chonla.com/redirect" target="_blank">LIVE DEMO</a> กันได้เลยครับ</p>
<p>คุณจะเห็นรายละเอียดใน LIVE DEMO ได้ง่ายขึ้นด้วยโปรแกรมประเภท HTTP Sniffer ครับ เช่น Fiddler, HTTPWatch หรือจะใช้พวก Packet Sniffer อย่างเช่น WireShark (Ethereal)</p>
<p>การแก้ไขปัญหามีหลายวิธีครับ ใน LIVE DEMO ผมใช้ exit() เป็นตัวแก้ไขปัญหา แต่ในความเป็นจริงแล้ว เราอาจจะใช้ if&#8230;else&#8230; ครอบไว้ก็ได้ครับ หรือใครมีวิธีอื่น ๆ อีกก็มาคุยกันได้ครับ</p>
<p>ตัวอย่างภาพที่ผมเซฟมาให้ดูนั้น เป็นภาพที่ได้จาก HTTPWatch ครับ ให้ลองเปรียบเทียบกันระหว่างส่วนที่เป็น Content กันระหว่างแบบที่ผมไม่ได้ใส่ exit() กับแบบที่ผมใส่ exit() เพื่อให้เห็นความแตกต่างของสิ่งที่ได้ส่งกลับมาให้บราวเซอร์ครับ</p>
<div id="attachment_133" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.chonla.com/wp-content/uploads/2008/11/loc.gif"><img class="size-medium wp-image-133" title="loc" src="http://blog.chonla.com/wp-content/uploads/2008/11/loc-300x134.gif" alt="Redirect ทั่ว ๆ ไป" width="300" height="134" /></a><p class="wp-caption-text">Redirect ทั่ว ๆ ไป</p></div>
<div id="attachment_134" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.chonla.com/wp-content/uploads/2008/11/locexit.gif"><img class="size-medium wp-image-134" title="locexit" src="http://blog.chonla.com/wp-content/uploads/2008/11/locexit-300x134.gif" alt="Redirect และปิดด้วย exit()" width="300" height="134" /></a><p class="wp-caption-text">Redirect และปิดด้วย exit()</p></div>
<p>นอกจากนี้แล้วการทำแบบนี้ยังทำให้ Perfomance สูงขึ้นด้วยครับ เพราะ PHP ไม่จำเป็นต้องประมวลผลคำสั่งส่วนที่เหลือนั่นเองครับ</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://blog.chonla.com/wp-content/plugins/add-to-any/share_save_171_16.gif" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.chonla.com/2008/11/redirect-%e0%b9%81%e0%b8%a5%e0%b9%89%e0%b8%a7%e0%b8%ad%e0%b8%a2%e0%b9%88%e0%b8%b2%e0%b8%84%e0%b8%b4%e0%b8%94%e0%b8%a7%e0%b9%88%e0%b8%b2%e0%b8%88%e0%b8%b0%e0%b9%84%e0%b8%a1%e0%b9%88%e0%b9%80%e0%b8%ab/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
