Monthly Archives: กันยายน 2011

การใช้ Google image proxy แก้ดูรูปจากเว็บนอกช้า

คราวนี้ผมมีทิปการใช้ image proxy มาให้อ่านนะครับ
ถามว่ามันมีประโยชน์อะไร สามารถใช้ประโยชน์ได้กรณีเวลาเข้าดูรูปจากเว็บนอกแล้วภาพโหลดไม่ขึ้นหรือโหลดช้า (หรือแม้แต้ hotlink จากเว็บที่เค้า block referrer!!)
เราสามารถใช้ proxy free จาก Google มาช่วยได้ เพราะ Google เค้ามีเชิพเวอร์วางไว้อยู่ทั่วโลก ทำให้สามารถเรียกเว็บได้เร็วขึ้นครับ
โดยเราสามารถใช้ proxy ได้ในรูปแบบนี้

 

 

 

https://images2-focus-opensocial.googleusercontent.com/gadgets/proxy?url=ใส่ url รูปตรงนี้&container=focus&gadget=a&no_expand=1&resize_h=0

ตย.
https://images2-focus-opensocial.googleusercontent.com/gadgets/proxy?url=http://necz.net/wp-content/themes/inove/img/feeds.gif&container=focus&gadget=a&no_expand=1&resize_h=0
การแสดงผล

หรือถ้าจะเปลี่ยนรูปทั้งหน้าให้กลายเป็น Google proxy ก็สามารถทำได้โดยใช้ javascript นี้เอาไปวางบน addressbar ได้เลยครับ

javascript:(function(){prefix = "https://images2-focus-opensocial.googleusercontent.com/gadgets/proxy?url="; suffix = "&container=focus&gadget=a&no_expand=1&resize_h=0&rewriteMime=image%2F*"; images = document.getElementsByTagName("img"); for (var i = 0; i < images.length; i++) { if (images[i].src.indexOf(prefix) == -1) { images[i].src = prefix + images[i].src + suffix; } }})();

หรือจะบุ๊คมาร์คสคริปต์ไว้เลยก็ได้ เราจะได้ใช้ได้ทันทีไม่ต้องมาก็อบอยู่ :)

ref. http://userscripts.org/scripts/show/68761

2th Chat 1.9999!! plugin แชทสำหรับ Discuz X2!! [Opensource]

วิธีติดตั้ง อัพขึ้น source/plugin แล้วติดตั้งใน admincp ตามปกติ

ย้ายไปที่ discuzthai ครับ
http://forum.discuzthai.com/forum.php?mod=viewthread&tid=31318&page=1

สคริปต์มาใส่ Visual keyboard ในเว็บกันเถอะ มีทุกภาษา ภาษาไทยก็มี

เมื่อไม่นานมานี้ผมกำลังหาสคริปต์อะไรซักอย่างอยู่แล้วไปเจอเลยเก็บกันมาฝากนะครับ :lol:

ตัวอย่าง Screenshot

Live demo
http://necz.net/html-lab/?1&20110805659780bc279d7d936663cb05c4a4a968

นี่ตัวสคริปต์ครับ สามารถคลิกขวาแล้วเชพไปได้เลย
keyboard.js
และไฟล์ Stylesheet
keyboard.css

ส่วนวิธีใช้ก็ง่ายนิดเดียวแค่เพิ่ม class=”keyboardInput” ลงใน textbox หรือว่าง่ายๆคือตั้ง class ของ textbox เป็น keyboardInput ก็ได้แล้วครับ

Source: greywyvern

การทำ Linkout ใน SMF 1.1.x + เข้ารหัสลิ้งก์

สวัสดีครับ :) ครั้งนี้ผมมี Mod linkout เขียนเอง มาฝากผู้ใช้ SMF กันนะครับ โดยระบบ Linkout ก็เพื่อป้องกันลิ้งก์ไม่ให้ออกจากเว็บไซต์มากเกินไป

ตัวอย่างลิ้งจะเป็นแบบนี้นะครับ

http://www.yoursmf.com/link.php?ref=aHR0cDovL3d3dy50aGFpc2VvYm9hcmQuY29t

ส่วนวิธีทำนั้นไม่ยากครับ ก่อนอื่นเราต้องลบระบบลิ้งก์เก่าของ smf ออกก่อน โดยไปที่ Sources/Subs.php

หา

			array(
				'tag' => 'url',
				'type' => 'unparsed_content',
				'content' => '<a href="$1" target="_blank">$1</a>',
				'validate' => create_function('&$tag, &$data, $disabled', '
					$data = strtr($data, array(\'<br />\' => \'\'));
					if (strpos($data, \'http://\') !== 0 && strpos($data, \'https://\') !== 0)
						$data = \'http://\' . $data;
				'),
			),
			array(
				'tag' => 'url',
				'type' => 'unparsed_equals',
				'before' => '<a href="$1" target="_blank">',
				'after' => '</a>',
				'validate' => create_function('&$tag, &$data, $disabled', '
					if (strpos($data, \'http://\') !== 0 && strpos($data, \'https://\') !== 0)
						$data = \'http://\' . $data;
				'),
				'disallow_children' => array('email', 'ftp', 'url', 'iurl'),
				'disabled_after' => ' ($1)',
			),

และ

			array(
				'tag' => 'iurl',
				'type' => 'unparsed_content',
				'content' => '<a href="$1">$1</a>',
				'validate' => create_function('&$tag, &$data, $disabled', '
					$data = strtr($data, array(\'<br />\' => \'\'));
					if (strpos($data, \'http://\') !== 0 && strpos($data, \'https://\') !== 0)
						$data = \'http://\' . $data;
				'),
			),
			array(
				'tag' => 'iurl',
				'type' => 'unparsed_equals',
				'before' => '<a href="$1">',
				'after' => '</a>',
				'validate' => create_function('&$tag, &$data, $disabled', '
					if (substr($data, 0, 1) == \'#\')
						$data = \'#post_\' . substr($data, 1);
					elseif (strpos($data, \'http://\') !== 0 && strpos($data, \'https://\') !== 0)
						$data = \'http://\' . $data;
				'),
				'disallow_children' => array('email', 'ftp', 'url', 'iurl'),
				'disabled_after' => ' ($1)',
			),

ลบออกไปครับ

แล้วทีนี้ให้เราเพิ่ม function สำหรับทำ Linkout ไว้ที่ส่วนล่างสุดของไฟล์ (บน ?>)

function parseurl($url, $text) {

	if(!$url && preg_match("/((https?|ftp|gopher|news|telnet|rtsp|mms|callto|bctp|thunder|synacast){1}:\/\/|www\.)[^\[\"']+/i", trim($text), $matches)) {
		$url = $matches[0];
		$length = 65;
		if(strlen($url) > $length) {
			$text = substr($url, 0, intval($length * 0.5)).' ... '.substr($url, - intval($length * 0.3));
		}
		if(!eregi("^https?://([a-z0-9]+\.)?{$_SERVER['HTTP_HOST']}(.*)",$url)){
			$oldurl = $url;
			$url = '/link.php?ref='.base64_encode($url);
			$lout = 1;
		}
		return '<a href="'.$url.'"'.($lout ? ' class="linkout" rel="nofollow"' : '' ).' title="'.$oldurl.'" target="_blank">'.$text.'</a>';
	} else {
		$text = stripslashes($text);
		$url = substr($url, 1);
		if(substr(strtolower($url), 0, 4) == 'www.') {
			$url = 'http://'.$url;
		}
		if(!eregi("^https?://([a-z0-9]+\.)?{$_SERVER['HTTP_HOST']}(.*)",$url)){
			$oldurl = $url;
			$url = '/link.php?ref='.base64_encode($url);
			$lout = 1;
		}

		return '<a href="'.$url.'"'.($lout ? ' class="linkout" rel="nofollow"' : '' ).' title="'.$oldurl.'" target="_blank">'.$text.'</a>';
	}
}

อ๋อ อันนี้ผมดัดแปลงมาจาก Discuz นะครับ :P

แล้วให้หา

if (isset($cache_key, $cache_t) && array_sum(explode(' ', microtime())) - array_sum(explode(' ', $cache_t)) > 0.05)

แล้วเพิ่ม

$message = preg_replace("/\[url(=((https?|ftp|gopher|news|telnet|rtsp|mms|callto|bctp|ed2k|thunder|synacast){1}:\/\/|www\.|mailto:)([^\s\[\"']+?))?\](.+?)\[\/url\]/ies", "parseurl('\\1', '\\5')", $message);

ไว้ด้านบนเป็นอันจบส่วนการแก้ไขไฟล์ครับ

ทีนี้ ก็ถึงส่วนของ link.php ให้ก็อบโค้ดส่วนนี้ไปใส่แล้วนำไปวางในส่วน public_html ได้เลยครับ

<?
if(!isset($_GET['ref'])){
die();
}
$url = htmlspecialchars(base64_decode($_GET['ref']));
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="Content-Language" content="th">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="robots" content="noindex, nofollow" />
<title>Linkout</title>
<style type="text/css">
body{
	font-family:Tahoma, Geneva, sans-serif;
}
a{
	color:#00F;
}
.center{
	text-align:center;
}
.text-go{
	color:#008000;
}
.text-top{
	font-size:12px;
}
</style>
<script language="javascript">
setTimeout('top.location.href="<?=$url?>"', 2500);
</script>
</head>
<body>
<div class="center">
<br />
<br />
<br />
<br />
<br />
<br />
<p><span class="text-top">ขณะนี้คุณกำลังที่จะเชื่อมต่อไปยังเว็บไซต์ภายนอก</span><br /><a href='<?=$url?>' rel="nofollow"><?=$url?></a></p>
<br />
<span class="text-go">เรากำลังพาท่านไปยังหน้าที่ต้องการ.. กรุณารอ! </span>
<br />
<br />
<br />
<span class="right">Copyright (c)
</div>
</body>
</html>

หน้านี้แต่ได้ตามสบายเลยครับ

การเขียน php เพื่อการตัดอักขระพิเศษออกจากข้อความทั้งหมด

สวัสดีครับ คราวนี้ผมนำเอาฟั่งชั่นเพื่อตัดตัวอักษรพิเศษต่างๆในข้อความให้ออกได้อย่างหมดจดเกลี้ยงเกลา มาให้นะครับ :) ถ้าถามว่าไอฟั่งชั่นเนี้ย มันมีประโยชน์อะไร ก็คือเราสามารถนำค่าที่ไม่มีอักขระพิเศษไปใช้เพื่อทำ SEO Url ได้ โดยฟั่งชั่นที่ว่าเราจะใช้ Regexe  ผ่านฟั่งชั่น preg_replace ใน php กัน โดยเราต้องเขียน Regexe ดังนี้

#[^a-zA-Z0-9]#u

และนี่เป็นฟั่งชั่นสำเร็จครับ

function removespecialchars($raw){
     return preg_replace('#[^a-zA-Z0-9]#u', '', $raw);
}

เวลาจะเรียกใช้ก็เช่น removespecialchars(‘☼ Thaiseoboard ไทยเสียว ☼’); ก็จะได้ค่ากลับมาเป็น Thaiseoboard :D

แล้วถ้าเราไม่อยากตัดตัวอักษรภาษาไทยละ เราก็เพิ่มเคส ก-๙ ลงไปใน Regexe (สำหรับภาษาไทยจะต้องใช้ ก-๙ นะครับ ไม่ใช่ ก-ฮ)

ก็จะได้เป็น preg_replace(‘#[^ก-๙a-zA-Z0-9]#u’, , $raw); ทีนี้เวลาเรียกใช้ removespecialchars(‘☼ Thaiseoboard ไทยเสียว ☼’); จะทำให้ได้ค่ากลับมาเป็น Thaiseoboardไทยเสียว แล้วครับ

แต่ถ้าเราจะทำ SEO Url เราต้องแก้เพิ่มอีกนิดหน่อย เพราะสังเกตมั้ยว่า SEO Url จะต้องมี – คั่นกลางระหว่างคำ (ซึ่งกูเกิ้ลเค้าก็ระบุอย่างนั้น)

โดยเราจะเปลี่ยนพารามิเตอร์หลังของ preg_replace ให้เป็น – และ เพิ่มเคส – ไว้หน้า ก-๙ จะได้ว่า preg_replace(‘#[^-ก-๙a-zA-Z0-9]#u’, ‘-’, $raw);

ทีนี้เราก็จะสร้าง SEO Url ได้เป็น -Thaiseoboard-ไทยเสียว- แต่ติดอยู่นิดตรงที่ถ้ามีอักษระพิเศษติดกันเกินกว่า 2 ตัว หรือขึ้นต้นลงท้ายด้วยอักษระพิเศษเช่น ☼☼Thaiseoboard☼☼☼ไทยเสียว ค่าที่ได้จะออกมาเป็น –Thaiseoboard—ไทยเสียว ซึ่งมีขีดนำหน้าสองขีดและมีขีดถึงสามขีดติดกัน ยิ่งถ้าในข้อความมีอักษระพิเศษติดกันเยอะๆและหลายชุด จะทำให้  URL ดูไม่สวยงามและไม่เป็นประโยชน์ทาง SEO อีกด้วย

ดังนั้นที่เราจะต้องทำคือ replace – ที่มากกว่า 1 ให้เหลือเพียงอันเดียว โดยเพิ่ม ereg_replace(“-+”,“-”,$raw); เข้าหลังจากทำการตัดอักษระพิเศษออกแล้ว และตรวจสอบว่าค่าที่ได้ขึ้นต้นหรือลงท้ายด้วย – รึเปล่า ถ้าใช่ เราจะตัดออกไป ทีนี้เราก็จะได้ฟังชั่นสำเร็จออกมาเป็น

function seotitle($raw){
     $raw = preg_replace('#[^-ก-๙a-zA-Z0-9]#u', '', $raw);
     $raw =  ereg_replace("-+","-",$raw);
     if(substr($raw,0,1) == '-')
          $raw = substr($raw,1);
     if(substr($game_url,-1) == '-')
          $raw = substr($raw,0,-1);
     return urlencode($raw);
}

จากนั้นพอเราลองใช้ seotitle(‘☼☼Thaiseoboard☼☼☼ไทยเสียว’); จะได้ค่าออกมาเป็น Thaiseoboard-ไทยเสียว ซึ่งเป็นผลที่น่าพอใจทีเดียว :o

แก้ปัญหา Operation timed out ตอนใช้อัพเดตอัตโนมัติของ WordPress

WordPress หลังจากรุ่น 2.7 จะมีฟังชั่นใหม่ตัวนึงครับ ซึ่งผมก็คิดว่าสะดวกอยู่เหมือนกัน คือฟังชั่นสำหรับอัพเดตอัตโนมัติ แต่จะมีปัญหาอยู่ที่ว่า ISP ของไทยเนี่ย จะมีแบนวิธออกนอก น้อยมาก (ไฟล์ตัวอีพเดตของ WordPress อยู่ที่ US) ทำให้ฟังชั่นการอัพเดตอัตโนมัติ ไม่สามารถโหลดไฟล์อัพเดตได้ครบภายในเวลาที่กำหนด จนขึ้น

Download failed: Operation timed out after 30000 milliseconds with ปปปปป bytes received

ตามต่อด้วย Installation Failed อ่าว แล้วจะทำยังไงละ เพิ่มแบนวิธออกนอกให้เยอะๆเหรอ แบบนั้นไม่ดีมั้ง–” งั้นไอที่เราต้องทำคือเพิ่มเวลาที่จะใช้ดาวน์โหลด เพราะค่าดีฟอร์การดาวนโหลดคือ 300 วินาที (สังเกตจาก Operation timed out after 30000 milliseconds) โดยเราต้องไปเพิ่มที่ /wp-admin/includes/file.php กด Ctr+F หาบรรทัดนี้ครับ function download_url( $url, $timeout = 300 ) { แล้วเปลี่ยนจาก 300 เป็นเลขอื่น เช่นเพิ่มเป็น 10 เท่าเป็น 3000 เลยก็ได้ครับ :)

เท่านี้เราก็จะไม่เจอ Operation timed out แล้วละ

วิธีแก้ Your connection has timed out, Consider disabling the Folder Usage Count. ใน Directadmin

เคยมั้ย ที่เปิด file manager ใน directadmin แล้วมันโหลด นานมากๆๆๆ จนสุดท้ายมันจะขึ้น

Your connection has timed out

Details

Consider disabling the Folder Usage Count.

แล้วพอลองกดเอฟ 5 ซักทีสองที มันถึงจะขึ้นหน้า file manager ให้ได้ใช้ปกติ (แต่ครั้งสุดท้ายที่เจอกดเอฟ 5 ไปเกือบ 5 ที –”)

เอาแหละ ที่นี้ ผมก็เจอบ่อยๆ เวลาเข้า folder public_html เนี่ย ตอนแรกๆก็ไม่ได้ใส่ใจอะไรแต่พอหลังๆมันซักรำคาญว่ะ!! ผมเลยลอง Search กูเกิ้ลดูก็พบกระทู้นี้ใน support forum ของ directadmin เค้าละครับ

http://www.directadmin.com/forum/showthread.php?t=36949

อะแล้วก็ได้ความว่า ไอ้ Error อันเนี้ย เกิดขึ้นมาจากฟีเวอร์ที่ใช้สำหรับคำนวณขนาดผลรวมของขนาดไฟล์ทั้งหมดในโฟลเดอร์นั้น และโฟลเดอร์ย่อยลงไป (อะ ผมมีไฟล์เยอะมากมันเลยคำนวนกันนาน) เพราะปกติค่าขนาดของโฟลเดอร์คือ 4.00k

ซึ่งปกติฟีเวอร์นี้เนี้ย จะถูกตั้งเปิดไว้เป็นค่าเริ่มต้น แต่ถ้าเราอยากจะปิดก็ทำได้เหมือนกัน แต่เราจะต้องมีรหัสของ root สำหรับเข้าไปแก้ไขไฟล์ config ของ directadmin ด้วย ส่วนวิธีแก้ค่า config ให้เปิดไฟล์ /usr/local/directadmin/conf/directadmin.conf แล้วเพิ่ม filemanager_du=0 ไว้ที่บรรทัดล่างสุด เสร็จแล้วก็ restart directadmin 1 ทีเพื่อให้มันโหลดค่า config ขึ้นมาใหม่ครับ

เสร็จเท่านี้เราก็ไม่เจอปัญหา Consider disabling the Folder Usage Count. แล้วละครับ