<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>Go3.co.kr MintState BBS &amp;gt; Tech &amp;gt; PHP</title>
<link>https://go3.co.kr/mintbbs/bbs/board.php?bo_table=php</link>
<description>테스트 버전 0.2 (2004-04-26)</description>
<language>ko</language>


<item>
<title>리모트 파일 헤더값가져오기</title>
<link>https://go3.co.kr/mintbbs/bbs/board.php?bo_table=php&amp;amp;wr_id=10159</link>
<description><![CDATA[[U]리모트 파일 헤더값가져오기[/U]<br/><br/>[B]방법 1.[/B]<br/>[CODE php]$headers=get_headers(&#034;<A HREF="http://a0000001122.site/video0/id_231.algwqh&#034;);" TARGET="_blank"  rel="nofollow">http://a0000001122.site/video0/id_231.algwqh&#034;);</A><br/>print_r($headers);[/CODE]<br/><br/>[B]방법 1.[/B]<br/>[CODE php]class URIInfo <br/>{<br/>&nbsp; &nbsp; public $info;<br/>&nbsp; &nbsp; public $header;<br/>&nbsp; &nbsp; private $url;<br/><br/>&nbsp; &nbsp; public function __construct($url)<br/>&nbsp; &nbsp; {<br/>&nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;url = $url;<br/>&nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;setData();<br/>&nbsp; &nbsp; }<br/><br/>&nbsp; &nbsp; public function setData() <br/>&nbsp; &nbsp; {<br/>&nbsp; &nbsp; &nbsp; &nbsp; $curl = curl_init();<br/>&nbsp; &nbsp; &nbsp; &nbsp; curl_setopt($curl, CURLOPT_URL, $this-&gt;url);<br/>&nbsp; &nbsp; &nbsp; &nbsp; curl_setopt($curl, CURLOPT_FILETIME, true);<br/>&nbsp; &nbsp; &nbsp; &nbsp; curl_setopt($curl, CURLOPT_NOBODY, true);<br/>&nbsp; &nbsp; &nbsp; &nbsp; curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);<br/>&nbsp; &nbsp; &nbsp; &nbsp; curl_setopt($curl, CURLOPT_HEADER, true);<br/>&nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;header = curl_exec($curl);<br/>&nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;info = curl_getinfo($curl);<br/>&nbsp; &nbsp; &nbsp; &nbsp; curl_close($curl);<br/>&nbsp; &nbsp; }<br/>}<br/><br/>$uri_info = new URIInfo(&#039;http://a0000001122.site/video0/id_231.algwqh&#039;);<br/>if (preg_match(&#039;/Not Found/i&#039;, $uri_info-&gt;header))<br/>	echo &#034;Not Found!!!&#034;;<br/>else <br/>	print_r($uri_info-&gt;header);[/CODE]]]></description>
<dc:creator>MintState</dc:creator>
<dc:date>Thu, 17 May 2018 14:17:23 +0900</dc:date>
</item>


<item>
<title>PHP 한글 존재 여부 검사하기</title>
<link>https://go3.co.kr/mintbbs/bbs/board.php?bo_table=php&amp;amp;wr_id=10158</link>
<description><![CDATA[[U]PHP 한글 존재 여부 검사하기[/U]<br/><br/>[B]1. EUC-KR인 경우[/B]<br/>[CODE php]if (preg_match(&#034;/[\xA1-\xFE][\xA1-\xFE]/&#034;, $str)) <br/>	echo &#034;한글포함.&#034;;<br/>else<br/>	echo &#034;한글없음&#034;;[/CODE]<br/><br/>[B]2. UTF-8인 경우[/B]<br/>[CODE php]if (preg_match(&#034;/[\xE0-\xFF][\x80-\xFF][\x80-\xFF]/&#034;, $str)) <br/>	echo &#034;한글포함.&#034;;<br/>else<br/>	echo &#034;한글없음&#034;;[/CODE]<br/><br/>[B]euc-kr -&gt; utf-8[/B]<br/>[CODE php]$str = iconv(&#034;euckr&#034;, &#034;utf8&#034;, $str);[/CODE]]]></description>
<dc:creator>MintState</dc:creator>
<dc:date>Fri, 11 May 2018 13:30:49 +0900</dc:date>
</item>


<item>
<title>파일이 GIF애니메이션인지 확인</title>
<link>https://go3.co.kr/mintbbs/bbs/board.php?bo_table=php&amp;amp;wr_id=10157</link>
<description><![CDATA[[U]파일이 GIF애니메이션인지 확인[/U]<br/><br/>출처 :&nbsp; <A HREF="http://php.net/manual/en/function.imagecreatefromgif.php#104473" TARGET="_blank"  rel="nofollow">http://php.net/manual/en/function.imagecreatefromgif.php#104473</A><br/><br/>[CODE php]function is_gif_ani($filename) {<br/>	if(!($fh = @fopen($filename, &#039;rb&#039;)))<br/>		return false;<br/>	$count = 0;<br/>	//an animated gif contains multiple &#034;frames&#034;, with each frame having a<br/>	//header made up of:<br/>	// * a static 4-byte sequence (\x00\x21\xF9\x04)<br/>	// * 4 variable bytes<br/>	// * a static 2-byte sequence (\x00\x2C) (some variants may use \x00\x21 ?)<br/>	<br/>	// We read through the file til we reach the end of the file, or we&#039;ve found<br/>	// at least 2 frame headers<br/>	while(!feof($fh) && $count &lt; 2) {<br/>		$chunk = fread($fh, 1024 * 100); //read 100kb at a time<br/>		$count += preg_match_all(&#039;#\x00\x21\xF9\x04.{4}\x00(\x2C|\x21)#s&#039;, $chunk, $matches);<br/>	}<br/>	<br/>	fclose($fh);<br/>	return $count &gt; 1;<br/>}[/CODE]]]></description>
<dc:creator>MintState</dc:creator>
<dc:date>Thu, 05 Apr 2018 15:03:56 +0900</dc:date>
</item>


<item>
<title>PHP 디렉토리 정보를 출력(디렉토리 깊이, 예외 파일, 디렉토리 설정)</title>
<link>https://go3.co.kr/mintbbs/bbs/board.php?bo_table=php&amp;amp;wr_id=10156</link>
<description><![CDATA[[U]PHP 디렉토리 정보를 출력(디렉토리 깊이, 예외 파일, 디렉토리 설정)[/U]<br/><br/>[CODE php]function read_path($path, $depth = 1, $exclude = &#039;&#039;) {<br/>	if($depth == 0) {<br/>		return;<br/>	}<br/>	if (!$exclude || !is_array($exclude)) $exclude = array();<br/>	$last_letter&nbsp; = $path[strlen($path)-1];<br/>	$path&nbsp; = ($last_letter == &#039;\&#039; || $last_letter == &#039;/&#039;) ? $path : $path.DIRECTORY_SEPARATOR;<br/>	$files&nbsp; = array(&#039;files&#039;=&gt;array(), &#039;dirs&#039;=&gt;array());<br/>	if ($handle = opendir($path)) {<br/>		while (false !== ($file = readdir($handle))) {<br/>			if ($file == &#039;.&#039; || $file == &#039;..&#039;) {<br/>				continue;<br/>			}<br/>			if(is_array($exclude) && !in_array($file, $exclude)){<br/>				$file&nbsp; = $path.$file;<br/>				if (is_dir($file)) {<br/>					$directory_path = $file.DIRECTORY_SEPARATOR;<br/>					$files[&#039;dirs&#039;][$directory_path]&nbsp; = NULL;<br/>				} elseif (is_file($file)) {<br/>					$files[&#039;files&#039;][]&nbsp; = $file;<br/>				}<br/>			}<br/>		}<br/>		closedir($handle);<br/>	}<br/>	$done = [$path=&gt;$files];<br/>	foreach ($done[$path][&#039;dirs&#039;] as $key=&gt;$value) {<br/>		$done[$path][&#039;dirs&#039;][$key] = read_path($key, $depth-1, $exclude);<br/>	}<br/>	return $done[$path];<br/>}<br/><br/>$exclude_file = array(&#034;80c53aa1_19359835.jpg&#034;,&#034;thumb&#034;,&#034;0002&#034;);<br/>$reads = read_path(BASE_DIR.&#039;/data/test&#039;, 2, $exclude_file);[/CODE]]]></description>
<dc:creator>MintState</dc:creator>
<dc:date>Tue, 03 Apr 2018 11:51:08 +0900</dc:date>
</item>


<item>
<title>개행문자 CRLF( \n\r 엔터) 제거</title>
<link>https://go3.co.kr/mintbbs/bbs/board.php?bo_table=php&amp;amp;wr_id=10155</link>
<description><![CDATA[[U]개행문자 CRLF( \n\r 엔터) 제거[/U]<br/><br/>정규식을 이용한 CRLF 제거<br/>[CODE php]$text = preg_replace(&#039;/\r\n|\r|\n/&#039;,&#039;&#039;,$text);[/CODE]<br/><br/>문자열 처리 함수를 이용한 CRLF 제거<br/>[CODE php]$text = str_replace(array(&#034;\r\n&#034;,&#034;\r&#034;,&#034;\n&#034;),&#039;&#039;,$text);[/CODE]<br/>또는<br/>[CODE php]$text = strtr($text,array(&#034;\r\n&#034;=&gt;&#039;&#039;,&#034;\r&#034;=&gt;&#039;&#039;,&#034;\n&#034;=&gt;&#039;&#039;)); [/CODE]]]></description>
<dc:creator>MintState</dc:creator>
<dc:date>Thu, 18 Jan 2018 18:24:40 +0900</dc:date>
</item>


<item>
<title>첫문자를 대문자, 소문자로 변경하는 함수</title>
<link>https://go3.co.kr/mintbbs/bbs/board.php?bo_table=php&amp;amp;wr_id=10154</link>
<description><![CDATA[[U]첫문자를 대문자, 소문자로 변경하는 함수[/U]<br/><br/>[B]ucfirst 첫문자를 대문자로[/B]<br/>[CODE php]&lt;?php<br/>$foo = &#039;hello world!&#039;;<br/>$foo = ucfirst($foo);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  // Hello world!<br/><br/>$bar = &#039;HELLO WORLD!&#039;;<br/>$bar = ucfirst($bar);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  // HELLO WORLD!<br/>$bar = ucfirst(strtolower($bar)); // Hello world!<br/>?&gt;[/CODE]<br/><br/>[B]lcfirst 첫문자를 소문자로[/B]<br/>[CODE php]&lt;?php<br/>$foo = &#039;HelloWorld&#039;;<br/>$foo = lcfirst($foo);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  // helloWorld<br/><br/>$bar = &#039;HELLO WORLD!&#039;;<br/>$bar = lcfirst($bar);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  // hELLO WORLD!<br/>$bar = lcfirst(strtoupper($bar)); // hELLO WORLD!<br/>?&gt;[/CODE]<br/><br/>[B]ucwords 문장 첫문자를 대문자로[/B]<br/>[CODE php]&lt;?php<br/>$foo = &#039;hello world!&#039;;<br/>$foo = ucwords($foo);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  // Hello World!<br/><br/>$bar = &#039;HELLO WORLD!&#039;;<br/>$bar = ucwords($bar);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  // HELLO WORLD!<br/>$bar = ucwords(strtolower($bar)); // Hello World!<br/>?&gt;[/CODE]<br/><br/>[CODE php]&lt;?php<br/>$foo = &#039;hello|world!&#039;;<br/>$bar = ucwords($foo);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  // Hello|world!<br/><br/>$baz = ucwords($foo, &#034;|&#034;);&nbsp; &nbsp; &nbsp; &nbsp; // Hello|World!<br/>?&gt;[/CODE]]]></description>
<dc:creator>MintState</dc:creator>
<dc:date>Tue, 08 Aug 2017 19:35:35 +0900</dc:date>
</item>


<item>
<title>header를 이용한 페이지 이동 함수</title>
<link>https://go3.co.kr/mintbbs/bbs/board.php?bo_table=php&amp;amp;wr_id=10153</link>
<description><![CDATA[[U]header를 이용한 페이지 이동 함수[/U]<br/><br/>[CODE html]function movePage($num,$url){<br/>&nbsp;  static $http = array (<br/>&nbsp; &nbsp; &nbsp;  100 =&gt; &#034;HTTP/1.1 100 Continue&#034;,<br/>&nbsp; &nbsp; &nbsp;  101 =&gt; &#034;HTTP/1.1 101 Switching Protocols&#034;,<br/>&nbsp; &nbsp; &nbsp;  200 =&gt; &#034;HTTP/1.1 200 OK&#034;,<br/>&nbsp; &nbsp; &nbsp;  201 =&gt; &#034;HTTP/1.1 201 Created&#034;,<br/>&nbsp; &nbsp; &nbsp;  202 =&gt; &#034;HTTP/1.1 202 Accepted&#034;,<br/>&nbsp; &nbsp; &nbsp;  203 =&gt; &#034;HTTP/1.1 203 Non-Authoritative Information&#034;,<br/>&nbsp; &nbsp; &nbsp;  204 =&gt; &#034;HTTP/1.1 204 No Content&#034;,<br/>&nbsp; &nbsp; &nbsp;  205 =&gt; &#034;HTTP/1.1 205 Reset Content&#034;,<br/>&nbsp; &nbsp; &nbsp;  206 =&gt; &#034;HTTP/1.1 206 Partial Content&#034;,<br/>&nbsp; &nbsp; &nbsp;  300 =&gt; &#034;HTTP/1.1 300 Multiple Choices&#034;,<br/>&nbsp; &nbsp; &nbsp;  301 =&gt; &#034;HTTP/1.1 301 Moved Permanently&#034;,<br/>&nbsp; &nbsp; &nbsp;  302 =&gt; &#034;HTTP/1.1 302 Found&#034;,<br/>&nbsp; &nbsp; &nbsp;  303 =&gt; &#034;HTTP/1.1 303 See Other&#034;,<br/>&nbsp; &nbsp; &nbsp;  304 =&gt; &#034;HTTP/1.1 304 Not Modified&#034;,<br/>&nbsp; &nbsp; &nbsp;  305 =&gt; &#034;HTTP/1.1 305 Use Proxy&#034;,<br/>&nbsp; &nbsp; &nbsp;  307 =&gt; &#034;HTTP/1.1 307 Temporary Redirect&#034;,<br/>&nbsp; &nbsp; &nbsp;  400 =&gt; &#034;HTTP/1.1 400 Bad Request&#034;,<br/>&nbsp; &nbsp; &nbsp;  401 =&gt; &#034;HTTP/1.1 401 Unauthorized&#034;,<br/>&nbsp; &nbsp; &nbsp;  402 =&gt; &#034;HTTP/1.1 402 Payment Required&#034;,<br/>&nbsp; &nbsp; &nbsp;  403 =&gt; &#034;HTTP/1.1 403 Forbidden&#034;,<br/>&nbsp; &nbsp; &nbsp;  404 =&gt; &#034;HTTP/1.1 404 Not Found&#034;,<br/>&nbsp; &nbsp; &nbsp;  405 =&gt; &#034;HTTP/1.1 405 Method Not Allowed&#034;,<br/>&nbsp; &nbsp; &nbsp;  406 =&gt; &#034;HTTP/1.1 406 Not Acceptable&#034;,<br/>&nbsp; &nbsp; &nbsp;  407 =&gt; &#034;HTTP/1.1 407 Proxy Authentication Required&#034;,<br/>&nbsp; &nbsp; &nbsp;  408 =&gt; &#034;HTTP/1.1 408 Request Time-out&#034;,<br/>&nbsp; &nbsp; &nbsp;  409 =&gt; &#034;HTTP/1.1 409 Conflict&#034;,<br/>&nbsp; &nbsp; &nbsp;  410 =&gt; &#034;HTTP/1.1 410 Gone&#034;,<br/>&nbsp; &nbsp; &nbsp;  411 =&gt; &#034;HTTP/1.1 411 Length Required&#034;,<br/>&nbsp; &nbsp; &nbsp;  412 =&gt; &#034;HTTP/1.1 412 Precondition Failed&#034;,<br/>&nbsp; &nbsp; &nbsp;  413 =&gt; &#034;HTTP/1.1 413 Request Entity Too Large&#034;,<br/>&nbsp; &nbsp; &nbsp;  414 =&gt; &#034;HTTP/1.1 414 Request-URI Too Large&#034;,<br/>&nbsp; &nbsp; &nbsp;  415 =&gt; &#034;HTTP/1.1 415 Unsupported Media Type&#034;,<br/>&nbsp; &nbsp; &nbsp;  416 =&gt; &#034;HTTP/1.1 416 Requested range not satisfiable&#034;,<br/>&nbsp; &nbsp; &nbsp;  417 =&gt; &#034;HTTP/1.1 417 Expectation Failed&#034;,<br/>&nbsp; &nbsp; &nbsp;  500 =&gt; &#034;HTTP/1.1 500 Internal Server Error&#034;,<br/>&nbsp; &nbsp; &nbsp;  501 =&gt; &#034;HTTP/1.1 501 Not Implemented&#034;,<br/>&nbsp; &nbsp; &nbsp;  502 =&gt; &#034;HTTP/1.1 502 Bad Gateway&#034;,<br/>&nbsp; &nbsp; &nbsp;  503 =&gt; &#034;HTTP/1.1 503 Service Unavailable&#034;,<br/>&nbsp; &nbsp; &nbsp;  504 =&gt; &#034;HTTP/1.1 504 Gateway Time-out&#034;<br/>&nbsp;  );<br/>&nbsp;  header($http[$num]);<br/>&nbsp;  header(&#034;Referer: &#034;);<br/>&nbsp;  header(&#034;Location: $url&#034;);<br/>}<br/>[/CODE]]]></description>
<dc:creator>MintState</dc:creator>
<dc:date>Mon, 31 Jul 2017 11:30:21 +0900</dc:date>
</item>


<item>
<title>URL에서 한글만 인코딩</title>
<link>https://go3.co.kr/mintbbs/bbs/board.php?bo_table=php&amp;amp;wr_id=10151</link>
<description><![CDATA[[U]URL에서 한글만 인코딩[/U]<br/><br/>[CODE php]function get_encoded_hurl($str) {<br/>&nbsp; &nbsp;  <br/>&nbsp; &nbsp; preg_match_all(&#039;/[\x{1100}-\x{11ff}\x{3130}-\x{318f}\x{ac00}-\x{d7af}]+/u&#039;, $str, $matches);<br/>&nbsp; &nbsp;  <br/>&nbsp; &nbsp; foreach($matches as $key2 =&gt; $val2) {<br/>&nbsp; &nbsp; &nbsp; &nbsp; $cnt = count($val2);<br/>&nbsp; &nbsp; &nbsp; &nbsp; if($cnt &gt; 0) {<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; foreach($val2 as $key3 =&gt; $val3) {<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $str = str_replace($val3, urlencode($val3), $str);<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br/>&nbsp; &nbsp; &nbsp; &nbsp; }<br/>&nbsp; &nbsp; }<br/>&nbsp; &nbsp; return $str;<br/>}[/CODE]<br/><br/>출처 : <A HREF="http://codeigniter-kr.org/bbs/view/tip?idx=7910" TARGET="_blank"  rel="nofollow">http://codeigniter-kr.org/bbs/view/tip?idx=7910</A>]]></description>
<dc:creator>MintState</dc:creator>
<dc:date>Mon, 29 May 2017 09:15:54 +0900</dc:date>
</item>


<item>
<title>youtube preg_replace pattern</title>
<link>https://go3.co.kr/mintbbs/bbs/board.php?bo_table=php&amp;amp;wr_id=10150</link>
<description><![CDATA[[U]youtube preg_replace pattern[/U]<br/><br/>[CODE html]$youtube_pattern1 = &#034;/\s*[a-zA-Z\/\/:\.]*youtube.com\/watch\?v=([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i&#034;; <br/>$youtube_pattern2 = &#034;/\s*[a-zA-Z\/\/:\.]*youtu.be\/([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i&#034;; <br/>$youtube_pattern3 = &#039;/(?:https?:\/\/)?(?:www\.)?youtu(?:\.be|be\.com)\/(?:watch\?v=)?([\w-]{10,})/m&#039;;<br/>$str = preg_replace($youtube_pattern3, &#039;&lt;div&gt;&lt;iframe style=&#034;width:100%;min-height:190px;&#034; src=&#034;<A HREF="https://www.youtube.com/embed/" TARGET="_blank"  rel="nofollow">https://www.youtube.com/embed/</A>$1&#034; frameborder=&#034;0&#034; allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;a class=&#034;autolink&#034;&#034; href=&#034;<A HREF="https://www.youtube.com/watch?v=" TARGET="_blank"  rel="nofollow">https://www.youtube.com/watch?v=</A>$1\&#034;&gt;<A HREF="https://www.youtube.com/watch?v=" TARGET="_blank"  rel="nofollow">https://www.youtube.com/watch?v=</A>$1&lt;/a&gt;&lt;/div&gt;&#039;, &#034; &#034;.$str);[/CODE]]]></description>
<dc:creator>MintState</dc:creator>
<dc:date>Wed, 22 Feb 2017 16:11:36 +0900</dc:date>
</item>


<item>
<title>특정 디렉토리의 하위파일 목록 가져오기</title>
<link>https://go3.co.kr/mintbbs/bbs/board.php?bo_table=php&amp;amp;wr_id=10149</link>
<description><![CDATA[[U]특정 디렉토리의 하위파일 목록 가져오기[/U]<br/><br/>[CODE php]&lt;?php<br/>// 폴더명 지정<br/>$dir = &#034;/home/www/foo/test_folder_name&#034;;<br/>&nbsp;<br/>// 핸들 획득<br/>$handle&nbsp; = opendir($dir);<br/>&nbsp;<br/>$files = array();<br/>&nbsp;<br/>// 디렉터리에 포함된 파일을 저장한다.<br/>while (false !== ($filename = readdir($handle))) {<br/>&nbsp; &nbsp; if($filename == &#034;.&#034; || $filename == &#034;..&#034;){<br/>&nbsp; &nbsp; &nbsp; &nbsp; continue;<br/>&nbsp; &nbsp; }<br/>&nbsp;<br/>&nbsp; &nbsp; // 파일인 경우만 목록에 추가한다.<br/>&nbsp; &nbsp; if(is_file($dir . &#034;/&#034; . $filename)){<br/>&nbsp; &nbsp; &nbsp; &nbsp; $files[] = $filename;<br/>&nbsp; &nbsp; }<br/>}<br/>&nbsp;<br/>// 핸들 해제 <br/>closedir($handle);<br/>&nbsp;<br/>// 정렬, 역순으로 정렬하려면 rsort 사용<br/>sort($files);<br/>&nbsp;<br/>// 파일명을 출력한다.<br/>foreach ($files as $f) {<br/>&nbsp; &nbsp; echo $f;<br/>&nbsp; &nbsp; echo &#034;&lt;br /&gt;&#034;;<br/>} <br/>?&gt;[/CODE]]]></description>
<dc:creator>MintState</dc:creator>
<dc:date>Tue, 21 Feb 2017 11:32:32 +0900</dc:date>
</item>


<item>
<title>[정규식] 해시태그(#) 뽑아내기</title>
<link>https://go3.co.kr/mintbbs/bbs/board.php?bo_table=php&amp;amp;wr_id=10148</link>
<description><![CDATA[[U][정규식] 해시태그(#) 뽑아내기[/U]<br/><br/>해시태그를 뽑아 오는 정규식입니다.<br/>[CODE php]&lt;?php<br/>$data = &#034;가나다 #다라마 ABC #QWE 오오오오오오오오 #MINTSTATE&nbsp; #ㅊㅊㅊㅊ BBS&#034;;<br/>preg_match_all(&#034;/\\#([0-9a-zA-Z가-힣]*)/&#034;, $data, $hashtags);<br/>print_r($hashtags);<br/>?&gt;[/CODE]<br/><br/>결과<br/>[CODE]Array<br/>(<br/>&nbsp; &nbsp; [0] =&gt; Array<br/>&nbsp; &nbsp; &nbsp; &nbsp; (<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [0] =&gt; #다라마<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [1] =&gt; #QWE<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [2] =&gt; #MINTSTATE<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [3] =&gt; #ㅊㅊㅊㅊ<br/>&nbsp; &nbsp; &nbsp; &nbsp; )<br/><br/>&nbsp; &nbsp; [1] =&gt; Array<br/>&nbsp; &nbsp; &nbsp; &nbsp; (<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [0] =&gt; 다라마<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [1] =&gt; QWE<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [2] =&gt; MINTSTATE<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [3] =&gt; ㅊㅊㅊㅊ<br/>&nbsp; &nbsp; &nbsp; &nbsp; )<br/><br/>)[/CODE]<br/><br/><br/><br/>[B]* 추가[/B]<br/><A HREF="https://saikyo4713.blog.me/221023839399" TARGET="_blank"  rel="nofollow">https://saikyo4713.blog.me/221023839399</A><br/>[CODE php]&lt;?php<br/>//본문에서 해시태그 변환<br/>function string_to_hashtag_content($os_type, $string)<br/>{<br/>&nbsp; &nbsp; try<br/>&nbsp; &nbsp; {<br/>&nbsp; &nbsp; &nbsp; &nbsp; if(in_array($os_type, [&#039;A&#039;, &#039;I&#039;, &#039;W&#039;]) && $string)<br/>&nbsp; &nbsp; &nbsp; &nbsp; {<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $result = array();<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $re_all = &#034;/(^|\s)*#(.+?)(?=[\s,#)]|$)/&#034;;<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $re = &#034;/[ #\&\+\-%@=\/\\\:;,\.&#039;\&#034;\^`~\_|\!\?\*$#&lt;&gt;()\[\]\{\}]/i&#034;;<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; preg_match_all($re_all, $string, $matches);<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; foreach($matches[0] as $s)<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $str = strip_tags(trim($s));<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $str = substr($str, 1, strlen($str)-1);<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //특수문자 대체<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(!preg_match($re, $str))<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $str = string_to_replace($str);<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(strlen($str) &gt; 1)<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; switch($os_type)<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case &#034;A&#034; : $result[&#034;#&#034; . $str] = &#034;&lt;a href=&#039;javascript:alert(\&#034;&#034; . $str . &#034;\&#034;)&#039;&gt;#&#034; . $str . &#034;&lt;/a&gt;&#034;; break;<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case &#034;I&#034; : $result[&#034;#&#034; . $str] = &#034;&lt;a href=&#039;javascript:alert(\&#034;&#034; . $str . &#034;\&#034;)&#039;&gt;#&#034; . $str . &#034;&lt;/a&gt;&#034;; break;<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; default : break;<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return strtr($string, $result) . &#039;&#039;;<br/>&nbsp; &nbsp; &nbsp; &nbsp; } else throw new Exception (&#039;&#039;);<br/>&nbsp; &nbsp; } catch (Exception $e) {<br/>&nbsp; &nbsp; &nbsp; &nbsp; return $e-&gt;getMessage();<br/>&nbsp; &nbsp; }<br/>}<br/><br/>//본문에서 해시태그 추출 (배열)<br/>function string_to_hashtag_db($string)<br/>{<br/>&nbsp; &nbsp; try<br/>&nbsp; &nbsp; {<br/>&nbsp; &nbsp; &nbsp; &nbsp; if($string)<br/>&nbsp; &nbsp; &nbsp; &nbsp; {<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $result = array();<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $re_all = &#034;/(^|\s)*#(.+?)(?=[\s,#)]|$)/&#034;;<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $re = &#034;/[ #\&\+\-%@=\/\\\:;,\.&#039;\&#034;\^`~\_|\!\?\*$#&lt;&gt;()\[\]\{\}]/i&#034;;<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; preg_match_all($re_all, $string, $matches);<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; foreach($matches[0] as $s)<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $str = strip_tags(trim($s));<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $str = substr($str, 1, strlen($str)-1);<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(!preg_match($re, $str))<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $str = string_to_replace($str);<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(strlen($str) &gt; 1) $result[] = $str;<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return array_unique($result);<br/>&nbsp; &nbsp; &nbsp; &nbsp; } else throw new Exception (&#039;&#039;);<br/>&nbsp; &nbsp; } catch (Exception $e) {<br/>&nbsp; &nbsp; &nbsp; &nbsp; return array();<br/>&nbsp; &nbsp; }<br/>}<br/><br/>//본문내용 해시태그 변환 (본문 저장용으로 사용가능)<br/>function string_to_hashtag($mode, $string)<br/>{<br/>&nbsp; &nbsp; $change = array();<br/>&nbsp; &nbsp; preg_match_all(&#034;/(^|\s)*#(.+?)(?=[\s,#)]|$)/&#034;, $string, $matches);<br/>&nbsp; &nbsp; foreach ( $matches[0] as $s )<br/>&nbsp; &nbsp; {<br/>&nbsp; &nbsp; &nbsp; &nbsp; $str = strip_tags(trim($s));<br/>&nbsp; &nbsp; &nbsp; &nbsp; $str = substr($str, 1, strlen($str)-1);<br/>&nbsp; &nbsp; &nbsp; &nbsp; //특수문자 대체<br/>&nbsp; &nbsp; &nbsp; &nbsp; if(!preg_match(&#034;/[ #\&\+\-%@=\/\\\:;,\.&#039;\&#034;\^`~\_|\!\?\*$#&lt;&gt;()\[\]\{\}]/i&#034;, $str))<br/>&nbsp; &nbsp; &nbsp; &nbsp; {<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $str = string_to_replace($str);<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(strlen($str) &gt; 1) $change[&#034;#&#034; . $str] = &#034;&lt;TAG&gt;#&#034;.$str.&#034;&lt;/TAG&gt;&#034;;<br/>&nbsp; &nbsp; &nbsp; &nbsp; }<br/>&nbsp; &nbsp; }<br/>&nbsp; &nbsp; return strtr($string, $change).&#039;&#039;;<br/>}<br/><br/>//본문내용 해시태그 표기 (본문 저장용으로 사용가능)<br/>function hashtag_to_string($mode, $string)<br/>{<br/>&nbsp; &nbsp; $change = array();<br/>&nbsp; &nbsp; preg_match_all(&#034;/&lt;TAG&gt;(.*?)&lt;\/TAG&gt;/&#034;, $string, $matches);<br/>&nbsp; &nbsp; foreach ( $matches[0] as $s )<br/>&nbsp; &nbsp; {<br/>&nbsp; &nbsp; &nbsp; &nbsp; $str = strip_tags($s);<br/>&nbsp; &nbsp; &nbsp; &nbsp; switch($mode)<br/>&nbsp; &nbsp; &nbsp; &nbsp; {<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case &#034;A&#034; : $change[$str] = &#034;&lt;a href=&#039;javascript:alert(\&#034;&#034; . $str . &#034;\&#034;)&#039;&gt;&#034; . $str . &#034;&lt;/a&gt;&#034;; break;<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case &#034;I&#034; : $change[$str] = &#034;&lt;a href=&#039;javascript:alert(\&#034;&#034; . $str . &#034;\&#034;)&#039;&gt;&#034; . $str . &#034;&lt;/a&gt;&#034;; break;<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case &#034;W&#034; : $change[$str] = &#034;&lt;a href=&#039;javascript:alert(\&#034;&#034; . $str . &#034;\&#034;)&#039;&gt;&#034; . $str . &#034;&lt;/a&gt;&#034;; break;<br/>&nbsp; &nbsp; &nbsp; &nbsp; }<br/>&nbsp; &nbsp; }<br/>&nbsp; &nbsp; return strtr($string, $change).&#039;&#039;;<br/>}<br/><br/><br/>function string_to_replace($str) {<br/>	return $str;<br/>}<br/>?&gt;[/CODE]]]></description>
<dc:creator>MintState</dc:creator>
<dc:date>Thu, 12 Nov 2015 12:09:23 +0900</dc:date>
</item>


<item>
<title>serialize unserialize 배열정보를문자열의 형태로 변환</title>
<link>https://go3.co.kr/mintbbs/bbs/board.php?bo_table=php&amp;amp;wr_id=10147</link>
<description><![CDATA[[U]serialize unserialize 배열정보를문자열의 형태로 변환[/U]<br/><br/>저는 잘안쓰긴 하는데 가끔씩 필요가 있어서 기록합니다.<br/><br/>string [B]serialize[/B](mixed value)<br/>변수의 데이터를 저장 및 복원이 가능한 형태로 반한다.<br/><br/>value를 어디에나 저장이 가능하다 원래의 데이터로 복원할 수 있는 정보를 가진 문자열의 형태로 반환한다.<br/>주로 value는 배열이 오는데 get 이나 post 로 데이터를 전송할때 변환해서 전송하는 방식이다.<br/>변환방식은 원래 가진 값과 구조를 바이트 스트림(byte-stream)으로 변환하는 방식이다.<br/><br/>mixed [B]unserialize[/B](string str)<br/>serialize()로 변환된 데이터를 원래의 데이터로 복원한다.<br/><br/>str를 원래의 데이터로 복원시키는 역할을 한다.<br/><br/>예제<br/>[CODE php]&lt;?<br/>$foods = array(&#034;food&#034; =&gt; &#034;pizza&#034;, &#034;beverage&#034; =&gt; &#034;cola&#034;, &#034;fruit&#034; =&gt; array(&#034;apple&#034;, &#034;strawberry&#034;, &#034;coconut&#034;));<br/><br/>// 배열($foods)을 복원가능한 형태의 데이터로 변환하여 반환한다. <br/>$serialized_foods = serialize($foods);<br/>echo $serialized_foods;<br/>// a:3:{s:4:&#034;food&#034;;s:5:&#034;pizza&#034;;s:8:&#034;beverage&#034;;s:4:&#034;cola&#034;;s:5:&#034;fruit&#034;;a:3:{i:0;s:5:&#034;apple&#034;;i:1;s:10:&#034;strawberry&#034;;i:2;s:7:&#034;coconut&#034;;}}<br/>?&gt;<br/>&lt;a href=&#034;test2.php?foods=&lt;?=urlencode($serialized_foods)?&gt;&#034;&gt;serialize 함수 사용 전과 후의 결과보기&lt;/a&gt;<br/>[/CODE]<br/><br/>예제 test2.php<br/>[CODE php]&lt;?<br/>echo &#034;unserialize 전 : &lt;p&gt;&#034;;<br/>echo &#034;[타입] : &#034; . gettype($_GET[&#034;foods&#034;]) . &#034;&lt;br&gt;&#034;;<br/>echo &#034;[값] : &#034; . $_GET[&#034;foods&#034;] . &#034;&lt;p&gt;&#034;;<br/>/*<br/>unserialize 전 : <br/>[타입] : string<br/>[값] : a:3:{s:4:\&#034;food\&#034;;s:5:\&#034;pizza\&#034;;s:8:\&#034;beverage\&#034;;s:4:\&#034;cola\&#034;;s:5:\&#034;fruit\&#034;;a:3:{i:0;s:5:\&#034;apple\&#034;;i:1;s:10:\&#034;strawberry\&#034;;i:2;s:7:\&#034;coconut\&#034;;}}<br/>*/<br/><br/>// serialize() 함수로 변환된 데이터를 원래의 배열로 복원시킨다.<br/>$new_foods =unserialize(stripslashes($_GET[&#034;foods&#034;])); <br/>//urlencde()들어온 값은 &#034; 앞에 역슬러쉬릴 붙이므로 반듯이 stripslashes() 한다<br/><br/>echo &#034;unserialize 후 : &lt;p&gt;&#034;;<br/>echo &#034;[타입] : &#034; . gettype($new_foods) . &#034;&lt;br&gt;&#034;;<br/>echo &#034;[값] : &#034;;<br/>print_r($new_foods);<br/>/*<br/>unserialize 후 : <br/><br/>[타입] : array<br/>[값] : <br/>Array<br/>&nbsp;(<br/>&nbsp;[food] =&gt; pizza<br/>&nbsp;[beverage] =&gt; cola<br/>&nbsp;[fruit] =&gt; Array<br/>&nbsp; (<br/>&nbsp;  [0] =&gt; apple<br/>&nbsp;  [1] =&gt; strawberry<br/>&nbsp;  [2] =&gt; coconut<br/>&nbsp; )<br/>&nbsp;)<br/>*/<br/>echo $new_foods[food]; //pizza<br/>?&gt;<br/>[/CODE]<br/><br/>출처 : [URL=http://dance2i.tistory.com/122]<A HREF="http://dance2i.tistory.com/122" TARGET="_blank"  rel="nofollow">http://dance2i.tistory.com/122</A>[/URL]]]></description>
<dc:creator>MintState</dc:creator>
<dc:date>Mon, 08 Dec 2014 12:36:14 +0900</dc:date>
</item>


<item>
<title>실시간 화면 출력 flush, ob_flush</title>
<link>https://go3.co.kr/mintbbs/bbs/board.php?bo_table=php&amp;amp;wr_id=10146</link>
<description><![CDATA[[U]실시간 화면 출력 flush, ob_flush[/U]<br/><br/>화면상 시간 타임별이나 인터프린터 진행상황을 실시간으로 출력하기위해서 flush, ob_flush PHP 함수 출력<br/><br/>[CODE php]ob_end_clean(); // clean을 꼭 넣어야 됨... 테스트 시 이런저런 문제가 발생됨...<br/>&nbsp;for($i=1; $i &lt;= 5; ++$i){<br/>&nbsp; &nbsp;  echo &#039;test&#039;.$i.&#039;&lt;br/&gt;&#039;;<br/>&nbsp; &nbsp;  echo str_pad(&#039; &#039;,256); // 익스플로어에서 정상 작동되기 위함..<br/>&nbsp; &nbsp;  ob_flush(); <br/>&nbsp; &nbsp; flush(); // flush는 ob_flush 다음에 와야됨..<br/>&nbsp; &nbsp;  sleep(1);<br/>&nbsp;}[/CODE]<br/><br/>[CODE php]// 함수로 만들어 놓으면 편리...<br/>&nbsp;function debug_flush($msg)<br/>&nbsp;{<br/>&nbsp; &nbsp;  ob_end_clean();<br/>&nbsp; &nbsp;  echo $msg.&#039;&lt;br/&gt;&#039;;<br/>&nbsp; &nbsp;  echo str_pad(&#039; &#039;,256);<br/>&nbsp; &nbsp;  ob_flush();<br/>&nbsp; &nbsp;  flush();<br/>&nbsp;}<br/>&nbsp;for($i=1; $i &lt;= 5; ++$i){<br/>&nbsp; &nbsp;  debug_flush(&#039;test&#039;.$i);<br/>&nbsp; &nbsp;  sleep(1);<br/>&nbsp;}[/CODE]<br/><br/>출처 : <A HREF="http://planactor.tistory.com/180" TARGET="_blank"  rel="nofollow">http://planactor.tistory.com/180</A>]]></description>
<dc:creator>MintState</dc:creator>
<dc:date>Tue, 26 Feb 2013 10:28:01 +0900</dc:date>
</item>


<item>
<title>[MYSQL] 생년월일로 나이 반환</title>
<link>https://go3.co.kr/mintbbs/bbs/board.php?bo_table=php&amp;amp;wr_id=10145</link>
<description><![CDATA[[U][MYSQL] 생년월일로 나이 반환[/U]<br/><br/>IF 문을 이용하여 나이 계산<br/>[CODE]IF (LEFT(now(),10) &gt; ai_birth, LEFT(now(),4) - LEFT(ai_birth,4), LEFT(now(),4) - LEFT(ai_birth,4)-1) as age[/CODE]]]></description>
<dc:creator>MintState</dc:creator>
<dc:date>Tue, 22 Jan 2013 12:25:19 +0900</dc:date>
</item>


<item>
<title>php 절사</title>
<link>https://go3.co.kr/mintbbs/bbs/board.php?bo_table=php&amp;amp;wr_id=10144</link>
<description><![CDATA[[U]php 절사[/U]<br/><br/>[CODE php]&lt;?<br/>$input = 1099;<br/>//php 절사<br/>$ttt = floor($input /10) * 10;<br/>echo $ttt;<br/>?&gt;[/CODE]<br/><br/>[B]php 5.3 이상[/B]에서는 [COLOR=blue]PHP_ROUND_HALF_DOWN[/COLOR] 옵션을 쓰면 됩니다.<br/><br/>[CODE php]&lt;?php<br/>echo round(3.4);&nbsp; &nbsp; &nbsp; &nbsp;  // 3<br/>echo round(3.5);&nbsp; &nbsp; &nbsp; &nbsp;  // 4<br/>echo round(3.6);&nbsp; &nbsp; &nbsp; &nbsp;  // 4<br/>echo round(3.6, 0);&nbsp; &nbsp; &nbsp; // 4<br/>echo round(1.95583, 2);&nbsp; // 1.96<br/>echo round(1241757, -3); // 1242000<br/>echo round(5.045, 2);&nbsp; &nbsp; // 5.05<br/>echo round(5.055, 2);&nbsp; &nbsp; // 5.06<br/>?&gt; [/CODE]<br/><br/>[CODE php]&lt;?php<br/>echo round(9.5, 0, PHP_ROUND_HALF_UP);&nbsp;  // 10<br/>echo round(9.5, 0, PHP_ROUND_HALF_DOWN); // 9<br/>echo round(9.5, 0, PHP_ROUND_HALF_EVEN); // 10<br/>echo round(9.5, 0, PHP_ROUND_HALF_ODD);&nbsp; // 9<br/><br/>echo round(8.5, 0, PHP_ROUND_HALF_UP);&nbsp;  // 9<br/>echo round(8.5, 0, PHP_ROUND_HALF_DOWN); // 8<br/>echo round(8.5, 0, PHP_ROUND_HALF_EVEN); // 8<br/>echo round(8.5, 0, PHP_ROUND_HALF_ODD);&nbsp; // 9<br/>?&gt; [/CODE]]]></description>
<dc:creator>MintState</dc:creator>
<dc:date>Fri, 27 Jul 2012 10:50:49 +0900</dc:date>
</item>


<item>
<title>Referer URL 이용하여 검색엔진 키워드 뽑아내기</title>
<link>https://go3.co.kr/mintbbs/bbs/board.php?bo_table=php&amp;amp;wr_id=154</link>
<description><![CDATA[[U]Referer URL 이용하여 검색엔진 키워드 뽑아내기[/U]<br/><br/>다음 함수는 $_SERVER[&#039;HTTP_REFERER&#039;] 로 검색엔진의 키워드를 뽑아내는 함수이다.<br/>[CODE]function search_engine_query_string($url = false) {<br/>	if(!$url) {<br/>		$url = isset($_SERVER[&#039;HTTP_REFERER&#039;]) ? $_SERVER[&#039;HTTP_REFERER&#039;] : false;<br/>	}<br/>	if($url == false) {<br/>		return &#039;&#039;;<br/>	}<br/><br/>	$parts = parse_url($url);<br/>	parse_str($parts[&#039;query&#039;], $query);<br/><br/>	$search_engines = array(<br/>		&#039;naver&#039; =&gt; &#039;query&#039;,<br/>		&#039;daum&#039; =&gt; &#039;q&#039;,<br/>		&#039;bing&#039; =&gt; &#039;q&#039;,<br/>		&#039;google&#039; =&gt; &#039;q&#039;,<br/>		&#039;yahoo&#039; =&gt; &#039;p&#039;<br/>	);<br/><br/>	preg_match(&#039;/(&#039; . implode(&#039;|&#039;, array_keys($search_engines)) . &#039;)\./&#039;, $parts[&#039;host&#039;], $matches);<br/><br/>	if (isset($matches[1]) && isset($query[$search_engines[$matches[1]]])) {<br/>		$return_str = $query[$search_engines[$matches[1]]];<br/>		if (preg_match(&#039;/daum/i&#039;, $parts[&#039;host&#039;]) || preg_match(&#039;/ad.search.naver.com/i&#039;, $parts[&#039;host&#039;]) || ( preg_match(&#039;/search.naver.com/i&#039;, $parts[&#039;host&#039;]) && !preg_match(&#039;/ie=utf8/i&#039;, $url) ) ) {<br/>			$return_str = iconv(&#034;euc-kr&#034;, &#034;utf-8&#034;, $return_str);<br/>		}<br/>		return str_replace(&#034; &#034;, &#034;&#034;, $return_str);<br/>	} else return &#034;&#034;;<br/><br/>	//return isset($matches[1]) && isset($query[$search_engines[$matches[1]]]) ? $query[$search_engines[$matches[1]]] : &#039;&#039;;<br/>}[/CODE]<br/><br/>키워드가 UTF8이 아닌경우 iconv 함수를 이용하여 캐릭터셋을 변경하여 준다.]]></description>
<dc:creator>MintState</dc:creator>
<dc:date>Fri, 10 Feb 2012 14:22:23 +0900</dc:date>
</item>


<item>
<title>달력 소스</title>
<link>https://go3.co.kr/mintbbs/bbs/board.php?bo_table=php&amp;amp;wr_id=153</link>
<description><![CDATA[[U]달력 소스[/U]<br/><br/>달력소스는 거의다 비슷비슷 합니다.<br/>그중 하나를 소개 합니다. 참고 하셔서 프로그램 하시면 될것 같네요.<br/><br/>[CODE php]&lt;? <br/>/****************************** <br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 달력 <br/>******************************/<br/>/********** 사용자 설정값 **********/ <br/>$startYear = 2007; <br/>$endYear = date( &#034;Y&#034; ) + 4; <br/><br/>/********** 입력값 **********/ <br/>$year = ( $_GET[&#039;toYear&#039;] )? $_GET[&#039;toYear&#039;] : date( &#034;Y&#034; ); <br/>$month = ( $_GET[&#039;toMonth&#039;] )? $_GET[&#039;toMonth&#039;] : date( &#034;m&#034; ); <br/>$doms = array( &#034;일&#034;, &#034;월&#034;, &#034;화&#034;, &#034;수&#034;, &#034;목&#034;, &#034;금&#034;, &#034;토&#034; ); <br/><br/>/********** 계산값 **********/ <br/>$mktime = mktime( 0, 0, 0, $month, 1, $year ); // 입력된 값으로 년-월-01을 만든다 <br/>$days = date( &#034;t&#034;, $mktime ); // 현재의 year와 month로 현재 달의 일수 구해오기 <br/>$startDay = date( &#034;w&#034;, $mktime ); // 시작요일 알아내기 <br/><br/>// 지난달 일수 구하기 <br/>$prevDayCount = date( &#034;t&#034;, mktime( 0, 0, 0, $month, 0, $year ) ) - $startDay + 1; <br/><br/>$nowDayCount = 1; // 이번달 일자 카운팅 <br/>$nextDayCount = 1; // 다음달 일자 카운팅 <br/><br/>// 이전, 다음 만들기 <br/>$prevYear = ( $month == 1 )? ( $year - 1 ) : $year; <br/>$prevMonth = ( $month == 1 )? 12 : ( $month - 1 ); <br/>$nextYear = ( $month == 12 )? ( $year + 1 ) : $year; <br/>$nextMonth = ( $month == 12 )? 1 : ( $month + 1 ); <br/><br/>// 출력행 계산 <br/>$setRows = ceil( ( $startDay + $days ) / 7 ); <br/>?&gt; <br/>&lt;!---------- 달력 출력 ----------&gt;<br/>&lt;center&gt;<br/>&lt;table style=&#034;border-collapse:collapse;&#034;&gt;<br/>&lt;form method=&#034;get&#034;&gt;<br/>&lt;tr&gt;<br/>	&lt;td style=&#034;padding:10;border-width:1;border-style:solid;&#034;&gt;<br/>		&lt;select name=&#034;toYear&#034; onchange=&#034;submit();&#034;&gt;<br/>		&lt;? for( $i = $startYear; $i &lt; $endYear; $i++ ) { ?&gt; <br/>			&lt;option value=&#034;&lt;?=$i?&gt;&#034; &lt;?=($i==$year)?&#034;selected&#034;:&#034;&#034;?&gt;&gt;&lt;?=$i?&gt;&lt;/option&gt; <br/>		&lt;? } ?&gt; <br/>		&lt;/select&gt;년 <br/>		&lt;select name=&#034;toMonth&#034; onchange=&#034;submit();&#034;&gt; <br/>		&lt;? for( $i = 1; $i &lt;= 12; $i++ ) { ?&gt; <br/>			&lt;option value=&#034;&lt;?=$i?&gt;&#034; &lt;?=($i==$month)?&#034;selected&#034;:&#034;&#034;?&gt;&gt;&lt;?=$i?&gt;&lt;/option&gt; <br/>		&lt;? } ?&gt; <br/>		&lt;/select&gt;월 <br/>	&lt;/td&gt;<br/>&lt;/tr&gt;<br/>&lt;/form&gt;<br/>&lt;/table&gt;<br/>&lt;br&gt;<br/>&lt;table style=&#034;border-collapse:collapse;&#034;&gt;<br/>&lt;tr&gt;<br/>	&lt;td style=&#034;padding:10;border-width:1;border-style:solid;&#034;&gt;<br/>		&lt;input type=&#034;button&#034; onclick=&#034;location.href=&#039;&lt;?=$_SERVER[&#039;PHP_SELF&#039;]?&gt;?toYear=&lt;?=$prevYear?&gt;&toMonth=&lt;?=$prevMonth?&gt;&#039;&#034; value=&#034; &lt;&lt; &#034;&gt;<br/>		&lt;?=$year?&gt;년 &lt;?=$month?&gt;월<br/>		&lt;input type=&#034;button&#034; onclick=&#034;location.href=&#039;&lt;?=$_SERVER[&#039;PHP_SELF&#039;]?&gt;?toYear=&lt;?=$nextYear?&gt;&toMonth=&lt;?=$nextMonth?&gt;&#039;&#034; value=&#034; &gt;&gt; &#034;&gt;<br/>	&lt;/td&gt;<br/>&lt;/tr&gt;<br/>&lt;/table&gt;<br/>&lt;br&gt;<br/>&lt;table cellpadding=0 cellspacing=0 style=&#034;border-collapse:collapse;&#034;&gt; <br/>&lt;tr&gt;<br/>&lt;?<br/>for( $i = 0; $i &lt; count( $doms ); $i++ ) {<br/>?&gt; <br/>	&lt;td align=&#034;center&#034; style=&#034;padding:6;border-width:1;border-style:solid;&#034;&gt;&lt;?=$doms[$i]?&gt;요일&lt;/td&gt; <br/>&lt;?<br/>}<br/>?&gt; <br/>&lt;/tr&gt;<br/><br/>&lt;?<br/>for( $rows = 0; $rows &lt; $setRows; $rows++ ) {<br/>?&gt; <br/>&lt;tr&gt;<br/>&lt;? <br/>		for( $cols = 0; $cols &lt; 7; $cols++ ) { <br/>				// 셀 인덱스 만들자 <br/>				$cellIndex&nbsp; &nbsp; = ( 7 * $rows ) + $cols; <br/>?&gt; <br/><br/>&lt;? <br/>				// 이번달이라면 <br/>				if ( $startDay &lt;= $cellIndex && $nowDayCount &lt;= $days ) {<br/>?&gt; <br/>	&lt;td align=&#034;center&#034; style=&#034;padding:6;border-width:1;border-style:solid;&#034;&gt;<br/>&lt;?<br/>						if ( date( &#034;w&#034;, mktime( 0, 0, 0, $month, $nowDayCount, $year ) ) == 6 ) {<br/>?&gt; <br/>		&lt;b&gt;&lt;font color=&#034;blue&#034;&gt;&lt;?=$nowDayCount++?&gt;&lt;/font&gt;&lt;/b&gt;<br/>&lt;?<br/>						} else if ( date( &#034;w&#034;, mktime( 0, 0, 0, $month, $nowDayCount, $year ) ) == 0 ) {<br/>?&gt; <br/>		&lt;b&gt;&lt;font color=&#034;red&#034;&gt;&lt;?=$nowDayCount++?&gt;&lt;/font&gt;&lt;/b&gt;<br/>&lt;?<br/>						} else {<br/>?&gt; <br/>		&lt;b&gt;&lt;?=$nowDayCount++?&gt;&lt;/b&gt;<br/>&lt;?<br/>						}<br/>?&gt; <br/>	&lt;/td&gt;<br/><br/>&lt;? <br/>				// 이전달이라면 <br/>				} else if ( $cellIndex &lt; $startDay ) {<br/>?&gt; <br/>	&lt;td align=&#034;center&#034; style=&#034;padding:6;border-width:1;border-style:solid;&#034;&gt;<br/>		&lt;font color=&#034;gray&#034;&gt;&lt;b&gt;&lt;?=$prevDayCount++?&gt;&lt;/b&gt;&lt;/font&gt;<br/>	&lt;/td&gt;<br/>&lt;? <br/>				// 다음달 이라면 <br/>				} else if ( $cellIndex &gt;= $days ) {<br/>?&gt; <br/>	&lt;td align=&#034;center&#034; style=&#034;padding:6;border-width:1;border-style:solid;&#034;&gt;<br/>		&lt;font color=&#034;gray&#034;&gt;&lt;b&gt;&lt;?=$nextDayCount++?&gt;&lt;/b&gt;&lt;/font&gt;<br/>	&lt;/td&gt;<br/>&lt;?<br/>				} <br/>		} <br/>?&gt; <br/>&lt;/tr&gt;<br/>&lt;?<br/>}<br/>?&gt;<br/>&lt;/table&gt;<br/>&lt;/center&gt;[/CODE]<br/><br/><br/>추가 : 달력 소스 하나 추가 합니다. <br/>[ATTACH]770[/ATTACH] 출처는&nbsp; <A HREF="http://dev.previl.net" TARGET="_blank"  rel="nofollow">http://dev.previl.net</A>]]></description>
<dc:creator>MintState</dc:creator>
<dc:date>Fri, 21 Oct 2011 11:48:17 +0900</dc:date>
</item>


<item>
<title>MYSQL 예약어</title>
<link>https://go3.co.kr/mintbbs/bbs/board.php?bo_table=php&amp;amp;wr_id=152</link>
<description><![CDATA[[U]MYSQL 예약어[/U]<br/><br/>[B]The following table shows the reserved words in MySQL 5.5. [/B]<br/>ACCESSIBLE<br/>ADD<br/>ALL<br/>ALTER<br/>ANALYZE<br/>AND<br/>AS<br/>ASC<br/>ASENSITIVE<br/>BEFORE<br/>BETWEEN<br/>BIGINT<br/>BINARY<br/>BLOB<br/>BOTH<br/>BY<br/>CALL<br/>CASCADE<br/>CASE<br/>CHANGE<br/>CHAR<br/>CHARACTER<br/>CHECK<br/>COLLATE<br/>COLUMN<br/>CONDITION<br/>CONSTRAINT<br/>CONTINUE<br/>CONVERT<br/>CREATE<br/>CROSS<br/>CURRENT_DATE<br/>CURRENT_TIME<br/>CURRENT_TIMESTAMP<br/>CURRENT_USER<br/>CURSOR<br/>DATABASE<br/>DATABASES<br/>DAY_HOUR<br/>DAY_MICROSECOND<br/>DAY_MINUTE<br/>DAY_SECOND<br/>DEC<br/>DECIMAL<br/>DECLARE<br/>DEFAULT<br/>DELAYED<br/>DELETE<br/>DESC<br/>DESCRIBE<br/>DETERMINISTIC<br/>DISTINCT<br/>DISTINCTROW<br/>DIV<br/>DOUBLE<br/>DROP<br/>DUAL<br/>EACH<br/>ELSE<br/>ELSEIF<br/>ENCLOSED<br/>ESCAPED<br/>EXISTS<br/>EXIT<br/>EXPLAIN<br/>FALSE<br/>FETCH<br/>FLOAT<br/>FLOAT4<br/>FLOAT8<br/>FOR<br/>FORCE<br/>FOREIGN<br/>FROM<br/>FULLTEXT<br/>GENERAL<br/>GRANT<br/>GROUP<br/>HAVING<br/>HIGH_PRIORITY<br/>HOUR_MICROSECOND<br/>HOUR_MINUTE<br/>HOUR_SECOND<br/>IF<br/>IGNORE<br/>IGNORE_SERVER_IDS<br/>IN<br/>INDEX<br/>INFILE<br/>INNER<br/>INOUT<br/>INSENSITIVE<br/>INSERT<br/>INT<br/>INT1<br/>INT2<br/>INT3<br/>INT4<br/>INT8<br/>INTEGER<br/>INTERVAL<br/>INTO<br/>IS<br/>ITERATE<br/>JOIN<br/>KEY<br/>KEYS<br/>KILL<br/>LEADING<br/>LEAVE<br/>LEFT<br/>LIKE<br/>LIMIT<br/>LINEAR<br/>LINES<br/>LOAD<br/>LOCALTIME<br/>LOCALTIMESTAMP<br/>LOCK<br/>LONG<br/>LONGBLOB<br/>LONGTEXT<br/>LOOP<br/>LOW_PRIORITY<br/>MASTER_HEARTBEAT_PERIOD<br/>MASTER_SSL_VERIFY_SERVER_CERT<br/>MATCH<br/>MAXVALUE<br/>MEDIUMBLOB<br/>MEDIUMINT<br/>MEDIUMTEXT<br/>MIDDLEINT<br/>MINUTE_MICROSECOND<br/>MINUTE_SECOND<br/>MOD<br/>MODIFIES<br/>NATURAL<br/>NOT<br/>NO_WRITE_TO_BINLOG<br/>NULL<br/>NUMERIC<br/>ON<br/>OPTIMIZE<br/>OPTION<br/>OPTIONALLY<br/>OR<br/>ORDER<br/>OUT<br/>OUTER<br/>OUTFILE<br/>PRECISION<br/>PRIMARY<br/>PROCEDURE<br/>PURGE<br/>RANGE<br/>READ<br/>READS<br/>READ_WRITE<br/>REAL<br/>REFERENCES<br/>REGEXP<br/>RELEASE<br/>RENAME<br/>REPEAT<br/>REPLACE<br/>REQUIRE<br/>RESIGNAL<br/>RESTRICT<br/>RETURN<br/>REVOKE<br/>RIGHT<br/>RLIKE<br/>SCHEMA<br/>SCHEMAS<br/>SECOND_MICROSECOND<br/>SELECT<br/>SENSITIVE<br/>SEPARATOR<br/>SET<br/>SHOW<br/>SIGNAL<br/>SLOW<br/>SMALLINT<br/>SPATIAL<br/>SPECIFIC<br/>SQL<br/>SQLEXCEPTION<br/>SQLSTATE<br/>SQLWARNING<br/>SQL_BIG_RESULT<br/>SQL_CALC_FOUND_ROWS<br/>SQL_SMALL_RESULT<br/>SSL<br/>STARTING<br/>STRAIGHT_JOIN<br/>TABLE<br/>TERMINATED<br/>THEN<br/>TINYBLOB<br/>TINYINT<br/>TINYTEXT<br/>TO<br/>TRAILING<br/>TRIGGER<br/>TRUE<br/>UNDO<br/>UNION<br/>UNIQUE<br/>UNLOCK<br/>UNSIGNED<br/>UPDATE<br/>USAGE<br/>USE<br/>USING<br/>UTC_DATE<br/>UTC_TIME<br/>UTC_TIMESTAMP<br/>VALUES<br/>VARBINARY<br/>VARCHAR<br/>VARCHARACTER<br/>VARYING<br/>WHEN<br/>WHERE<br/>WHILE<br/>WITH<br/>WRITE<br/>XOR<br/>YEAR_MONTH<br/>ZEROFILL<br/><br/>[LIST][*][a] GENERAL not reserved in: 5.5.0-5.5.2, 5.5.8-5.5.11<br/>[*][b] IGNORE_SERVER_IDS not reserved in: 5.5.11, 5.5.8-5.5.11<br/>[*][c] MASTER_HEARTBEAT_PERIOD not reserved in: 5.5.11, 5.5.8-5.5.11<br/>[*][d] SLOW not reserved in: 5.5.0-5.5.2, 5.5.8-5.5.11[/LIST:o] <br/><br/>[I]The following are new reserved words in MySQL 5.5:[/I]<br/>GENERAL<br/>IGNORE_SERVER_IDS<br/>MASTER_HEARTBEAT_PERIOD<br/>MAXVALUE<br/>RESIGNAL<br/>SIGNAL<br/>SLOW<br/><br/>출처 : [URL]<A HREF="http://dev.mysql.com/doc/mysqld-version-reference/en/mysqld-version-reference-reservedwords-5-5.html" TARGET="_blank"  rel="nofollow">http://dev.mysql.com/doc/mysqld-version-reference/en/mysqld-version-reference-reservedwords-5-5.html</A>[/URL]<br/><br/>참고 : <br/>[URL=http://msdn.microsoft.com/en-us/library/ms189822.aspx]MSSQL Reserved Keywords (Transact-SQL)[/URL]<br/>[URL=http://developer.mimer.com/validator/sql-reserved-words.tml]SQL Reserved Words Overview[/URL]<br/>[URL=http://download.oracle.com/docs/cd/B19306_01/em.102/b40103/app_oracle_reserved_words.htm]Oracle Reserved Words[/URL]]]></description>
<dc:creator>MintState</dc:creator>
<dc:date>Mon, 02 May 2011 11:10:54 +0900</dc:date>
</item>


<item>
<title>페이징 클래스 v1.0 (PHP4/5)</title>
<link>https://go3.co.kr/mintbbs/bbs/board.php?bo_table=php&amp;amp;wr_id=151</link>
<description><![CDATA[[U]페이징 클래스 v1.0 (PHP4/5)[/U]<br/><br/>간단하게 페이징 클래스를 만들어 보았다.<br/>class_paging.php 파일은 PHP4/5 모두 사용가능하며 일반적인 클래스 작성방식으로 작성했으며<br/>class_paging_php5.php 파일은 PHP5 버젼에서 사용가능하며 Singleton 방식으로 작성되어 있다.<br/><br/>사용예제<br/>--------------------------------------------------------------------------------<br/>[CODE php]&lt;style&gt;<br/>.aaa {font-family: &#034;돋움&#034;,&#034;굴림&#034;;font-size: 11px ;color: #FF7E00; font-weight : bold;}<br/>.bbb {font-family: &#034;돋움&#034;,&#034;굴림&#034;;font-size: 12px ;color: red; font-weight : bold;}<br/>&lt;/style&gt;<br/>&lt;?php<br/>require &#034;class_paging.php&#034;;<br/>$page = $_GET[&#039;page&#039;];<br/>$params = array(<br/>	&#039;curPageNum&#039; =&gt; $page,<br/>	&#039;pageVar&#039; =&gt; &#039;page&#039;,<br/>	&#039;extraVar&#039; =&gt; &#039;&aaa=1&bbb=abc&#039;,<br/>	&#039;totalItem&#039; =&gt; 176,<br/>	&#039;perPage&#039; =&gt; 10,<br/>	&#039;perItem&#039; =&gt; 5,<br/>	&#039;prevPage&#039; =&gt; &#039;[이전]&#039;,<br/>	&#039;nextPage&#039; =&gt; &#039;[다음]&#039;,<br/>	&#039;prevPerPage&#039; =&gt; &#039;[이전10페이지]&#039;,<br/>	&#039;nextPerPage&#039; =&gt; &#039;[다음10페이지]&#039;,<br/>	&#039;firstPage&#039; =&gt; &#039;[처음]&#039;,<br/>	&#039;lastPage&#039; =&gt; &#039;[끝]&#039;,<br/>	&#039;pageCss&#039; =&gt; &#039;aaa&#039;,<br/>	&#039;curPageCss&#039; =&gt; &#039;bbb&#039;);<br/>$paging = new YsPaging($params);<br/>$paging-&gt;printPaging();<br/>?&gt;[/CODE]--------------------------------------------------------------------------------<br/>$params 설명 (필수옵션)<br/><br/>curPageNum : 현재 페이지의 값을 넘겨 줍니다.<br/>pageVar : 페이지 링크에 사용할 변수명(ex page,pagenum)<br/>extraVar : 페이지 링크에 추가적으로 같이 넘길 변수 link를 기입(ex &#034;&opt1=10&opt2=가나다&#034;)<br/>totalItem : 데이타베이스에 읽어들인 글(아이템)의 총 수<br/>perPage : 페이지 리스트 링크에 몇개씩 리스트를 뿌릴 것인지 (ex 5 설정하면 페이지리스트에 1 2 3 4 5가 나옴)<br/>perItem : 한페이지에 뿌려지는 글(아이템)의 수(실제 리스팅은 select 쿼리에서 하시고 이옵션은 페이지 계산용)<br/>prevPage : &#034;이전&#034; 링크에 사용할 문구나 이미지 태그 미설정시 &#034;이전&#034;이 출력<br/>nextPage : &#034;다음&#034; 링크에 사용할 문구나 이미지 태그 미설정시 &#034;다음&#034;이 출력<br/>prevPerPage : &#034;이전10개&#034; 링크에 사용할 문구나 이미지 태그 미설정시 출력 안됨<br/>nextPerPage : &#034;다음10개&#034; 링크에 사용할 문구나 이미지 태그 미설정시 출력 안됨<br/>firstPage : &#034;처음&#034; 링크에 사용할 문구나 이미지 태그 미설정시 출력 안됨<br/>lastPage : &#034;마지막&#034; 링크에 사용할 문구나 이미지 태그 미설정시 출력 안됨<br/>pageCss : 페이지 목록 링크에서 사용할 스타일 시트<br/>curPageCss : 페이지 목록 링크 중 현재 페이지 번호에서 사용할 스타일 시트<br/><br/><br/>--------------------------------------------------------------------------------<br/><br/>참고<br/>class_paging_php5.php 파일의 경우<br/>$paging = YsPaging::getInstance($params);<br/>를 사용하면 싱글톤으로 구현됩니다.<br/><br/>페이지 링크에 관한 구성은 printPaging() 메소드를 상속후 오버라이딩하거나<br/>개별 메소드를 호출하여 구성하여도 됩니다.<br/>echo $paging-&gt;getFirstPage();<br/>echo $paging-&gt;getPrevPerPage();<br/>echo $paging-&gt;getPrevPage();<br/>echo $paging-&gt;getPageList();<br/>echo $paging-&gt;getNextPage();<br/>echo $paging-&gt;getNextPerPage();<br/>echo $paging-&gt;getLastPage();<br/><br/><br/>출처 : <A HREF="http://wyseburn.tistory.com" TARGET="_blank"  rel="nofollow">http://wyseburn.tistory.com</A>]]></description>
<dc:creator>MintState</dc:creator>
<dc:date>Mon, 18 Apr 2011 11:55:17 +0900</dc:date>
</item>


<item>
<title>GD 라이브러리</title>
<link>https://go3.co.kr/mintbbs/bbs/board.php?bo_table=php&amp;amp;wr_id=150</link>
<description><![CDATA[[U]GD 라이브러리[/U]<br/><br/>[B]- gd 란 ? -[/B] <br/><br/>boutell 씨(?) 가 만든 png, jpg, gif 등 을 다루는 c library 로, <br/>(아마도) 설치가 간편하고 크기가 작다는 이유로 널리 쓰이게 된 라이브러리. <br/>php extension 으로 wrapping 되면서 폭발적인 인기를 누리게 되었다고 생각됨. <br/>gif 의 압축 알고리즘인 lzw 의 라이센스 때문에 한동안 gd 에서 gif 를 다루지 못하기도 하였는데, 라이센스 기간의 만료로 gif 다루는 것에도 자유로워 졌음. <br/>코드를 보면 animated gif 에도 대응하려 한 흔적이 있는데, <br/>현재 가능하지는 않음. <br/>animated gif 를 읽으면 첫장만 읽힘. <br/>freetype 을 이용하여 글자도 찍을 수 있고, <br/>이제는 완전히 php 그룹에서 관리하여 bundle 되었기 때문에 <br/>php 에서는 gd 를 따로 설치할 필요도 없음. <br/>gd 를 여태 따로 설치하고 있었다면 ./configure --help 해보기를 권장함. <br/><br/><br/>[COLOR=blue]1. gd 는 truecolor 를 지원하는 라이브러리.[/COLOR] <br/>imagecolorallocate() 는 indexed color 를 다루기 위한 함수이다. <br/>indexed color 란 256 색 이하의 색상만을 표현할 수 있는 방식으로, <br/>palette 라는 개념이 있다. <br/>이 palette 에 2 의 배수 (2색(흑백), 4, 8, 16, 32, 64, 128, 256) 단위로 <br/>색상을 &#039;미리 지정해 놓고&#039; 팔레트의 번호(indexed)로써 색을 표현하는 방식이다. <br/>때문에 많은 색상을 표현하기는 당연히 안되므로, <br/>imagecolorclosest() 라는 근접한 색상을 반환하는 함수도 존재한다. <br/><br/>하지만 지금은 뭐가 아쉬워서 256색이라는 제한에 갇혀 있겠는가? <br/>truecolor 로 맘껏 표현해 놓고 gif 로 저장할 때만 슬쩍 256 색으로 바꿔주면 된다. <br/>imagetruecolortopalette() <br/>이는 크기를 변경한다거나, 글을 쓴다거나 할 때 <br/>얼마나 부드럽게 표현 (anti alias 등) 되는가에 중대한 영향을 끼친다. <br/><br/><br/>[COLOR=blue]2. gd 에서 truecolor 색상값은 그냥 3bytes hex code.[/COLOR] <br/>함수로 불러오고 변환하고 그런것은 필요하지 않다. <br/>이미지를 트루컬러로 생성하고, 색상을 적어주면 된다. <br/>포토샵에서 익숙하던 그것. 빨강(R), 녹색(G), 파랑(B) 이 0~255 단계로 구분되는 그것. <br/>16진수로 0~ff 로 표현되는 그것. <br/>php 에서는 간단하게 0xffffff 로 표현하면 255, 255, 255 의 흰색이다. <br/>imagecreatetruecolor(), imagecreatefromjpeg(), imagecreatefrompng() 등 으로 <br/>생성된 이미지는 트루컬러이고 여기에는 색상을 allocate 할 필요가 없는 것이다. <br/>주의할 것은 png 는 indexed color 도 취급한다는 것이다. <br/>원본이 truecolor 인지 확인할 필요가 있다. imageistruecolor() <br/><br/><br/>[COLOR=blue]3. gd 에서의 투명 (transparent vs alpha)[/COLOR] <br/>indexed color 에서는 투명은 &#039;점을 찍지 않는것&#039;이다. <br/>팔레트에 미리 지정하고 그 색을 사용하는 indexed color 에서는 <br/>팔레트 하나를 transparent 로 지정하여 해당 점을 찍지 않음으로 투명을 표현한다. <br/>때문에 anti alias 와는 친해질 수 없고, <br/>톡박에 올라오는 animated gif 가 허연테두리가 보기 싫게 붙는 것이다. <br/><br/>반면, truecolor 에서의 투명은 말 그대로 투명이다. <br/>투과되어 뒤가 보이는 것이다. <br/>투명한 정도를 alpha 값으로 표현하고, <br/>imagecopy() 등으로 이미지를 겹칠 때 <br/>투명도에 따라 충실히 색상을 섞어서 뒤가 비쳐보이는 효과를 낼 것이다. <br/>투명도는 0~127 (0~7f) 의 값을 가지고 rgb 앞에 온다. (argb) <br/>0x7fffffff 로 표현하면 완전히 투명한 흰색이 된다. <br/>완전히 투명하기에 뒤에 오는 ffffff 는 의미가 없겠지만, <br/>색상이 &#039;겹칠 때&#039; 는 또 다르다. <br/>항상 겹치면 원하는 대로 표현할 수 없으므로 <br/>imagealphablending() 이라는 함수로 겹치지 않게 할 수도 있다. <br/>gd 에서 결과물에 투명정보가 그대로 남는 이미지 형식은 png 뿐이다. <br/>게다가 imagesavealpha() 를 반드시 해 주어야만 남는다. <br/><br/><br/>[COLOR=blue]4. 결론 [/COLOR]<br/>[CODE php]&lt;?php <br/>$img = imagecreatetruecolor(199, 199); <br/>imagealphablending($img, false); <br/>imagefilledrectangle($img, 0, 0, 198, 198, 0x7fffffff); <br/>imagealphablending($img, true); <br/>imagefilledellipse($img, 99, 99, 199, 100, 0x30ff0000); <br/>imagefilledellipse($img, 99, 99, 100, 199, 0x300000ff); <br/><br/>$img2 = imagecreatetruecolor(121, 121); <br/>imagealphablending($img2, false); <br/>imagefilledrectangle($img2, 0, 0, 120, 120, 0x3000ff00); <br/><br/>imagecopy($img, $img2, 39, 39, 0, 0, 121, 121);<br/><br/>imagefttext($img, 80, 0, 5, 100, 0x30000000, &#039;ms_gungsuh.ttf&#039;, &#034;확대를 하면\nanti alias 까지\n깔끔하게 먹힌\n것이 보인다.&#034;); <br/>//작은 글꼴을 깔끔하게 표현하기 위한 비트맵 글꼴이 포함되어 있는 글꼴은 크기가 작으면 안티알리아스 되지 않는다. 바탕,굴림,돋움,궁서 가 그러하다. <br/><br/>imagesavealpha($img, true); <br/><br/>imagepng($img, &#039;test.png&#039;);[/CODE]<br/><br/><br/>[COLOR=blue]5. 도형이 anti alias 가 안되는 것에 불만이면, php cairo wrapper 를 알아보자. [/COLOR]<br/>imageantialias() 를 시험해 보는 것을 말리지는 않겠다. <br/><br/><br/>[COLOR=blue]6. IE6 png alpha 는 구글님에게 물어보자.[/COLOR] <br/><A HREF="http://www.google.co.kr/search?q=ie6+png+alpha&ie=utf-8&oe=utf-8&aq=t&rls=org.gentoo:en-US:official&client=firefox-a" TARGET="_blank"  rel="nofollow">http://www.google.co.kr/search?q=ie6+png+alpha&ie=utf-8&oe=utf-8&aq=t&rls=org.gentoo:en-US:official&client=firefox-a</A> <br/>추천 : <A HREF="http://www.dillerdesign.com/experiment/DD_belatedPNG/" TARGET="_blank"  rel="nofollow">http://www.dillerdesign.com/experiment/DD_belatedPNG/</A> <br/><br/>Written by Song Hyo-Jin (shj at xenosi.de) <br/>License : Creative Commons - Attribution (CC-BY)<br/><br/>출처 : <A HREF="http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=69435" TARGET="_blank"  rel="nofollow">http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=69435</A>]]></description>
<dc:creator>MintState</dc:creator>
<dc:date>Sun, 17 Apr 2011 23:56:41 +0900</dc:date>
</item>


<item>
<title>GD를 이용한 기본기능 썸네일,CROP,CROP썸네일,텍스트 만들기</title>
<link>https://go3.co.kr/mintbbs/bbs/board.php?bo_table=php&amp;amp;wr_id=149</link>
<description><![CDATA[[U]GD를 이용한 기본기능 썸네일,CROP,CROP썸네일,텍스트 만들기[/U]<br/><br/>gd 보다 잘 정리된 ImageMagick 클래스, Gmagick 클래스를 추천합니다만 저것들이 설치되어 있지 않으면 GD를 활용해야 하기에 무식하게 일단 만들어 봤습니다. <br/>출처: phpschool<br/><br/>[CODE php]&lt;?php<br/>/** ====================================================== <br/>| @Author&nbsp; &nbsp; : 김종관 <br/>| @Email&nbsp; &nbsp; : <a href="mailto:apmsoft@gmail.com"  rel="nofollow">apmsoft@gmail.com</a> <br/>| @HomePage&nbsp; &nbsp; : <A HREF="http://www.apmsoftax.com" TARGET="_blank"  rel="nofollow">http://www.apmsoftax.com</A> <br/>| @Editor&nbsp; &nbsp; : Eclipse(default) <br/>| @UPDATE&nbsp; &nbsp; : 2010-02-16 <br/>----------------------------------------------------------*/ <br/><br/># purpose : 이미지 효과주기<br/>class ImageGD<br/>{<br/>	private $filename;<br/><br/>	private $im;<br/>	private $quality =100;<br/>	private $bgcolor = 0x7fffffff;<br/>	private $fontsrc,$fontangle=0,$fontcolor = array(0,0,0),$fontsize = 20,$x=5,$y=5;<br/><br/>	# 시작<br/>	public function __construct($filename=null){<br/>		if(!file_exists($filename) && $filename)<br/>			 throw new Exception($filename);<br/>		<br/>		$this-&gt;filename = $filename;<br/>	}<br/><br/>	# void 퀄리티 설정<br/>	public function setCompressionQuality($quality){<br/>		$this-&gt;quality = $quality;<br/>	}<br/><br/>	# 칼라 채우기<br/>	public function setFilledrectangle($image,$x1,$y1,$x2,$y2,$color){<br/>		if(false === ($im = imagefilledrectangle($image,$x1,$y1,$x2,$y2,$color))) return false;<br/>	return $im;<br/>	}<br/><br/>	# 칼라 채우기 RGB<br/>	public function setColorallocate($image,$r,$g,$b){<br/>		if(0 &gt; ($im = imagecolorallocate($image,$r,$g,$b))) return false;<br/>	return $im;<br/>	}<br/><br/>	# alpha<br/>	public function setAlphablending($image,$boolean=false){<br/>		imagealphablending($image, $boolean);<br/>	}<br/>	# alpha<br/>	public function setSavealpha($image,$boolean=false){<br/>		imagesavealpha($image, $boolean);<br/>	}<br/><br/>	public function setFttext($image,$fontcolor,$text){<br/>		imagefttext($image,$this-&gt;fontsize,$this-&gt;fontangle,$this-&gt;x,$this-&gt;y,$fontcolor,$this-&gt;fontsrc,$text);<br/>	}<br/><br/>	# 폰트 파일 경로 지정<br/>	public function setFont($fontsrc){ $this-&gt;fontsrc = $fontsrc; }<br/><br/>	# 칼라 지정<br/>	public function setFontColor($color){ $this-&gt;color = $color; }<br/><br/>	# 폰트 사이즈<br/>	public function setFontSize($pixel){ $this-&gt;fontsize = $pixel; }<br/><br/>	# 배경칼라<br/>	public function setBgColor($bgcolor){ $this-&gt;bgcolor = $bgcolor; }<br/><br/>	# 폰트 앵글<br/>	public function setFontAngle($angle){ $this-&gt;fontangle = $angle; }<br/><br/>	# x:y 축<br/>	public function setXY($x,$y){ $this-&gt;x = $x; $this-&gt;y = $y; }<br/><br/>	# 텍스트 이미지 만들기<br/>	public function writeTextImage($width,$height,$text){<br/>		$this-&gt;im = self::createTrueImage($width,$height);<br/>		self::setAlphablending($this-&gt;im);<br/>		self::setFilledrectangle($this-&gt;im,0,0,$width,$height,$this-&gt;bgcolor);<br/>		<br/>		$fontcolor = self::setColorallocate($this-&gt;im,$this-&gt;fontcolor[0],$this-&gt;fontcolor[1],$this-&gt;fontcolor[2]);<br/>		self::setFttext($this-&gt;im,$fontcolor,$text);<br/>		self::setSavealpha($this-&gt;im,true);<br/>	}<br/><br/>	public function setAntialias($image,$boolean=false){<br/>		imageantialias($image,$boolean);<br/>	}<br/><br/>	public function setTTFText($image,$size,$x,$y,$color,$text){<br/>		imagettftext($image,$size,$this-&gt;fontangle,$x,$y,$color,$this-&gt;fontsrc,$text);<br/>	}<br/><br/>	# 그림자 입체 텍스트 쓰기<br/>	public function <br/>writeShadowText($width,$height,$text,$bgRGB=array(255,255,255),$mdRGB=array(128,128,128),$frontRGB=array(0,0,0))<br/>	{<br/>		$this-&gt;im = self::createTrueImage($width,$height);<br/><br/>		$bg = self::setColorallocate($this-&gt;im,$bgRGB[0],$bgRGB[1],$bgRGB[2]);<br/>		$middle = self::setColorallocate($this-&gt;im, $mdRGB[0],$mdRGB[1],$mdRGB[2]);<br/>		$front = self::setColorallocate($this-&gt;im, $frontRGB[0],$frontRGB[1],$frontRGB[2]);<br/>		self::setFilledrectangle($this-&gt;im,0,0,$width-1,$height-1,$bg);<br/>		<br/>		// Add some shadow to the text<br/>		self::setTTFText($this-&gt;im,$this-&gt;fontsize,$this-&gt;x,$this-&gt;y,$middle,$text);<br/>		<br/>		// Add the text<br/>		self::setTTFText($this-&gt;im,$this-&gt;fontsize,$this-&gt;x - 1,$this-&gt;y - 1,$front,$text);<br/>	}<br/><br/>	# 이미지 위에 텍스트 쓰기<br/>	public function combineImageText($width,$height,$text,$filename=null){<br/>		$this-&gt;im = self::createTrueImage($width,$height);<br/>		self::setAntialias($this-&gt;im,true);<br/>		$fontcolor = self::setColorallocate($this-&gt;im,$this-&gt;fontcolor[0],$this-&gt;fontcolor[1],$this-&gt;fontcolor[2]);<br/>		<br/>		$filename = ($filename) ? $filename : $this-&gt;filename;<br/>		if(!$filename) throw new Exception(__CLASS__,&#039;:&#039;.__METHOD__.&#039;:&#039;.__LINE__);<br/>		$image = self::readImage($filename);<br/>		self::copy($this-&gt;im,$image,0,0,0,0,$width,$height);<br/>		self::setTTFText($this-&gt;im,$this-&gt;fontsize,$this-&gt;x,$this-&gt;y,$fontcolor,$text);<br/>	}<br/><br/>	# margin_r : 오른쪽 여백, margin_b : 아래여백<br/>	public function filterWatermarks($marksfilename,$margin_r=10,$margin_b=10){<br/>		if(!file_exists($marksfilename))<br/>			 throw new Exception(__CLASS__.&#039;:&#039;.__METHOD__.&#039;:&#039;.$marksfilename);<br/>			 <br/>		$this-&gt;im = self::readImage($this-&gt;filename);<br/>		self::setAntialias($this-&gt;im,true);<br/>		$image = self::readImage($marksfilename);<br/>		<br/>		$width = imagesx($image);<br/>		$height = imagesy($image);<br/>		$im_x = imagesx($this-&gt;im) - $width - $marge_r;<br/>		$im_y = imagesy($this-&gt;im) - $height - $marge_b;<br/>		<br/>		self::copy($this-&gt;im,$image,$im_x,$im_y,0,0,$width,$height);<br/>	}<br/><br/>	# void 이미지 자르기 int width,height,x,y<br/>	public function cropImage($width,$height,$x,$y){<br/>		$this-&gt;im = self::createTrueImage($width,$height);<br/>		$image = self::readImage($this-&gt;filename);<br/>		if(self::copy($this-&gt;im,$image,0,0,$x,$y,$width,$height) === false)<br/>			 throw new Exception(__METHOD__);<br/>	}<br/><br/>	# void 이미지 자르기 (center) int width,height<br/>	public function cropThumbnailImage($width,$height){<br/>		$imgsize = self::getImageSize($this-&gt;filename);<br/>		<br/>		# 조정<br/>		$im_x = 0;<br/>		$im_y = 0;<br/>		$image_x = 0;<br/>		$image_y = 0;<br/><br/>		$wm = $imgsize-&gt;width/$width;<br/>		$hm = $imgsize-&gt;height/$height;<br/>		$h_height = $height/2;<br/>		$w_height = $width/2;<br/><br/>		if($imgsize-&gt;width &gt; $imgsize-&gt;height){<br/>			 $width = $imgsize-&gt;width / $hm;<br/>			 $half_width = $width / 2;<br/>			 $im_x = -($half_width - $w_height);<br/>		}else if(($imgsize-&gt;width &lt;$imgsize-&gt;height) || ($imgsize-&gt;wdith == $imgsize-&gt;height)){<br/>			 $height = $imgsize-&gt;height / $wm;<br/>			 $half_height = $height / 2;<br/>			 $im_y = $half_height - $h_height;<br/>		}<br/>		<br/>		$this-&gt;im = self::createTrueImage($width,$height);<br/>		$image = self::readImage($this-&gt;filename);<br/>		if(self::copyResampled($this-&gt;im,$image,$im_x,$im_y,$image_x,$image_y,$width,$height,$imgsize-&gt;width,$imgsize-&gt;height) === false)<br/>			 throw new Exception(__METHOD__);<br/>		return true;<br/>	}<br/><br/>	# 썸네일 이미지 만들기 int width, height<br/>	public function thumbnailImage($width,$height){<br/>		$imgsize = self::getImageSize($this-&gt;filename);<br/><br/>		# 썸네일 사진 사이즈 설정<br/>		if($imgsize-&gt;width&gt;$imgsize-&gt;height){<br/>			 $height= ceil(($imgsize-&gt;height*$width)/$imgsize-&gt;width);<br/>		}<br/>		else if($imgsize-&gt;width&lt;$imgsize-&gt;height || $imgsize-&gt;width == $imgsize-&gt;height){<br/>			 $width= ceil(($imgsize-&gt;width*$height)/$imgsize-&gt;height);<br/>		}<br/><br/>		$this-&gt;im = self::createTrueImage($width,$height);<br/>		$image = self::readImage($this-&gt;filename);<br/>		if(self::copyResampled($this-&gt;im, $image, 0,0,0,0,$width,$height,$imgsize-&gt;width,$imgsize-&gt;height)===false)<br/>			 throw new Exception(__METHOD__);<br/>		return true;<br/>	}<br/><br/>	# imagecopy<br/>	public function copy($im,$image,$im_x,$im_y,$image_x,$image_y,$width,$height){<br/>		if(imagecopy($im,$image,$im_x,$im_y,$image_x,$image_y,$width,$height) === false) return false;<br/>		return true;<br/>	}<br/><br/>	# imagemerge<br/>	public function copyMerge($im,$image,$im_x,$im_y,$image_x,$image_y,$width,$height,$pct){<br/>		if(!imagecopymerge($im,$image,$im_x,$im_y,$image_x,$image_y,$width,$height,$pct)) return false;<br/>		return true;<br/>	}<br/><br/>	# imagecopyresampled<br/>	public function copyResampled($im,$image,$im_x,$im_y,$image_x,$image_y,$width,$height,$oriwidth,$oriheight){<br/>		if(imagecopyresampled($im,$image,$im_x,$im_y,$image_x,$image_y,$width,$height,$oriwidth,$oriheight)===false) return false;<br/>	return true;<br/>	}<br/><br/>	# void : createtruecolor<br/>	public function createTrueImage($width,$height){<br/>		return $im = imagecreatetruecolor($width,$height);<br/>	}<br/><br/>	# void<br/>	public function readImage($filename){<br/>		$count = strrpos($filename,&#039;.&#039;);<br/>		$extention = strtolower(substr($filename, $count+1));<br/>		switch($extention){<br/>			 case &#039;gif&#039;: $image = imagecreatefromgif($filename); break;<br/>			 case &#039;png&#039;: $image = imagecreatefrompng($filename); break;<br/>			 case &#039;jpeg&#039;: <br/>			 case &#039;jpg&#039;: $image = imagecreatefromjpeg($filename); break;<br/>			 default : throw new Exception(&#039;i can&#039;t the image format&#039;); <br/>		}<br/>	return $image;<br/>	}<br/><br/>	# string filename<br/>	public function write($filename){<br/>		$count = strrpos($filename,&#039;.&#039;);<br/>		$extention = strtolower(substr($filename, $count+1));<br/>		switch($extention){<br/>			 case &#039;gif&#039;: imagegif($this-&gt;im,$filename); return true; break;<br/>			 case &#039;png&#039;: imagepng($this-&gt;im,$filename,($this-&gt;quality/10)-1); return true; break;<br/>			 case &#039;jpg&#039;:<br/>			 case &#039;jpeg&#039;: imagejpeg($this-&gt;im,$filename,$this-&gt;quality); return true; break;<br/>			 default : return false;<br/>		}<br/>	}<br/>	<br/>	# @ void : GD 버전<br/>	public function getVersion(){<br/>		if(function_exists(&#039;gd_info&#039;)){<br/>			 $info = gd_info();<br/>			 return preg_replace(&#039;/bundled \((.*) compatible\)/&#039;,&#039;\\1&#039;, $info[&#039;GD Version&#039;]);<br/>		}<br/>		return false;<br/>	}<br/><br/>	# 이미지 사이즈<br/>	public function getImageSize($filename=null){<br/>		$filename = ($filename) ? $filename : $this-&gt;filename;<br/>		$img_info = getImageSize($filename);<br/>		return json_decode(json_encode(array(&#039;width&#039;=&gt;$img_info[0],&#039;height&#039;=&gt;$img_info[1],&#039;mime&#039;=&gt;$img_info[&#039;mime&#039;])));<br/>	}<br/><br/>	# @ void<br/>	public function destroy(){ <br/>		if(is_resource($this-&gt;im)) imagedestroy($this-&gt;im);<br/>	}<br/><br/>	public function __destruct(){<br/>		self::destroy();<br/>	}<br/>}<br/>?&gt;[/CODE]<br/><br/>################ <br/>## 활용법 <br/>################ <br/>[CODE php]&lt;?php <br/>try{ <br/>	$gd = new ImageGD($_SERVER[&#039;DOCUMENT_ROOT&#039;].&#039;/testdirectory/P100119003.jpg&#039;); <br/>	echo &#039;gd버전: &#039;.$gd-&gt;getVersion().&#039;&lt;br /&gt;&#039;; <br/><br/>	# 사진 이미지 사이즈 <br/>	$img_info = $gd-&gt;getImageSize(); <br/>	echo &#039;원본 사진크기 : &#039;.$img_info-&gt;width.&#039; x &#039;.$img_info-&gt;height.&#039;&lt;br /&gt;&#039;; <br/><br/>	# 썸네일 이미지 만들기 <br/>	echo &#039;썸네일 이미지 만들기 120x120&lt;br /&gt;&#039;; <br/>	$gd-&gt;thumbnailImage(120,120); <br/>	$gd-&gt;write($_SERVER[&#039;DOCUMENT_ROOT&#039;].&#039;/testdirectory/thumb.jpg&#039;); <br/>	echo &#039;&lt;img src=&#034;/testdirectory/thumb.jpg&#034; /&gt;&lt;br /&gt;&#039;; <br/><br/>	# 이미지 자르기 <br/>	echo &#039;이미지 자르기 500x150,x:150,y:100&lt;br /&gt;&#039;; <br/>	$gd-&gt;cropImage(500,150,150,100); <br/>	$gd-&gt;write($_SERVER[&#039;DOCUMENT_ROOT&#039;].&#039;/testdirectory/crop.jpg&#039;); <br/>	echo &#039;&lt;img src=&#034;/testdirectory/crop.jpg&#034; /&gt;&lt;br /&gt;&#039;; <br/><br/>	# 이미지 자르기 썸네일 <br/>	echo &#039;이미지 자르기 썸네일 120x120&lt;br /&gt;&#039;; <br/>	$gd-&gt;cropThumbnailImage(120,120); <br/>	$gd-&gt;write($_SERVER[&#039;DOCUMENT_ROOT&#039;].&#039;/testdirectory/cropthumb.jpg&#039;); <br/>	echo &#039;&lt;img src=&#034;/testdirectory/cropthumb.jpg&#034; /&gt;&lt;br /&gt;&#039;; <br/>	 <br/>	# 필터 워터마크 찍기 <br/>	echo &#039;필터 워터마크 찍기&lt;br /&gt;&#039;; <br/>	$gd = new ImageGD($_SERVER[&#039;DOCUMENT_ROOT&#039;].&#039;/testdirectory/crop.jpg&#039;); <br/>	$gd-&gt;filterWatermarks($_SERVER[&#039;DOCUMENT_ROOT&#039;].&#039;/testdirectory/thumb.jpg&#039;); <br/>	$gd-&gt;write($_SERVER[&#039;DOCUMENT_ROOT&#039;].&#039;/testdirectory/watermark.jpg&#039;); <br/>	echo &#039;&lt;img src=&#034;/testdirectory/watermark.jpg&#034; /&gt;&lt;br /&gt;&#039;; <br/><br/>	echo &#039;타이틀 이미지 만들기&lt;br /&gt;&#039;; <br/>	$gd = new ImageGD(); <br/>	$gd-&gt;setBgColor(0x7fffffff); <br/>	$gd-&gt;setFont($_SERVER[&#039;DOCUMENT_ROOT&#039;].&#039;/HYSUPM.TTF&#039;); <br/>	$gd-&gt;setFontColor(array(0,0,0)); <br/>	$gd-&gt;setFontSize(20); <br/>	$gd-&gt;setXY(5,40); <br/>	$gd-&gt;writeTextImage(500,60,&#039;김형오 의장, 설 앞두고 용산노인복지관&#039;); <br/>	$gd-&gt;write($_SERVER[&#039;DOCUMENT_ROOT&#039;].&#039;/testdirectory/textimage.png&#039;); <br/>	echo &#039;&lt;img src=&#034;/testdirectory/textimage.png&#034; /&gt;&lt;br /&gt;&#039;; <br/><br/>	echo &#039;이미지 위에 글씨 넣기&lt;br /&gt;&#039;; <br/>	$gd = new ImageGD($_SERVER[&#039;DOCUMENT_ROOT&#039;].&#039;/testdirectory/watermark.jpg&#039;); <br/>	$gd-&gt;setFont($_SERVER[&#039;DOCUMENT_ROOT&#039;].&#039;/HYSUPM.TTF&#039;); <br/>	$gd-&gt;setFontColor(array(255,255,255)); <br/>	$gd-&gt;setFontSize(20); <br/>	$gd-&gt;setXY(5,40); <br/>	$gd-&gt;combineImageText(500,60,&#039;김형오 의장, 설 앞두고 용산노인복지관&#039;); <br/>	$gd-&gt;write($_SERVER[&#039;DOCUMENT_ROOT&#039;].&#039;/testdirectory/combineimagetext.png&#039;); <br/>	echo &#039;&lt;img src=&#034;/testdirectory/combineimagetext.png&#034; /&gt;&lt;br /&gt;&#039;; <br/><br/>	echo &#039;그림자 텍스트 이미지&lt;br /&gt;&#039;; <br/>	$gd = new ImageGD(); <br/>	$gd-&gt;setFont($_SERVER[&#039;DOCUMENT_ROOT&#039;].&#039;/HYMJRE.TTF&#039;); <br/>	$gd-&gt;setFontSize(20); <br/>	$gd-&gt;setXY(5,40); <br/>	$gd-&gt;writeShadowText(500,60,&#039;연중돌봄학교로 ‘제2의 개교’ 맞는 고창성송초&#039;); <br/>	$gd-&gt;write($_SERVER[&#039;DOCUMENT_ROOT&#039;].&#039;/testdirectory/shadowtext.png&#039;); <br/>	echo &#039;&lt;img src=&#034;/testdirectory/shadowtext.png&#034; /&gt;&lt;br /&gt;&#039;; <br/><br/>}catch(Exception $e){ <br/>	echo $e-&gt;getMessage(); <br/>}<br/>?&gt;[/CODE]<br/><br/><br/>########<br/># 붙임글<br/>########<br/>네 저거 초기작이라 아직 어설퍼서리... 지금 php5용 템플릿 클래스 만드느라 잠시 여기 뜸했네요 <br/>저거 php4 버전용으로 고치시면 되는데요 <br/>public, private,__construct 매직메소등 등 이런거 지우시고요 <br/>self:: 이거 4에서도 되었었나 아무튼 안되면 이걸로&nbsp; $this-&gt; 바꾸시고 <br/><br/>// json 부분은 배열로 바꾸세요 <br/>json_decode(json_encode(array(&#039;width&#039;=&gt;$img_info[0],&#039;height&#039;=&gt;$img_info[1],&#039;mime&#039;=&gt;$img_info[&#039;mime&#039;]))); <br/><br/>이렇게 <br/>return array(&#039;width&#039;=&gt;$img_info[0],&#039;height&#039;=&gt;$img_info[1],&#039;mime&#039;=&gt;$img_info[&#039;mime&#039;]); <br/><br/>이 부분은 <br/>$imgsize = self::getImageSize($this-&gt;filename); <br/>&nbsp; &nbsp; &nbsp; &nbsp; <br/>아래처럼 호출하던것을 <br/>$imgsize-&gt;width <br/>$imgsize-&gt;height <br/><br/>이렇게 <br/>$imgsize[&#039;width&#039;] <br/>사용하시면 됩니다.]]></description>
<dc:creator>MintState</dc:creator>
<dc:date>Sun, 17 Apr 2011 23:42:30 +0900</dc:date>
</item>


<item>
<title>xml 통신(수신) - Web 언어별</title>
<link>https://go3.co.kr/mintbbs/bbs/board.php?bo_table=php&amp;amp;wr_id=145</link>
<description><![CDATA[[U]xml 통신(수신) - Web 언어별[/U]xml 통신(수신) - Web 언어별<br/><br/>$HTTP_RAW_POST_DATA<br/>POST로 보낸 데이타를 받는 구문<br/>일반적으로 변수는 name과 valule의 쌍으로 이루어지나 그렇지 않을 경우가 있다.<br/>요즘 ajax 와 xml을 연동함에 있었어 이런 경우가 종종보여진다.<br/>이럴경우 사용하는 것이 $HTTP_RAW_POST_DATA 다.<br/><br/>이때 php.ini 환경설정은<br/>always_populate_raw_post_data On<br/>이 되어 있어야 한다. <br/><br/>[B]PHP 코드[/B]<br/>[CODE php]&lt;?php<br/>$method = $_GET[&#039;method&#039;];<br/>$name = $_GET[&#039;name&#039;];<br/>if ( isset ( $GLOBALS[&#034;HTTP_RAW_POST_DATA&#034;] ))<br/>{<br/>	// get bytearray<br/>	$pdf = $GLOBALS[&#034;HTTP_RAW_POST_DATA&#034;];<br/><br/>	// add headers for download dialog-box<br/>	header(&#039;Content-Type: application/pdf&#039;);<br/>	header(&#039;Content-Length: &#039;.strlen($pdf));<br/>	header(&#039;Content-disposition:&#039;.$method.&#039;; filename=&#034;&#039;.$name.&#039;&#034;&#039;);<br/>	echo $pdf;<br/>}<br/>else echo &#039;An error occured.&#039;;<br/>?&gt;[/CODE]<br/><br/>[B]ASP 코드[/B]<br/>[CODE]&lt;%<br/>Dim FileSavePath ,ext, filename<br/>FileSavePath = Server.MapPath(&#034;.&#034;)<br/>ext = Mid(attFile, InstrRev(attFile, &#034;.&#034;)+1)&nbsp; &#039;화일 확장자 추출<br/>filename = &#034;sample.&#034;& ext<br/><br/>intByteCnt = Request.TotalBytes			&#039;데이터 블록의 총바이트 값이 들어감<br/>strData&nbsp; = Request.BinaryRead(intByteCnt)	&#039;바이너리 스트림 데이타<br/><br/>If intByteCnt &gt; 1 Then<br/>&#039;----------------------------------------------<br/>&#039; Binary 데이타를받아서 server에 화일로 저장시킴.<br/>&#039;----------------------------------------------<br/>Set objStream = CreateObject(&#034;ADODB.Stream&#034;)<br/>	objStream.Open()<br/>	objStream.Type = 1&nbsp; &#039; 1: binary 타입을 의미한다.<br/>	objStream.Write strData<br/>	objStream.SaveToFile FileSavePath &&#034;\&#034;& filename, 2&nbsp; &#039;2:덮어쓰기 허용<br/>	Set objStream = nothing <br/>End if<br/>%&gt;[/CODE]<br/><br/>[B]Java 코드[/B]<br/>[CODE]import javax.servlet.*;<br/>import javax.servlet.http.*;<br/>import java.io.*;<br/><br/>public class CreatePDFServlet extends HttpServlet<br/>{<br/>	public void doPost(HttpServletRequest req, HttpServletResponse resp)<br/>	throws ServletException, IOException<br/>	{<br/>		doGet(req, resp);<br/>	}<br/>	public void doGet(HttpServletRequest req, HttpServletResponse resp)<br/>	throws ServletException, IOException<br/>	{<br/>		int i = 0;<br/>		int k = 0;<br/>		int maxLength = req.getContentLength();<br/>		byte[] bytes = new byte[maxLength];<br/>		String method = req.getParameter(&#034;method&#034;);<br/>		String name = req.getParameter(&#034;name&#034;);<br/>		ServletInputStream si = req.getInputStream();<br/>	while (true)<br/>	{<br/>		k = si.read(bytes,i,maxLength);<br/>		i += k;<br/>		if (k &#038;lt;= 0)<br/>		break;<br/>	}<br/>	if (bytes != null)<br/>	{<br/>		ServletOutputStream stream = resp.getOutputStream();<br/>		resp.setContentType(&#034;application/pdf&#034;);<br/>		resp.setContentLength(bytes.length);<br/>		resp.setHeader(&#034;Content-Disposition&#034;,method + &#034;;filename=&#034; + name);<br/>		stream.write(bytes);<br/>		stream.flush();<br/>		stream.close();<br/>	}<br/>	else<br/>	{<br/>		resp.setContentType(&#034;text&#034;);<br/>		resp.getWriter().write(&#034;bytes is null&#034;);<br/>	}<br/>	}<br/>}[/CODE]<br/><br/>출처 : <A HREF="http://devman.tistory.com/118" TARGET="_blank"  rel="nofollow">http://devman.tistory.com/118</A>]]></description>
<dc:creator>MintState</dc:creator>
<dc:date>Mon, 14 Mar 2011 16:37:16 +0900</dc:date>
</item>


<item>
<title>무조건 알아야 할 PHP 속도 테스트 14 가지</title>
<link>https://go3.co.kr/mintbbs/bbs/board.php?bo_table=php&amp;amp;wr_id=144</link>
<description><![CDATA[[U]무조건 알아야 할 PHP 속도 테스트 14 가지[/U]<br/><br/>PHP로 코딩 함에 있어서 알아야 할 속도 테스트 입니다. <br/>조금더 빠른 PHP 속도를 유지 하기 위한 것이죠 ^^ <br/><br/>작은 것이 모여서, 대따 오랜 시간이 걸릴 수 가 있는 것 입니다. !! <br/>되도록이면 속도가 빠른 것을 사용하시는 것이 좋습니다. <br/><br/>물론 함수 마다 기능 마다 장단이 있지만요....^^ <br/><br/><br/>다른 비교가 있으면 알려주셍 ^^ 답변 달아 주세용 ^^ <br/><br/>계속 적으로 업글 됩니다. 현재 14가지 !!!! <br/><br/><br/>========================================================================== <br/>★ mysql 총 게시물 수 세기 <br/><br/>$numresults=mysql_query(&#034;select code from $board&#034;); <br/>$numrows=mysql_num_rows($numresults); <br/>2초 이상 ...게시물 10만개 <br/><br/>VS <br/><br/>$numresults=mysql_query(&#034;select count(code) as code from $board&#034;); <br/>$row_num=mysql_fetch_array($numresults); <br/>$numrows=$row_num[code]; <br/>0.2&nbsp; ...게시물 10만개 <br/><br/>아래것이 훠얼씬 빠름다.. <br/>도대체 mysql_num_row() 는 왜 만들어 놓은 것일까용??? <br/><br/><br/>========================================================================== <br/>★ mysql_fetch_row&nbsp; &gt; mysql_fetch_array &gt;&gt;&gt; mysql_result <br/><br/><br/>입니다. <br/><br/>row 가 array 보다 약간 빠르고, result 보다는 훠얼씬 빠름당 ^^ <br/><br/>row 는 불편한게 숫자로 칼럼을 불러와서 불편합니다. <br/>array 가 약간 느리지만, 문자 칼럼을 불러 올 수 있으니 array 쓰는 것도 양호 ^^ <br/><br/>아직도 mysql_result() 를 사용하시나요? <br/><br/>========================================================================== <br/>★print , echo ,printf 함수 속도 비교 <br/>HTML 출력 &gt;&gt; echo &gt; print &gt;&gt; printf <br/><br/><br/>print 와 printf 함수는 복잡한곳에 적격이고, 약간 느리다. <br/><br/>echo 는 단순한곳에 적격이고...빠르다. <br/>printf 는 형식화된 출력을 해주므로 그래도 좋죠 ^^ <br/><br/>========================================================================== <br/>★&nbsp; 인라인 <br/><br/>&nbsp;a.php <br/>&lt;? <br/>$aa=&#034;sdsdsdsd&#034;; <br/>echo (&#034;&lt;table&gt; <br/>&nbsp;&lt;td&gt; $aa &lt;/td&gt; <br/>&lt;/table&gt;&#034;); <br/>?&gt; <br/><br/>&nbsp;위 랑.. <br/><br/>&nbsp;b.php <br/>&lt;? $aa=&#034;sdsdsdsd&#034;; ?&gt; <br/>&lt;table&gt; <br/>&lt;td&gt;&lt;? echo $aa; ?&gt;&lt;/td&gt; <br/>&lt;/table&gt; <br/><br/>&nbsp;랑 도대체 어케 코딩 하느냐죠 ? <br/><br/>솔직히 코딩은 a.php 가 편합니다. <br/>&lt;? ?&gt; 를 한번 만 쓰니까 효율적일 수 있습니당.. <br/><br/>그러나 아무리 아무리 PHP가 빠르다고 해도 HTML 이 더 빠릅니당.. !!! <br/><br/>쿠쿠쿠 <br/><br/>b.php 처럼 코딩 하는 습관을 가지세용 ^^ <br/><br/>========================================================================== <br/>★ zend cache , APC ,Bware 캐쉬 비교 <br/>Zend cache &gt; APC &gt; Bware <br/><br/>zend cache 는 캐쉬 입니다. 울나라에서 포탈에서도 몇군데 사용하죠. <br/>PHP 프로그램 변환 없이 속도를 빠르게 해 줍니다. ^^ <br/><br/>zend cache 를 살 돈이 없으시다구용? <br/>그러면 APC 나 zend optimizer 를 반드쉬 설치 하세용 !! <br/><br/>■ 그런디 Zend Cache 만한 무료 캐쉬가 나왔다고 합니당...^^ <br/><A HREF="http://www.php" TARGET="_blank"  rel="nofollow">http://www.php</A> -accelerator.co.uk/index.php ; <br/><br/><br/>========================================================================== <br/>★ ereg_replace , preg_replace 정규표현식 <br/>ereg_replace () 가 장난 아니게 느림다. <br/>40개 정도 변환 하는데 1초나 걸려요.preg_replace 는 0.3초 정도요. <br/><br/>되도록이면 preg_replace() 를 사용하세요 !!! <br/><br/>www.php.net/preg_replace <br/><br/><br/>========================================================================== <br/>★ foreach , list 함수 속도 차이 35% <br/><br/>foreach($string as $a);&nbsp; &gt;&gt;&gt;&nbsp; while(list(,$a) = each($string)); <br/><br/>foreach() 를 사용하는 것이 35% 정도 빠릅니다...!! <br/><br/><br/>========================================================================== <br/>★mysql_connect Vs mysql_pconnect <br/><br/>서로 장단이 있다 합니다. <br/><br/>mysql_pconnect 가 더 빠르다고 합니다. <br/>persistant <br/><br/>메뉴얼에 영구적인 이렇게 되어 있으니까요.. <br/>일정시간 동안 mysql 을 열어 놓기 때문에, 다시 열 필요가 없어서 빠르다고 합니다. <br/><br/>단점은 계속 열기 때문에 메모리를 많이 잡아 먹슴당...^^ <br/>mysql_pconnect 경우는 최소 메모리가 1G 이상 되어야 사용하시는 것이 좋습니다. <br/><br/>========================================================================== <br/>★ 큰따옴표(&#034;) , 작은 따옴표(&#039;) <br/><br/>큰따옴표는 PHP가 파싱을 합니다. 그러나 작은 따옴표는 파싱을 하지 않습니다. <br/>작은 따옴표를 사용하시는 것이 빠릅니다. <br/><br/>코딩시 echo &#039; test &#039;.$aaa.&#039; tood &#039;; <br/>요런식으로 하시는 게 가장 빠름당 !! <br/><br/>========================================================================== <br/>★ mysql 데이터 저장 공간 크기 ? <br/><br/><br/>id int(11) unsigned NOT NULL auto_increment, <br/>&nbsp; bbs smallint(5) unsigned NOT NULL, <br/>&nbsp; lens mediumint(8) unsigned NOT NULL, <br/>&nbsp; <br/><br/>int 도 무자게 많슴당.. <br/>각각의 크기에 맞게 하는 것이 속도가 빨라 집니당 ^^ <br/><br/>not null 를 주는 것도 속도가 빨라 집니당.. <br/><br/>작은 사이트 조회수 경우 1만을 넘기도 힘듭니다. 그럴 경우 smallint 를 사용하시면 됩니다. <br/><br/>========================================================================== <br/>★ where 절에 모든 것은 인덱스를 걸어라 !!! <br/>mysql 에서 쿼리시에 where 절에 사용되는 비교의 칼럼은 반드쉬 인덱스를 거세용 !!! <br/><br/>mysql 인덱스 가 여러 분들의 게시판 속도를 업 시켜 줍니당 !! <br/><br/><br/>========================================================================== <br/>★메인페이지에서 속도를 빠르게 하려면, .htm 으로 만드는 것이 좋습니다. <br/><br/>그러니까..제 사이트 페이지 오른쪽 에는 모두 최신 게시물로 디비를 불러오는 부분 <br/>입니다. <br/><br/>디비 연결은 부하를 줄 수 있습니다. <br/><br/>그러니까..이예는 사이트가 상당히 활성화된 사이트일 경우 입니다. <br/><br/>하루에 2번 정도 .htm 으로 만들어 페이지를 업시키는 것이 좋습니다. <br/>아무리 PHP가 빨라도 HTML 보다는 빠르지 않습니다.. !!! <br/><br/>그러기 위해서는 ★cron 를 알아야 합니다 PHP강좌 게시판에서 cron 으로 검색하세용 !! <br/>윈도우 사용자는 멀 쓰는지 잘 모르겠슴당...아시면 답글 부탁&nbsp; ^^ <br/><br/><br/>========================================================================== <br/>★ 초보자 Vs 전문가 <br/><br/>www.zend.com 에서 제가 2000년 5월에 퍼온건데용 ^^&nbsp; <br/>함 주석을 붙일까 해서용^^ <br/><br/><br/>Beginner vs Experienced&nbsp; <br/>Author:&nbsp; Boaz Yahav&nbsp; <br/>Date&nbsp; 23/05/2000&nbsp; <br/><br/>Beginner : echo &#034;$var&#034;;&nbsp; <br/>Experienced : echo $var;&nbsp; <br/><br/><br/>Beginner:echo &#034;&lt;a href=\&#034; <A HREF="http://www.php.net" TARGET="_blank"  rel="nofollow">http://www.php.net</A>\&#034;&gt;PHP&lt;/a&gt;&#034;;&nbsp; ; <br/>Experienced : ?&gt;&lt;a href=&#034; <A HREF="http://www.php.net&#034;" TARGET="_blank"  rel="nofollow">http://www.php.net&#034;</A>&gt;PHP&lt;/a&gt;&lt;?&nbsp; ... ?&gt;&nbsp; ; <br/><br/>◆ &#034;(따옴표) 가 굉장히 중요한것이라는 한 대목이죵 ^^ <br/>전 보통의 경우 php 변수 값이 들어갈 경우는 초보자 처럼 쓰구요 ^^ 안들어 갈 경우 는 전문가 처럼 씀다. <br/><br/>Beginner : $a[0]=1; $a[1]=2; $a[2]=3;&nbsp; <br/>Experienced : $a = array(1,2,3, 1);&nbsp; <br/>둘다 사용하는 데요. 전문가 쪽이 편함다. ^^ <br/><br/>Beginner : if($a&gt;1) { $b=2; } else { $b=3; }&nbsp; <br/>Experienced : $b = ($a&gt;1) ? 2:3;&nbsp; <br/>요건 완존히 소스 어렵게 짜는 넘이 최고 라는 소리 같네용 ^^ <br/>전문가 쪽것은 C 언어 에서 배웠는데도 역시 전 if 씀다. ^^ <br/><br/>Beginner : $result=mysql_query(...);&nbsp; <br/>Experienced: $result=mysql_query(...) OR die&nbsp; <br/>&nbsp; &nbsp; &nbsp; &nbsp; (mysql_error());&nbsp; <br/><br/>요즘 들어 새삼 전문가 쪽으로 씀다.^^ <br/>보통의 경우 <br/><br/>$result=mysql_query(...)&nbsp; <br/>if (!$result) <br/>{ <br/>&nbsp;echo error().&#034;&lt;P&gt;&#034;; <br/>&nbsp;echo errno(); <br/>} <br/>이렇게 사용함다. ^^ <br/><br/>or 이 설명이고 no 가 에러 번호 일 검다. ^^ <br/><br/>========================================================================== <br/>★MySQL,ADODB,PHPLib,PEAR 벤치마킹&nbsp; <br/><br/>ADODB &gt; PHPlib &gt; PEAR <br/>&nbsp; <br/>MySQL&nbsp; &nbsp; 1.14&nbsp; &nbsp; &nbsp; - <br/>ADODB&nbsp; &nbsp; 1.45&nbsp; &nbsp; 27% <br/>PHPLib&nbsp; &nbsp; 1.60&nbsp; &nbsp; 40% <br/>PEAR&nbsp; &nbsp; 2.87&nbsp; &nbsp; 152% (fetchInto) <br/><br/>MySQL,ADODB,PHPLib,PEAR&nbsp; 는 모두 데이터베이스 인가요? 당근 아닙니다. <br/>MySQL만 데이터베이스 구요. <br/>ADODB,PHPLib,PEAR 는 PHP 프로그램 입니다. <br/><br/>3개 다 MySQL연결을 편하게 하는 클래스 프로그램 입니다. <br/>그런디 벤치 마킹 결과 MySQL 에서 직접 쿼리하는 것 다음으로 ADODB 가 뽑혔슴당 ^^ <br/><br/>PEAR 가 굉장히 늦군요. PEAR DB 나 ADODB 를 사용해 보았는데, 움..역시나 ADODB 가 좋군요. <br/>오라클, mysql , ms sql 연결시 1개의 API 만 사용할 수 있는 프로그램 들 이 PEAR 과 ADODB 입니당 ^^ <br/>========================================================================== <br/>★ 속도 테스트는 어케 하는가 ? microtime() 사용하면 됩니다. <br/><br/><br/>&lt;? <br/><br/>function pageTime($page) { <br/>&nbsp;$mstart = explode(&#034; &#034;, $m); <br/>&nbsp;$mend = explode(&#034; &#034;, microtime()); <br/>&nbsp;$mtime = ($mend[1] - $mstart[1]) + ($mend[0] - $mstart[0]); <br/><br/>&nbsp;echo &#034; $m[1]&nbsp; $mend[1]&lt;P&gt;&#034;; <br/>&nbsp;echo &#034; $m[0]&nbsp; $mend[0]&lt;P&gt;&#034;; <br/><br/>&nbsp;print(&#034;tood.net 페이지 로딩 시간 : &#034; . $mtime . &#034; microseconds&#034;); <br/>} <br/>pageTime(basename($PHP_SELF)); <br/>?&gt; <br/>&nbsp; <br/>========================================================================== <br/>★ <br/><br/>========================================================================== <br/><br/>참고 사이트 <br/><A HREF="http://www.tood.net" TARGET="_blank"  rel="nofollow">http://www.tood.net</A> <br/><A HREF="http://www.zend.com" TARGET="_blank"  rel="nofollow">http://www.zend.com</A> <br/><A HREF="http://www.php.net" TARGET="_blank"  rel="nofollow">http://www.php.net</A> <br/><A HREF="http://www.php.lt/benchmark/phpbench.php" TARGET="_blank"  rel="nofollow">http://www.php.lt/benchmark/phpbench.php</A> <br/><A HREF="http://www.phpbuilder.com" TARGET="_blank"  rel="nofollow">http://www.phpbuilder.com</A> <br/><A HREF="http://www.phpbuilder.com/columns/piergiorgio20010321.php3?print_mode=1" TARGET="_blank"  rel="nofollow">http://www.phpbuilder.com/columns/piergiorgio20010321.php3?print_mode=1</A><br/><br/><br/>ps. 출처는 모르겠네요. 웹에서 떠도는 자료입니다.]]></description>
<dc:creator>MintState</dc:creator>
<dc:date>Fri, 04 Mar 2011 14:11:14 +0900</dc:date>
</item>


<item>
<title>PHP를 이용하여 MYSQL Sleep 프로세스 죽이기</title>
<link>https://go3.co.kr/mintbbs/bbs/board.php?bo_table=php&amp;amp;wr_id=143</link>
<description><![CDATA[PHP에서 자동으로 MYSQL의 디비를 닫아(Closed)주기 때문에 굳이 mysql_close($dbconn); 를 쓸 필요는 없습니다.<br/>그러나 MYSQL의 Sleep 프로레스가 너무 많이 늘어나는 것을 볼수 있습니다.<br/>이것은 MYSQL의 wait timeout의 시간을 너무 많이 주어서 생기는 문제입니다.<br/>서버마다 wait timeout값을 적정값을 설정해야 합니다.<br/>[URL=http://yesyo.com/mintbbs/bbs/board.php?bo_table=linux&wr_id=241][B][MySQL] time out(wait_timeout) 계산과 설정[/B][/URL] - 여기를 참고하세요<br/><br/>my.cnf 파일을 수정하면 됩니다.<br/>[URL=http://yesyo.com/mintbbs/bbs/board.php?bo_table=linux&wr_id=331][B]my.cnf 설정파일[/B][/URL] - 여기를 참고하세요<br/>램이 2기가인경우 아래 정도입니다.<br/>[U]max_connections = 200<br/>wait_timeout = 30[/U]<br/><br/>max_connections 의 기본값은 100 이고 wait_timeout 의 기본값은 28,800 입니다.<br/><br/>다음과 같이 safe_mysqld을 실행시킬때 wait_timeout을 지정하는 방법도 있습니다.<br/>[U]safe_mysqld -O wait_timeout=30[/U]<br/><br/>또한 아래와 값이 PHP파일을 만들고 cron으로 주기적으로 돌려도 될것 같습니다.<br/>[CODE php]&lt;?<br/>define(&#039;MAX_SLEEP_TIME&#039;, 120); <br/>$dbconn = @mysql_connect($dbConfig[&#039;host&#039;],$dbConfig[&#039;user&#039;],$dbConfig[&#039;pass&#039;]);<br/><br/>$result = mysql_list_processes($dbconn);<br/>//mysql_list_processes 대신 아래와 같이 써도 됩니다.<br/>//$result = mysql_query(&#034;SHOW PROCESSLIST&#034;, $connect); <br/>while ($row = mysql_fetch_assoc($result)){<br/>&nbsp; &nbsp; printf(&#034;%s %s %s %s %s\n&lt;br /&gt;&#034;, $row[&#034;Id&#034;], $row[&#034;Host&#034;], $row[&#034;db&#034;],<br/>&nbsp; &nbsp; &nbsp; &nbsp; $row[&#034;Command&#034;], $row[&#034;Time&#034;]);<br/>		if ($row[&#034;Command&#034;] == &#034;Sleep&#034;&nbsp; && $row[&#034;Time&#034;] &gt; MAX_SLEEP_TIME) { <br/>				mysql_query(&#034;KILL &#034; . $row[&#034;Id&#034;], $dbconn);<br/>				echo &#034;KILL ID : &#034;.$row[&#034;Id&#034;].&#034;&lt;br /&gt;&#034;;<br/>		}<br/>}<br/>mysql_free_result($result);<br/>mysql_close($dbconn);<br/>?&gt;[/CODE]<br/><br/>참고로 어느분이 perl로 짜 놓으신 것입니다.<br/>[CODE html]#!/usr/bin/perl<br/>###############################################################################<br/># MySQL 에서 Sleep 프로세스 죽이기<br/># 2003.02 by Oh Jung Joon<br/>###############################################################################<br/><br/>###############################################################################<br/># Variables<br/>###############################################################################<br/>use DBI;<br/><br/>$hostname = &#034;localhost&#034;; <br/>$database = &#034;mysql&#034;;&nbsp; <br/>$mysql_id = &#034;root&#034;; <br/>$mysql_pw = &#034;password&#034;; <br/><br/>$dsn = &#034;DBI:mysql:database=$database;host=$hostname&#034;; <br/>###############################################################################<br/>&nbsp;<br/>&nbsp;$dbh = DBI-&gt;connect($dsn,$mysql_id,$mysql_pw) <br/>&nbsp; or die &#034;Unable to connect to contacts Database: $dbh-&gt;errstr\n&#034;;<br/><br/>&nbsp;$query=&#034;show processlist&#034;;<br/>&nbsp;$cursor=$dbh-&gt;prepare($query);<br/>&nbsp;$cursor-&gt;execute;<br/><br/>&nbsp;while (@field = $cursor-&gt;fetchrow)<br/>&nbsp;{<br/>&nbsp; ($id,$user,$host,$db,$command,$time,$state,$info)=@field;<br/>&nbsp; print &#034;[$id | $user | $host | $db | $command | $time | $state | $info] &#034;;<br/>&nbsp; if ( ($command eq &#039;Sleep&#039;) && ($time &gt; 500) )<br/>&nbsp; {<br/>&nbsp;  $query2=&#034;kill $id&#034;;<br/>&nbsp;  $dbh-&gt;do($query2);<br/>&nbsp;  print &#034;&nbsp; == &gt; Killed&#034;;<br/>&nbsp; }<br/>&nbsp; print &#034;\n&#034;;<br/>&nbsp;}<br/>&nbsp;$cursor-&gt;finish;<br/>&nbsp;$dbh-&gt;disconnect;<br/>&nbsp;exit;[/CODE]]]></description>
<dc:creator>MintState</dc:creator>
<dc:date>Tue, 18 Jan 2011 22:10:58 +0900</dc:date>
</item>


<item>
<title>youtube 주소로 정보 반환</title>
<link>https://go3.co.kr/mintbbs/bbs/board.php?bo_table=php&amp;amp;wr_id=142</link>
<description><![CDATA[[U]youtube 주소로 정보 반환[/U]<br/><br/>Youtube 동영상 주소는 다음과 같습니다.<br/><A HREF="http://www.youtube.com/watch?v=KW6YL4K92jk" TARGET="_blank"  rel="nofollow">http://www.youtube.com/watch?v=KW6YL4K92jk</A><br/><br/>&#034;KW6YL4K92jk&#034; 가 동영상 고유 아이디입니다.<br/>따라서 아래와 같은 정보를 얻을 수 있습니다.<br/><br/>* 동영상 주소<br/>- <A HREF="http://www.youtube.com/v/KW6YL4K92jk" TARGET="_blank"  rel="nofollow">http://www.youtube.com/v/KW6YL4K92jk</A><br/>&nbsp; 동영상 주소를 이용하여서 embed를 이용하여 동영상 플레이어 표시하면 됩니다.<br/>[CODE html]&lt;object width=&#034;425&#034; height=&#034;344&#034;&gt;<br/>	&lt;param name=&#034;movie&#034; value=&#034;<A HREF="http://www.youtube.com/v/KW6YL4K92jk&hl=ko_KR&fs=1&#034;" TARGET="_blank"  rel="nofollow">http://www.youtube.com/v/KW6YL4K92jk&hl=ko_KR&fs=1&#034;</A>&gt;&lt;/param&gt;<br/>	&lt;param name=&#034;allowFullScreen&#034; value=&#034;true&#034;&gt;&lt;/param&gt;<br/>	&lt;param name=&#034;allowscriptaccess&#034; value=&#034;always&#034;&gt;&lt;/param&gt;<br/>	&lt;embed src=&#034;<A HREF="http://www.youtube.com/v/KW6YL4K92jk&hl=ko_KR&fs=1&#034;" TARGET="_blank"  rel="nofollow">http://www.youtube.com/v/KW6YL4K92jk&hl=ko_KR&fs=1&#034;</A> type=&#034;application/x-shockwave-flash&#034; allowscriptaccess=&#034;always&#034; allowfullscreen=&#034;true&#034; width=&#034;425&#034; height=&#034;344&#034;&gt;&lt;/embed&gt;<br/>&lt;/object&gt;[/CODE]<br/><br/>* 이미지(Thumbnail) - 5개<br/>- <A HREF="http://i1.ytimg.com/vi/KW6YL4K92jk/default.jpg" TARGET="_blank"  rel="nofollow">http://i1.ytimg.com/vi/KW6YL4K92jk/default.jpg</A><br/>- <A HREF="http://i1.ytimg.com/vi/KW6YL4K92jk/1.jpg" TARGET="_blank"  rel="nofollow">http://i1.ytimg.com/vi/KW6YL4K92jk/1.jpg</A><br/>- <A HREF="http://i1.ytimg.com/vi/KW6YL4K92jk/2.jpg" TARGET="_blank"  rel="nofollow">http://i1.ytimg.com/vi/KW6YL4K92jk/2.jpg</A><br/>- <A HREF="http://i1.ytimg.com/vi/KW6YL4K92jk/3.jpg" TARGET="_blank"  rel="nofollow">http://i1.ytimg.com/vi/KW6YL4K92jk/3.jpg</A><br/>- <A HREF="http://i1.ytimg.com/vi/KW6YL4K92jk/4.jpg" TARGET="_blank"  rel="nofollow">http://i1.ytimg.com/vi/KW6YL4K92jk/4.jpg</A><br/><br/>ps. 클레스로 만들어진 소스가 있길래 첨부합니다.]]></description>
<dc:creator>MintState</dc:creator>
<dc:date>Fri, 02 Jul 2010 13:25:05 +0900</dc:date>
</item>

</channel>
</rss>
