Tuesday, April 27th, 2010
ก็บังเอิญว่าในเว็บ mocyc.com มีระบบที่ต้องส่งเมล์ถึงสมาชิกอยู่บ่อยครั้ง และจากการใช้งานระบบส่งเมล์บน Server เพื่อส่งเมล์ไปยัง Hotmail บางทีก็เข้า Inbox บ้าง บางทีก็ไปอยู่ Junkbox บ้าง บางทีไม่เข้าเลยก็มี ก็เลยต้องหาวิธีส่งเพื่อให้เข้า Inbox ให้ได้
ลองทั้งใช้คำสั่ง mail เอง และ ใช้ SMTP เพื่อส่งก็ยังเจออาการเดิมๆ
ปกติผมจะใช้ PHPmailer ในการส่งเมล์อยู่แล้ว พอเจอปัญหาส่งเมล์ไม่เข้าหนักขึ้นๆ ผมก็เลยต้องเปลี่ยนมาเป็น ใช้ PHPMailer ส่งผ่าน Gmail ซึ่งก็สามารถส่งเมล์เข้า Inbox Hotmail ได้ทุกครั้งเช่นกัน แต่มันติดอยู่ที่ Gmail ให้ส่งได้ไม่เกิน 100 Mail ต่อวันเท่านั้น (ทำไมน้อยจังฟ่ะ)
ตามไปอ่าน เขียน php ส่งเมล์ด้วย PHPMailer ด้วย Gmail Account ได้จากเว็บ 9aum ส่วนวิธีการใช้งาน PHPMailer ขอไม่พูดถึงครับ ไปดูเพิ่มเติมได้ที่ http://phpmailer.sourceforge.net/
ก็จากที่ใช้ Gmail แล้วมีปัญหาว่ามันส่งได้แค่วันละ 100 Mail ต่อวัน นี่เอง จึงทำให้เกิดปัญหาว่าเมื่อเกิน 100 ไปเมล์ก็จะส่งไม่ถึงจุดหมาย ก็เลยต้องหาวิธีใหม่…
และแล้วก็พบทางสว่าง เมื่อได้เห็นข้อความนี้ Yahoo Mail email send limit - no more than 100 emails or recipients per hour โดยที่ทาง Yahoo.com สามารถให้ส่งเมล์ได้ถึง 100 Mail ไม่ใช่ต่อวัน แต่เป็นต่อชั่วโมง……โอ้วแม่เจ้า
ก็จัดแจงเปลี่ยนค่าตัวแปรในสคริปส่งเมล์ดูสิว่าจะส่งได้ไหม
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->Host = “smtp.mail.yahoo.com”;
$mail->Port = 25;
$mail->Username = “youruser@yahoo.com”;
$mail->Password = “password”;
$mail->SetFrom(”youruser@yahoo.com”, “Mocyc Dot Com”);
$mail->AddReplyTo(”youruser@yahoo.com”,”Mocyc Dot Com”);
$message = “มีคนตอบประกาศของท่านใน Mocyc.com<br /><br />”;
$message .= “URL : <a href=\”http://www.mocyc.com/store/\” target=\”_blank\”>http://www.mocyc.com/store/</a><br /><br />”;
$message .= “หมายเหตุ : อีเมล์นี้เป็นอีเมล์อัตโนมัติจาก Mocyc.com ไม่ต้องตอบกลับ<br /><br />”;
$mail->Subject = ‘Comment on your classified Mocyc.com’;
$mail->MsgHTML($message);
$address = $arr_member[’email’];
$mail->AddAddress($address, “”.$arr_data[’name’].”");
$mail->Send();
ได้ครับ ผมลองส่งให้ตัวเองกว่า 100 ครั้งต่อชั่วโมง ยังส่งได้ ไม่มีหลุดครับ เข้า Inbox ตลอดครับ

ก็ลองใช้งานกันดูนะครับไม่ได้ยากอะไรมากนักเลย
เข้าไปดูข้อมูลเพิ่มเติมได้ดังนี้
Send email rate limit for webmail providers - Gmail, Yahoo! Mail, Hotmail, AOL, Lycos Mail
Incoming and Outgoing Mail Server Settings for Hotmail, Yahoo! Mail, GMail, MSN, AOL and more
Posted in PHP, ความรู้ | 1 Comment »
Monday, September 14th, 2009
วันนี้ผมจะมาพูดถึงฟังก์ชั่นง่ายๆที่มีให้ใช้ใน MySQL กันบ้าง หลังจากที่ไม่ได้เขียน Blog แบบที่มาสาระมานาน วันนี้ขอเขียนหน่อย พอดีเอามาใช้กับเว็บ และ เห็นมีน้องๆและเพื่อนๆหลายๆคนถามผมมาว่า “พี่แม็คขอไอเดียการทำแบบนี้ให้หน่อยสิ” ก็เลยจัดไป
จะว่าไปฟังก์ชั่นที่ผมจะพูดถึงนี้มันก็เป็นฟังก์ชั่นมาตรฐานใน MySQL นี่แหล่ะ แต่บางคนอาจจะไม่เคยทำ แต่ไปใช้การคำนวนในรูปแบบอื่นๆแทน ซึ่งคำสั่งพวกนี้ไปหาอ่านกันได้เพิ่มเติมใน MySQL Manual ได้ครับ
ไอเดียที่มีคนถามผมมาก็คือ
- ไอเดียในการกำหนดวัน เวลา ในการแสดงข่าวสาร
- ไอเดียในการกำหนดวันหมดอายุของแบนเนอร์ต่างๆ
สมัยก่อนตอนที่ผมเขียน PHP แบบมั่วๆในแบบของผมเอง ผมก็มักจะใช้วิธีการคำนวนจากค่า TIMESTAMP แล้วเอาไปบวก ไปลบ ค่าของวินาทีต่างๆ เพื่อให้ได้ผลลัพธ์ตามที่ผมต้องการ แต่เมื่อเริ่มใช้ PHP ไปนานๆเข้าก็ได้เห็นจากใน Manual ของ MySQL ในการใช้คำสั่งในการ Query ข้อมูลเพื่อให้ได้ผลลัพธ์ในแบบที่เราต้องการ ทำให้เขียนโค๊ดได้ไวขึ้น และ แม่นยำมากยิ่งขึ้น
มาดูอันดับแรกเลยก็คือ ฟังก์ชั่นในการหาผลต่างของวันนะครับ ก็เลือกใช้ตัวนี้เลย
DATEDIFF(expr1,expr2)
โดยที่ expr1 ก็คือ ค่าวันเวลาช่วงที่ 1 และ expr2 ก็คือช่วงเวลาที่ 2 เพื่อหาความต่างของเวลา มาลองดูตัวอย่างดีกว่า
SELECT DATEDIFF(’1997-12-31 23:59:59′,’1997-12-30′);
ก็จะได้ผลต่างของเวลาทั้งสองเท่ากับ 1 วัน
SELECT DATEDIFF(’1997-11-30 23:59:59′,’1997-12-31′);
ก็จะได้ผลต่างของเวลาทั้งสองเท่ากับ -31 วันครับ
นำมาประยุกต์กับการใช้งานอะไร?? ก็เอามานับจำนวนวันของข้อมูลได้ เช่น กระทู้นี้ลงประกาศมากี่วันแล้ว

มาดูฟังก์ชั่นต่อไปที่อยู่ในคำถามที่มีคนถามไอเดียเกี่ยวกับว่าจะกำหนดวันที่แสดงข่าว หรือ วันหมดอายุของแบนเนอร์ จริงๆแล้วมันง่ายมากมายนัก เอาให้คนที่ไม่รู้ละกันนะครับ ไม่รู้ไอเดียแต่ละคนจะเหมือนกันไหม แต่ไอเดียผมจะเป็นแบบนี้
- กำหนดฟิลล์ขึ้นมา 1 ฟิลล์ในตารางที่เราต้องการกำหนดให้มีการกำหนดวันแสดงผลข่าว เช่นผมกำหนดชื่อฟิลล์ว่า date_show_content ซึ่งผมจะกำหนดให้เป็น DATETIME นะครับ หรือใครจะกำหนดเป็น DATE เฉยๆก็ไม่ว่ากัน
- เวลา Admin เพิ่มข่าวสาร และจะกำหนดวันที่จะแสดงก็อาจจะทำ Javascript ที่เป็นพวกสคริป DateTime Picker มาเลือกวันและเวลาในการลงประกาศ
ซึ่ง 2 ข้อนี้ก็อาจจะง่ายมากในการทำ ซึ่งผมจะไม่พูดถึง แต่สิ่งที่ผมจะพูดถึงก็คือการกำหนดแบบว่ากำหนดจำนวนวันเข้าไป เช่น เราเพิ่มข้อมูลวันนี้ แต่อยากให้มันแสดงผลในอีก 5 วันข้างหน้า เราจะเขียนแบบใด ซึ่งอาจจะเอาไปประยุกต์กับการกำหนดการหมดอายุของแบนเนอร์ได้ว่าให้แบนเนอร์นี้ลงโฆษณาได้ 7 วัน เป็นต้น
DATE_ADD และ DATE_SUB คำสั่งนี้เคยใช้กันบ้างไหม ?
สองฟังก์ชั่นนี้มีประโยชน์มากๆเลยในการหาวันข้างหน้า และ วันย้อนหลัง โดยลักษณะการเรียกใช้จะเป็นแบบนี้
DATE_ADD(date,INTERVAL expr unit)
DATE_SUB(date,INTERVAL expr unit)
DATE_ADD ชื่อก็บอกแล้วว่า ADD นั่นก็คือเอาเพิ่มวันแน่นอน มาดูกันว่าเป็นอย่างไร
SELECT DATE_ADD(’1997-12-31 23:59:59′,INTERVAL 1 SECOND);
ก็จะได้ 1998-01-01 00:00:00
SELECT DATE_ADD(’1997-12-31 23:59:59′,INTERVAL 1 DAY);
ก็จะได้ผลของการเพิ่มวันไป 1 วัน คือ 1998-01-01 23:59:59
DATE_SUB ก็ตรงกันข้ามครับ ก็คือหาวันย้อนหลัง
SELECT DATE_SUB(’1998-01-01 00:00:00′,INTERVAL ‘1 1:1:1′ DAY_SECOND);
ก็คือการหาวันเวลาย้อนหลัง 1 วัน 1 ชั่วโมง 1 นาที 1 วินาที ก็จะได้ผลคือ 1997-12-30 22:58:59
แนวทางในการใช้ของผมก็คือ ผมเอาไปใช้กับระบบสมาชิก VIP ในเว็บผมโดยผู้ลงโฆษณาสามารถเลือกจำนวนวันลงประกาศได้ ว่าจะลงโฆษณากี่วัน แล้วเมื่อครบวันที่กำหนดระบบก็จะไม่แสดงผลรายการโฆษณานั้นๆ ได้ตรงเวลาเปะๆครับ ลองเล่นดูนะครับ ของแบบนี้มันต้องลองเล่นดูครับ ถึงจะเข้าใจนะครับ ขอให้มีความสุขกับการเขียนโปรแกรมครับ

Posted in PHP, ความรู้ | 1 Comment »
Friday, January 23rd, 2009
เมื่อวานก็เพิ่งโพสไปสำหรับการดึงข้อมูลแบบ JSON มาแสดง โดยอาศัยคำสั่ง curl ซึ่งใช้งานสะดวกและสั้นกว่าการใช้งานพวก fopen มาก มาวันนี้ก็เลยคิดว่าหากดึงเอา XML มาแสดงผลโดยใช้ curl หล่ะ มันก็คงไม่ได้ยากอะไรมากมายแน่นอน
ขออ้างไปยังข้อมูลที่เกี่ยวกับ XML ซะก่อนซึ่งเอามาจาก wikipedia โดยได้พูดถึง XML ไว้ดังนี้
เอกซ์เอ็มแอล (อังกฤษ: XML) ย่อมาจาก Extensible Markup Language ซึ่งเป็นภาษามาร์กอัปสำหรับการใช้งานทั่วไป พัฒนาโดยW3C โดยมีจุดประสงค์เพื่อเป็น สิ่งที่เอาไว้ติดต่อกันในระบบที่มีความแตกต่างกัน (เช่นใช้คอมพิวเตอร์มี่มีระบบปฏิบัติการคนละตัว หรืออาจจะเป็นคนละโปรแกรมประยุกต์ที่มีความต้องการสื่อสารข้อมูลถึงกัน) นอกจากนี้ยังเพื่อเป็นพื้นฐานในการสร้างภาษามาร์กอัปเฉพาะทางอีกขั้นหนึ่ง XML พัฒนามาจาก SGML โดยดัดแปลงให้มีความซับซ้อนลดน้อยลง XML ใช้ในแลกเปลี่ยนข้อมูลระหว่างเครื่องคอมพิวเตอร์ที่แตกต่างกัน และเน้นการแลกเปลี่ยนข้อมูลผ่านอินเทอร์เน็ต
XML ยังเป็นภาษาพื้นฐานให้กับภาษาอื่นๆ อีกด้วย (ยกตัวอย่างเช่น Geography Markup Language (GML) , RDF/XML, RSS, MathML, Physical Markup Language (PML) , XHTML, SVG, MusicXML และ cXML) ซึ่งอนุญาตให้โปรแกรมแก้ไขและทำงานกับเอกสารโดยไม่จำเป็นต้องมีความรู้ในภาษานั้นมาก่อน
ซึ่งผมจะลองดึง XML จาก feed ใน Blog ของผมเองนะครับ ซึ่งลิงก์ของ Feed ผมก็คือ http://www.myblog.in.th/feed/ ลองคลิกดูได้นะครับ
เมื่อผมลองเปิด URL นั้นใน IE ก็จะแสดงผลดังรูปนี้นะครับ

แล้วเมื่อลองดูโค๊ดของ Feed ที่ได้โดยการ view source ก็จะได้โค๊ดแบบนี้
<?xml version=”1.0″ encoding=”UTF-8″?>
<!– generator=”wordpress/2.3.1″ –>
<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/”
>
<channel>
<title>U call me MAX</title>
<link>http://www.myblog.in.th</link>
<description>เขาเรียกผมว่า เว็บมาสเตอร์</description>
<pubDate>Thu, 22 Jan 2009 16:43:24 +0000</pubDate>
<generator>http://wordpress.org/?v=2.3.1</generator>
<language>en</language>
<item>
<title>JSON เคยใช้กันบ้างไหม ?</title>
<link>http://www.myblog.in.th/2009/01/22/json/</link>
<comments>http://www.myblog.in.th/2009/01/22/json/#comments</comments>
<pubDate>Thu, 22 Jan 2009 16:36:05 +0000</pubDate>
<dc:creator>admin</dc:creator>
<category><![CDATA[PHP]]></category>
<category><![CDATA[ความรู้]]></category>
<category><![CDATA[json]]></category>
<category><![CDATA[xml]]></category>
<guid isPermaLink=”false”>http://www.myblog.in.th/2009/01/22/json/</guid>
<description><![CDATA[สำหรับการส่งข้อมูลในการใช้งานไม่ว่าจะเป็นพวก Web Service ต่างๆพวกเราอาจจะคุ้นกับ XML ซะเป็นส่วนมาก แต่ในบางครั้งนักพัฒนาก็ต้องเจอข้อจำกัดของตัว XML เองบางครั้งก็เลยทำให้นักพัฒนาต้องหาการใช้งานดาต้าในรูปแบบอื่นๆเพื่อนำมาใช้งานกัน
ซึ่ง JSON หรือ JavaScript Object Notation เป็นข้อมูลสำหรับแลกเปลี่ยนที่เล็ก ง่ายสำหรับการ อ่าน และ เขียน ซึ่งจะว่าไปแล้ว JSON ก็คล้ายกับ XML ก็คือเป็นข้อมูลแบบเป็นไฟล์ text ธรรมดาๆ ที่มี Format ที่เป็นมาตรฐานและโครงสร้างของไฟล์ที่ตายตัว
JSON มี 2 รูปแบบคือ
1. แบบ Key pair value
2. แบบ list
ในรูปเป็นตัวอย่างโครงสร้างของข้อมูลในแบบ object และในแบบ array
ที่มาพูดถึง JSON ก็เพราะว่าคุยกะ 9AUM แห่ง Scriptdd.com แล้ว ได้ไฟล์ Plugin Wordpress ที่ดึงเอารูปจากเว็บ PG.in.th มาแสดง ไอ้ผมก็เลยไปลองดึงข้อมูลจากทางเว็บ PG […]]]></description>
อะไรประมาณนี้นะครับ ซึ่งเป็นมาตรฐานของ XML เอาล่ะมาเขียนโค๊ดเพื่อดึงเอา XML นี้เพื่อไปแสดงที่อื่น หรือเว็บอื่นๆของผม หรือใครที่อยากจะดึงเอา Feed ของผมไปแปะในเว็บก็ไม่ว่ากัน
เขียนโค๊ดโดยใช้ความสามารถของ curl ครับ ดังนี้
<?php
$ch = curl_init(”http://www.myblog.in.th/feed/“); //URL จาก feed ในเว็บผมครับ
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
$data = curl_exec($ch);
curl_close($ch);
$doc = new SimpleXmlElement($data, LIBXML_NOCDATA);
if(isset($doc->channel))
{
parseRSS($doc);
}
function parseRSS($xml)
{
//echo “<strong>”.$xml->channel->title.”</strong>”; //ไม่อยากให้โชว์ไตเติ้ลครับ
$cnt = count($xml->channel->item);
for($i=0; $i<$cnt; $i++)
{
$url = $xml->channel->item[$i]->link;
$title = $xml->channel->item[$i]->title;
$desc = $xml->channel->item[$i]->description;
echo ‘<a href=”‘.$url.’”>’.$title.’</a>’.$desc.’<br /><br />’; //แสดงผลรายการแต่ละอัน
}
}
?>
จากนั้นลองดูผลที่ได้ในการเขียนโค๊ดนี้ ก็ได้ผลดังนี้

จากนั้นผมลองเปลี่ยนไปดึงเอา RSS ของอีกที่หนึ่งมาจากเว็บ motogp.com โดยมี URL คือ http://www.motogp.com/en/news/rss และเมื่อลอง Refresh ก็แสดงผลดังนี้ครับ

อาจจะเป็นอีกไอเดียในการดึง XML มาแสดงผล โดยไม่ได้ใช้คำสั่ง fopen นะครับ
Posted in PHP, ความรู้ | No Comments »
Saturday, January 10th, 2009
พอดีผมไปเจอในเว็บต่างประเทศมาสำหรับการทำ GIS Mapping เบื้องต้น เจอมานานแล้ว save ไว้ในเครื่อง ลืมไปแล้วว่าเว็บไหน พอดีมีเพื่อนผมถามขึ้นมาเรื่องการมาร์คจุดบนแผนที่ ก็เลยหาๆในคลังความรู้ของผมที่บ้าน ซึ่งคิดว่าน่าจะมีประโยชน์ในการประยุกต์ใช้งานได้ในอนาคตเลยเอามาเขียนให้อ่านกัน โดยเป็นเบื้องต้นที่ทำได้ง่ายๆจริงๆ คำสั่งต่างๆก็ไม่ได้มีอะไรมากมายนะครับ
สิ่งที่ต้องการก็คืออะไรบ้างครับ
- แผนที่โลกซึ่งเป็น base map
- ตำแหน่งละติจูด และ ลองติจูด จำแหน่งที่เราต้องการมาร์คตำแหน่งลงไป
- GD ในเครื่องของเรา หรือ Server ครับ
มาดูที่รูปแผนที่ ผมก็ได้โหลดมาจาก ตัวอย่าง มาให้ดูนะครับ

รูปนี้เลยครับ หากใครจะหารูปใหญ่ก็ไปหากันเอาเองนะครับ
ตำแหน่งละติจูด(lat) กับ ลองติจูด(lng) ก็สามารถหาได้จากพวก Google map ต่างๆได้นะครับ แต่สำหรับผมเองนั้น มีดาต้าเบสส่วนตัวที่เก็บไว้ทุกจังหวัดอยู่แล้วในดาต้าเบส เลยดึงมาใช้ได้ง่ายหน่อย

จากนั้นก็เขียนโค๊ดครับโดยผมจะให้มาร์คจุดลงไปที่ กรุงเทพมหานคร โดยมีค่า lat และ lng คือ 13.75 กับ 100.5166667 ก็เขียนได้ดังนี้
<?php
if(empty($lat)) $lat = 13.75;
if(empty($long))$long = 100.5166667;
$im = imagecreatefromjpeg(”earth_310.jpg“); //รูปแผนที่ที่จะนำมาสร้าง
$red = imagecolorallocate ($im, 255,0,0);
$scale_x = imagesx($im);
$scale_y = imagesy($im);
$pt = getlocationcoords($lat, $long, $scale_x, $scale_y);
// สร้างมาร์คสี่เหลี่ยมสีแดงขนาด 4 pixel
imagefilledrectangle($im,$pt[”x”]-2,$pt[”y”]-2,$pt[”x”]+2,$pt[”y”]+2,$red);
imagestring($im,2,1,$scale_y-20,”Country of Bangkok Thailand“,$red); //ตัวอักษรที่จะแสดงด้านล่างรูป
header(”Content-Type: image/png”);
imagepng($im);
imagedestroy($im);
function getlocationcoords($lat, $lon, $width, $height)
{
$x = (($lon + 180) * ($width / 360));
$y = ((($lat * -1) + 90) * ($height / 180));
return array(”x”=>round($x),”y”=>round($y));
}
?>
โดยแก้ไขค่าต่างๆแล้วลองรันดูนะครับ ก็จะได้ผลดังนี้

ผมก็เลยลองหา map ใหม่จากใน Google แล้วก็นำมาย่อขยายให้ได้สัดส่วน แล้วลองทดสอบอีกครั้งก็ได้ผลดังนี้

แสดงผลได้ถูกต้อง หรือ ไม่ก็เกือบใกล้เคียงความจริงมากๆ
คำสั่งของการใช้งานก็ไม่ยากอะไร หวังว่าคงพอเอาไปใช้ประโยชน์กันได้ไม่มากก็น้อยนะครับ
Posted in PHP, ความรู้ | No Comments »
Tuesday, December 23rd, 2008
ช่วงนี้ก็ได้ออกไปปฏิบัติงาน ตามมหาวิทยาลัยต่างๆ ในเขตเชียงใหม่ ก็ได้ไปแนะนำ ชักชวน นศ. ให้มาแข่งขันเขียนโปรแกรมในภาษา PHP และ C กัน อยากให้ นศ. มาแข่งขันเยอะๆ เข้าดูรายละเอียดเพิ่มเติมได้ที่ http://competition.thai-it.net






ความผิดพลาดของรายการทีวีที่ใส่ URL ผิด ซะงั้น
Posted in ส่วนตั๊ว ส่วนตัว, ไร้สาระ | No Comments »