Archive for ‘ PHP

วิธีแก้ The terminal server has exceeded the maximum number of allowed connections 02 December 2011 at 12:17 am by tumaji

terminal-server-error-message

สำหรับใครที่เจอปัญหา  The terminal server has exceeded the maximum number of allowed connections ซึ่งเกิดจากการที่เรา login ค้างไว้ที่เครื่อง server และไม่ได้ log off ออกทำให้ connect เต็ม วิธีการที่เราจะรีโมทเข้าไปที่ server อีกครั้งให้ลองใช้คำสั่ง

mstsc /v:00.00.00.00 /admin

ปล 00.00.00.00 คือ ip ของเครื่อง server ที่เราต้องการจะเข้าใช้งาน

+ ดูดวงจากเบอร์มือถือ ทะเบียนรถ By tumaji 19 June 2011 at 9:11 am and have No Comments

ไม่ได้ update นานวันนี้เลยเอา script เก่าที่ใช้ xajax เปลี่ยนมาเป็น jquery

สำหรับใครที่กำลังจะซื้อเบอร์มือถือใหม้หรืออยากดูดวงเบอร์มือถือ ดูดวงทะเบียนรถ ก็ไปดูที่

http://www.dinso.net/berdee/index.php

+ ทำยังไงให้ php ยังทำงานต่อหลังจากปิด browser แล้ว By tumaji 18 June 2011 at 8:44 pm and have No Comments

คำตอบของคำถามอยู่ที่ function ignore_user_abort();

วิธีการใช้งานส่วนใหญ่จะใช้ร่วมกับ set_time_limit(0);  คือให้ script ทำงานโดยไม่มี time out จะหยุดการทำงานเมื่อสั่งหยุด หรือ สิ้นสุดการทำงานนั้นๆ (หากมีการทำงานแบบ loop  ที่ไม่มีทางออกก็จะทำงานไปเรื่อยๆ)

ตัวอย่างการเรียกใช้งาน

<?php

ignore_user_abort(1); // run script in background
set_time_limit(0);

// do something

?>

+ top 100 keywords from shopping au,us,uk,de By tumaji 20 January 2010 at 1:13 pm and have No Comments

วันนี้แจก top 100 keywords จาก shopping au,us,uk,de ครับ สำหรับเอาไปใช้หาช่องทางทำงาน

สำหรับใครที่เอาไปแล้วเกิดรายได้อย่าลืมทำบุญน่ะครับ ^-^

http://hotfile.com/dl/24973635/7cbc30e/keyword.rar.html

+ Epson Photo R230 By tumaji 27 May 2009 at 11:33 pm and have No Comments

หลังจาก canon IP3000 สิ้นชีพไปอย่างไม่สามารถกลับมาดีดังเดิมได้ (กดปุ่ม Resume ค้างไว้ดันพังได้) เลยลงทุนซื้อ printer ใหม่ที่สามารถ print CD ได้อยากได้ที่มันถูกๆแต่ที่สารคามไม่มีเลยจำเป็นต้องซื้อ Epson R230 เพราะรุ่นอื่นยี่ห้ออื่นไม่มีขาย หลังจากได้มาแล้วก็ทำการแกะกล่อง อ้าวไม่มีของแถมเลยกระดาษ photo สักแผ่นก็ไม่มี (ตอนซื้อ Conon IP3000) แถมเยอะมาก เอ้าว่ะไหนๆก็ซื้อมาแล้วเห็นเค้าบอกว่าสุดยอดลองดูหน่อยแล้วกัน27052009(004)

อันดับแรกเลยต้องลอง Print CD เนื่องจากเป็นวัตถุประสงค์หลักของการซื้อรุ่นนี้ โปรแกรมที่ใช้ก็เป็น Epson Print CD� ที่อยู่ในแผ่น driver ที่มากับเครื่อง หลังจากออกแบบเสร็จก็ทำการสั่ง Print� ปรากฏว่า Print CD ไม่ได้ เอาหล่ะสิ ทดสอบอยู่หลายรอบยัง Print ไม่ได้มีอะไรผิดพลาดแน่ๆก็เลยลอง ถามเฮีย goo ดู แกก็ให้คำตอบมาเยอะสุดท้ายไปเจอคำตอบที่ให้ข้อสอบสรุปว่ามันเป็นปัญหาทางเทคนิค นั้นคือ Printer ตั้งชิดผนังเกินไปเลย Print CD ไม่ได้ ?????? งงหล่ะสิทำไมมันเป็นอย่างนั้นก็เพราะว่าถาดที่ใส่ CD มันจะยื่นออกไปด้านหลังนั้นเอง โอ้แม่เจ้าใครจะไปรู้ว่ามันจะทะลึ่งยื่นถาดออกไป ก็ IP3000 มันไม่เห็นยื่นอะไรออกไปเลย

ถาดยื่นไปข้างหลังเกือบ 20 cm.

ถาดยื่นไปข้างหลังเกือบ 20 cm.

นี่ถ้าไม่รู้ว่ามันต้องยื่นไปข้างหลังมีหวังได้ส่งเคลมแน่ๆนึกว่าเสีย� หลังจากสั่ง Print ได้ก็ลองไป 3 แผ่นเป็น CD รายงานวิจัยของ ม สังเกตุว่าของ Epson จะไม่สามารถปรับความละเอียดในการ Print CD ได้เลยไม่เหมือนกับ Canon สามารถปรับความละเอียดได้ นี้ถ้า IP 3000 ไม่พังก็คงได้ลองเอาผลงานมาเทียบกันเป็นแน่ สำหรับผลงานอง R230 แบบเต็มวงก็นับว่าดีเสียแต่ใช้เวลานานไปหน่อย

27052009(012)

�อีกอย่างของ Epson จะมีช่องใส่กระดาษเพียงด้านเดียวแต่ของ Canon จะมีด้านบนกับถาดใส่กระดาษด้านล่างสามารถใส่กระดาษได้เยอะกว่าและสะดวกกว่า จริงๆแล้วของ Epson ก็มีดีหลายอย่างลองค้นๆหาข้อมูลดูแล้วกันครับมีคนชมเยอะเหมือนกัน

สรุปแล้วก็สามารถใช้งานได้ดีเสียแต่ราคาแพงกว่า Canon�เยอะไปหน่อย แต่รุ่นนี้ถ้าติด tank จะใช้งานได้ดีกว่าของ Canon ที่ติด�tank ครับสำหรับใครที่ชอบใช้หมึกราคาประหยัดน่าเล่น R230 มากกว่าจะไปเล่น Canon

+ หมดกันสร้างมากับมือ ! By tumaji 04 January 2009 at 1:32 am and have No Comments

โฆษณาไทยดีๆอีกเรื่องที่เข้ากับยุคสมัย ดูแล้วหยุดคิดสักนิด ล้มแล้วจงรู้จักลุก

Music Video Code by 3gp Music and Video Site

+ แก้ปัญหาการย้ายสิ่งของ ด้วย PHP By tumaji 23 November 2008 at 2:35 am and have No Comments

พอดีว่าผมไปเจอโจทย์ในการแก้ปัญหาด้วย PHP & MySQL โดยโจทย์มีดังนี้


เกี่ยวกับเรื่อง ฐานข้อมูล กับ ตาราง
ตอนนี้มีตารางข้อมูล ที่ได้มาโดยการ select

itemlist_id item name quantity capacity user_id slot use
5 ข้าวโพด 2 15 1 1
32 ขี้ไก่ 9 50 1 1
76 ปลากระโทงแทง 6 5 1 2
79 ปลาฉลาม 2 1 1 2
168 เกลือ 1 50 1 1
*quantity คือ จำนวนของฐานของมูลขอลแต่ละ item name ได้มาจากการ count
capacity คือ จำนวนความจุ ที่ตั้งใจจะนำไปแบ่งแต่ละcell
slot use = ceil(capacity/quantity)

โดยจะนำข้อมูลทั้งหมดไปใส่ในตารางที่ผ่านการ loop
สิ่งที่ตั้งใจทำก็คือ จะแบ่งช่องของสิ่งของเหล่านี้ โดยให้ค่า quantity ไม่เกิน capacity ในแต่ละช่อง
ถ้าสำเร็จผลที่ได้รับคือ

ข้าวโพด2 ขี้ไก่9 ปลาฯ5 ปลาฯ1 ปลาฉลาม1 ปลาฉลาม1 เกลือ1

พอดีว่าผมขี้เกียจสร้าง database เพื่อแก้ปัญหาเลยขอประยุกต์ด้วย Array สำหรับใครที่ต้องการจะเอาไปใช้กับ database อื่นๆก็ดัดแปลงดูแล้วกันครับ

< ?
$data[0] = array('itemlist_id'=>5,'item_name'=>'ข้าวโพด','quantity'=>2,'capacity'=>15,'user_id'=>1,'slot_use'=>1) ;
$data[1] = array('itemlist_id'=>32,'item_name'=>'ขี้ไก่','quantity'=>9,'capacity'=>50,'user_id'=>1,'slot_use'=>1) ;
$data[2] = array('itemlist_id'=>76,'item_name'=>'ปลากระโทงแทง','quantity'=>6,'capacity'=>5,'user_id'=>1,'slot_use'=>2) ;
$data[3] = array('itemlist_id'=>79,'item_name'=>'ปลาฉลาม','quantity'=>2,'capacity'=>1,'user_id'=>1,'slot_use'=>2) ;
$data[4] = array('itemlist_id'=>168,'item_name'=>'เกลือ','quantity'=>1,'capacity'=>50,'user_id'=>1,'slot_use'=>1) ;

if(is_array($data))
{
	// read from data I
    foreach($data as $row)
    {
		while($row['quantity'] > 0)
		{
			$quantity = ($row['quantity'] > $row['capacity'] ? $row['capacity'] : $row['quantity']  )  ;
			$row['quantity'] -=  $quantity ;
			// insert to data II
			$data2[] = array('itemlist_id'=>$row['itemlist_id'],'item_name'=>$row['item_name'],'quantity'=>$quantity,'capacity'=>$row['capacity'],'user_id'=>$row['user_id'],'slot_use'=>1) ;
			echo  'itemlist_id=>',$row['itemlist_id'],', item_name=>',$row['item_name'],', quantity=>',$quantity,', capacity=>',$row['capacity'],', user_id=>',$row['user_id'],', slot_use=>',1 , "";
		}
    }
}

?>

+ ต่างเส้นทางปลายทางเดียวกัน By tumaji 10 November 2008 at 12:11 am and have No Comments

ขึ้นชื่อเรื่องยังกับละครหลังข่าวอ่านจะทำให้หลายคนเข้าใจไปว่าเข้าเว็บผิด ช้าก่อนยังไม่ผิดที่ตังชื่อแบบนี้เพราะมันมีที่มาและก็เกี่ยวกับ PHP ด้วย
จากเมื่อวันที่ 29-31 ต.ค. 2551 ผมได้ไปเป็นวิทยากรอบรม Basic PHP ให้กับหน่วยงานแห่งหนึ่งและในวันแรกของการอบรมได้ตังโจทย์ให้ผู้อบรมได้ลองเขียนโปรแกรมง่ายๆโดยมีคำสั่งดังนี้

1. ให้สร้าง Array เก็บชื่อเดือน แล้วทำการแสดงผลด้วย Loop for โดยกำหนดเงื่อนไขให้ เดือนที่ 7 แสดงอักษรสีน้ำเงิน
2. ให้สร้าง Array เก็บชื่อวัน แล้วทำการแสดงผลด้วย Loop foreach โดยกำหนดเงื่อนให้แสดงสีตัวอักษรตามวัน เช่น วันจันทร์แสดงตัวอักษรสีเหลือง

ซึ่งจริงๆแล้วมันก็ไม่น่าจะมีปัญหาอะไรข้อแรกก็จะเขียนออกมาได้ประมาณนี้

< ?
$month =array('มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน','กรกฎาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม') ;

for($i=0,$max=count($month);$i<$max ;$i++)
{
     if($i == 6)
    {
        echo '<font color=blue>',$month[$i] , '<br />' ;
    }
    else
    {
        echo $month[$i] , "<br>" ;
    }
}
?>

และข้อ 2 ก็จะได้แบบนี้

< ?
$day = array('วันอาทิตย์','วันจันทร์','วันอังคาร','วันพุธ','วันพฤหัสบดี','วันศุกร์','วันเสาร์') ;
foreach($day as $index => $value)
{
	switch($index)
	{
		case 0 :
			$color = 'red' ;
		break ;
		case 1 :
			$color = 'yellow' ;
		break ;
		case 2 :
			$color = '#FFCCFF' ;
		break ;
		case 3 :
			$color = '#7FFF7F' ;
		break ;
		case 4 :
			$color = '#FF9900' ;
		break ;
		case 5 :
			$color = '#3333FF' ;
		break ;
		default :
			$color = '#993399' ;
		break ;
	}
	echo '<font color=',$color,'>',$value,'</font><br>' ;
}

แต่ปัญหามันเกิดเพราะผมดันลืมสอนเรื่อง if และ switch เอาหล่ะสิแบบนี้จะทำยังไงถ้าเราไม่มี if กับ switch ใช้
แนวทางการแก้ปัญหาในข้อแรกง่ายๆก็ใส่สีใน Array เลยก็สิ้นเรื่อง แบบนี้ง่ายและทำงานได้เร็วกว่าเพราะไม่ต้องมาเช็คเงื่อนไข โดยจะสามารถเขียน code ได้แบบนี้

< ?
$month =array('มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน','<font color=blue>กรกฎาคม</font>','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม') ;

for($i=0,$max=count($month);$i< $max ;$i++)
{
      echo $month[$i]  ;
}
?>

เป็นไงหล่ะทำงานได้เหมือนกันตรงตามคำสั่งด้วย แล้วถ้าเป็นข้อ 2 หล่ะจะทำเหมือนกันมั้ย! ไม่แน่นอนเพราะมันจะดูขี้เหล่ไปผมใช้วิธีสร้าง Array อีกตัวในการเก็บสีของวันและจัดให้มันมี Index ตรงกับ Index ของวันเท่านี้เราก็สามารถแสดงสีตามวันได้โดยไม่ต้องใช้ switch และสิ่งที่ตามมาโปรแกรมจะทำงานได้เร็วกว่าการใช้ switch อีกด้วยและยังเขียนสั้นกว่าเยอะ

< ?
$day = array('วันอาทิตย์','วันจันทร์','วันอังคาร','วันพุธ','วันพฤหัสบดี','วันศุกร์','วันเสาร์') ;
$daycolor = array('red','yellow','#FFCCFF','#7FFF7F','#FF9900','#3333FF','#993399') ;
foreach($day as $index => $value)
{
 echo '<font color=',$daycolor[$index],'>',$value,'</font><br>' ;
}
?>

สิ่งที่จะสื่อให้เห็นในบทความนี้คือ ในการเขียนโปรแกรมเราสามารถเขียนได้หลายวิธีเพื่อให้ได้สิ่งที่ต้องการทำงาน และก็จะขึ้นอยู่กับพื้นฐานของแต่ละคนว่าจะเลือกวิธีการไหน ถ้าคนที่มีประสบการณ์และมีพื้นฐานที่ดีจะเลือกเขียนแบบกระชับดูง่ายและที่สำคัญทำงานได้เร็วแล้วกินทรัพยากรน้อยโดยเฉพาะการเขียน Web Application ดังนั้นไม่ต้องแปลกใจเลยว่าทำไมสมัยเรียนเวลาส่งงานอาจารย์ถึงโดนจับได้ว่า copy code มาส่ง

+ ตัวแปรแบบ dynamic (Dynamic Variables) By tumaji 17 October 2008 at 2:13 am and have No Comments

����������� เนื่องจากผมได้เจอคำถามจากเพื่อนสมาชิกใน board thaiseoboard.com ตั้งคำถามว่า

// read POST variables if present
foreach ($_POST as $name => $value) {�
������ $$name = $value;
}

Script บรรทัดนี้หมายความว่ายังไง ก็เลยเป็นเหตุได้เขียนบทความนี้

������������ ที่เป็นคำถามเพราะว่าเจอตัวแปรที่มี $$ นำหน้า ซึ่งปกติทั่วไปจะเป็น $ อันเดียว ลักษณะที่เป็น $$ �เป็นการสร้างตัวแปรแบบ dynamic �เช่น

$name = 'test' ;
$$name จะหมายถึง $test
การรับค่า $$name = 1 ;
ก็แสดงว่า $test มีค่าเท่ากับ 1

อันนี้น่าจะพอเข้าใจกันแล้ว ทีนี้มาดูจุดมุ่งหมายของ Script นี้

// read POST variables if present
foreach ($_POST as $name => $value) {� // name เป็น index ของ array
������ $$name = $value; // ส่งค่าให้กับตัวแปร
}


จาก script เป็นการแก้ปัญหาการ config register_globals = Off ใน php.ini �ซึ่งค่าจาก form จะอยู่ในรูป $_POST['test'] ,$_GET['test'] ไม่สามารถ เอา $test มาใช้ได้เลยทันที แต่ถ้า register_globals = On จะสามารถใช้ $test ได้เลย
ด้วยเหตุนี้ถ้าไม่สามารถแก้ php.ini ได้(กรณีเช่าโฮสอยู่) ก็มาแก้ที่โปรแกรมโดยการวนลูป� $_POST ซึ่งเป็น array แล้วส่งค่าให้กับตัวแปรตามค่า index ของมันซึ่งค่า index ของมันก็คือชื่อตัวแปรนั้นเอง

ตัวอย่างเช่นใน form มีการส่งค่า username=var1 และ password=var2 มา� ในการรับค่าจาก form จะได้เป็น $_POST[‘username'] และ $_POST[‘password'] �โดยในรูปแบบ array จะเป็น (‘username’=>var1 ,’password’=>var2)

ปล. register_globals = Off� แนะนำให้ใช้เพราะเหตุผลทางด้าน security ครับ อีกตัว magic_quotes_gpc = On ป้องกัน Sql injection ครับ

+ PHP 5 กับปัญหาการแสดงเวลา By tumaji 26 September 2008 at 12:46 am and have No Comments

����������� ผมเขียน PHP มาหลายปีพึ่งมามีปัญหากับ function date ที่แสดงเวลาไม่ตรงเพราะพึ่งจะหันมาเขียนบน PHP5 (ลง Appserv ตัวใหม่ ) หลังจากที่กำลังเขียนโปรแกรมเกี่ยวกับเวลาสังเกตว่าเวลามันเร็วไป 1 ชม.

����������� เอาหล่ะสิเขียน PHP มาตั้งนานพึ่งจะเจอปัญหาก็เพราะว่าใน PHP 5 มีการ config เกี่ยวกับ timezone เอาไว้ ลองดูที่ php.ini จะพบ


[Date]; Defines the default timezone used by the date functions
;date.timezone =

�ตามตัวอย่างถ้าไม่ได้แก้อะไรเวลาจะบวกไปอีก 1 ชม. แล้วถ้าต้องการแก้ให้ถูกต้องหล่ะไม่ยากครับ


[Date]; Defines the default timezone used by the date functions
date.timezone = "Asia/Bangkok"

�แก้ตามนี้แล้ว restart webserver ใหม่ก็ใช้งานได้แล้ว ทดสอบตาม code นี้

< ?
echo date('l jS \of F Y h:i:s A');
?>

�ผลที่ได้ประมาณนี้
Friday 26th of September 2008 12:32:25 AM

�ส่วนสำหรับใครที่ไม่สามารถแก้ php.ini โดยเฉพาะที่เช่า host เค้าอยู่ก็ลองใช้�


< ?
//�set�the�default�timezone�to�use.�Available�since�PHP�5.1

date_default_timezone_set('Asia/Bangkok');

echo date('l jS \of F Y h:i:s A');
?>

เท่านี้ก็จะสามารถใช้ Function ที่เกี่ยวกับเวลาได้อย่างไม่มีปัญหาแล้วครับ

ปล. date_default_timezone_set มีใน PHP 5.1 [1] ขึ้นไปครับ

�อ้างอิง

[1] http://th2.php.net/manual/en/function.date-default-timezone-set.php