Javascript parseInt 버그 "08", "09"

Javascript parseInt 버그 "08", "09"


프로젝트하면서 야구 시간표 때문에 달력을 만든 적이 있습니다. 

유독 8일과 9일에서만 에러가 나더군요. 다른데는 다 괜찮은데 

일부 스마트폰에서 그런 에러가 발생하는겁니다. 


문자열 "07"까지는 7로 잘 변환이 되지만 

문자열 "08","09"만 0으로 변환이 되는 

이상한 버그가 있습니다. 


이게 대다수에서는 8, 9로 잘 변환이 되지만 

일 부 기기에서만 0으로 변환이 됩니다. 


해결방법은 앞에 "0" 제거하고 변환하시면됩니다. 


[협찬] http://phpjs.org/ 

  

function intval(mixed_var, base){ 

var type = typeof(mixed_var); 

if(type==='boolean'){ 

return (mixed_var)? 1: 0; 

} else if(type==='string'){ 

tmp = parseInt(mixed_var, base || 10); 

return (isNaN(tmp) || !isFinite(tmp))? 0: tmp; 

} else if(type==='number' && isFinite(mixed_var)){ 

return Math.floor(mixed_var); 

} else{ 

return 0; 

}


네이버 블로그 API 이미지까지 업로드

네이버 블로그 API 이미지까지 업로드


제목보면 뭔가 이상하지만 삽질의 결과물로 인한것이라..../먼산 


서버에 있는 데이터를 네이버 블로그API를 이용하여 글을 올리게 되면 이미지는 서버에 저장된 채로 글만 올라갔었는데 


이것저것 뒤적 뒤적 하다가 어찌어찌 연결되었습니다./먼산 


사용하시는 분들에게 도움이 되었으면 좋겠네요 =ㅅ=ㅋ 


참고로 category의 지정시 없는걸로 하면 아마도 기본 설정으로 저장되는걸로 알고 있습니다. 

(물론 확실하지 않아요/먼산) 


기타 질문도 받습니다. 


http://www.xmlrpc.com/spec 

여기서 xmlrpc.inc 파일 받는거 잊으시면 안됩니다. 


P.S. 제가 작업한 서버쪽은 이상하게 name time out이 자주 뜹니다. 

curl 문제인거 같은데 제가 서버쪽을 잘 몰라서...../먼산 

아마 속도 때문에 그런거 같으니 문제 되시는 분들은 timeout을 늘려주세요< 


P.S.2 지금보니 일부 쓸모없는 echo가 남아있네요.... 어차피 주석처리 되어 있지만 테스트 하실때 써먹../퍽!

[ ▼ 참고 Source ]


include "xmlrpc/lib/xmlrpc.inc" ; // 이 부분은 다 아실테니...
$rs << DB에서 불러온 데이터 입니다.

$tit = $rs[0][title] ;
$tex = $rs[0][text] ;
$loof_chk = 0 ;

$url = "https://api.blog.naver.com/xmlrpc";
$blogid = "ID"; << 어차피 같은 네이버 아이디니...../먼산
$id = "ID";
$pw = "api키 값"; 블로그에서 할당받은 API KEY

// 네이버 api 이미지 업로드 함수
function upload_image( $url , $blogid , $id , $pw , $tit , $tex ) {

	$api_url = $url ;
	$blog_user = $id ;
	$blog_passwd = $pw ;
	preg_match_all("/<img[^>]*src=[\"']?([^>\"']+)[\"']?[^>]*>/i", $tex , $out ) ;
	preg_match_all("/<img[^>]*src=[\"']?([^>\"']+)[\"']?[^>]*>/ui", $tex , $out2 ) ;
	$cmm = count($out[1]) ;
//	echo "".count($out[1]) ;
	if ( $cmm > 0 )
	{
		for ( $i = 0 ; $i < $cmm ; $i++ )
		{
			$im = "http://서버주소".$out[1][$i] ;

			$imgbit = file_get_contents($im, FILE_BINARY);
			$img = new xmlrpcval(
			array (
			'bits' => new xmlrpcval($imgbit, 'base64'),
			'type' => new xmlrpcval('image/jpeg', 'string'),
			'name' => new xmlrpcval(basename($im), 'string')
			), 'struct');

			$c = new xmlrpc_client($api_url);
//			$c->debug = true; // Uncomment this line for debugging info
			$c->setSSLVerifyPeer(false);

			$x = new xmlrpcmsg("metaWeblog.newMediaObject");
			$x->addParam(new xmlrpcval($blog_user, 'string'));
			$x->addParam(new xmlrpcval($blog_user, 'string'));
			$x->addParam(new xmlrpcval($blog_passwd, 'string'));
			$x->addParam($img);

			$c->return_type = 'phpvals';
			$r =$c->send($x, 3, 'https');
			$message->request_charset_encoding = "UTF-8";
			$tex = str_replace($out2[1][$i], $r->val[url] , $tex ) ;
			if ( $r->val[errno] == 0 and $r->errno != 8 ) { $loof_chk++ ; }
//			echo $tex."".$i."loof_chk = ".$loof_chk."" ;
//			print_r($r); // 결과 부분입니다. 에러체크용으로도 사용할 수 있습니다.
//			echo "" ;

			if ( ( $r->errno != 8 and $r->val[errno] == 0 ) and ( $i == ( $cmm - 1 ) and $loof_chk == $cmm ) )//이미지가 다량존재시 하나라도 업로드 실패했을 경우에 대비한 if 문입니다.
			{ return m3_naver_post( $url , $blogid , $id , $pw , $tit , $tex , $_GET['position']) ; } //$_GET['position']은 전 페이지에서 카테고리설정을 위해 받는 부분입니다.
			else if ( $i == ( $cmm - 1 ) ) { echo "<script>alert('업로드에 실패하였습니다.');document.getElementById('emd').value = 'fail';</script>" ; }
		}
	}
	else { return m3_naver_post( $url , $blogid , $id , $pw , $tit , $tex , $_GET['position']) ; }
}

// 네이버 api 포스팅 올리는 함수
function m3_simple_metaweblog($url, $blogid, $id, $pw, $title, $description, $category, $publish=true) {
	$GLOBALS["xmlrpc_internalencoding"] = "UTF-8";
	$client = new xmlrpc_client($url);
	//$client->setdebug(1);
	$struct = array(
		'title' => new xmlrpcval($title, "string"),
		'description' => new xmlrpcval($description, "string"),
		'categories' => new xmlrpcval($category, "string") 
		);
	$message = new xmlrpcmsg("metaWeblog.newPost", array(
		new xmlrpcval($blogid, "string"),
		new xmlrpcval($id, "string"),
		new xmlrpcval($pw, "string"),
		new xmlrpcval($struct, "struct"),
		new xmlrpcval($publish, "boolean")
		)
	);
	return $response = $client->send($message);
}

// 네이버 직접 포스팅 함수
function m3_naver_post( $url , $blogid , $id , $pw , $title, $description, $category) {
	global $api;

	return $response = m3_simple_metaweblog($url, $blogid, $id, $pw, $title, $description, $category);
}

$return = upload_image( $url , $blogid , $id , $pw , $tit , $tex ) ;
?>


http/https 혼합 환경에서 세션 보안 강화하기

http/https 혼합 환경에서 세션 보안 강화하기


간만에 올리는 보안팁텍입니다. 


요즘 로그인 페이지, 회원가입 페이지 등 개인정보가 오가는 곳에는 

https (SSL 또는 TLS) 보안서버를 사용하는 것은 상식이 되었죠? 

(음 그러나 현실은... 상식이 되었다고 제발 믿고 싶습니다 ㅠㅠ) 


구글이나 트위터 등의 해외 사이트들은 아예 모든 페이지에 https를 일괄 적용하곤 합니다. 

그러나 국내에서는 https를 적용한 사이트라도 모든 페이지에 일괄 적용하기보다는 

법에서 요구하는 최소한 - 로그인과 회원가입 페이지 - 에만 적용하는 경우가 많습니다. 

여전히 https에 대한 막연한 두려움과 미신이 많기 때문인데요... 


막연한 두려움과 미신 참고: 

http://www.phpschool.com/link/tipntech/77347 

http://www.phpschool.com/link/tipntech/77348 


------------------------------------------------------------------------------------------------------- 


그런데 일부 페이지에만 https를 적용할 경우 치명적인 문제가 한 가지 발생합니다. 

로그인에 사용하는 아이디와 비번은 암호화 전송이 되지만, 

로그인 상태를 표시하기 위한 세션 쿠키는 다른 페이지에서 무방비 상태로 노출된다는 거죠. 


세션 쿠키의 값을 알아낼 수 있다면 아이디와 비번 따위는 훔칠 필요도 없습니다. 

세션 쿠키를 사용하면 자기도 님의 아이디로 로그인된 상태로 만들 수 있으니까요. 

일단 이렇게 로그인 상태로 만들면 회원정보도 마음대로 볼 수 있고 

남의 글이나 댓글을 지울 수도 있고, 심지어 남의 이름으로 물건을 살 수도 있죠. 

이건 뭐, https를 적용한 보람이 전혀 없습니다. 


(회원정보 열람 전에 비번을 다시 입력하도록 하면 어느 정도는 피해를 막을 수 있겠죠? 

그러나 모든 페이지에서 매번 비번을 묻지 않는 한 100% 막을 수는 없습니다.) 


PHP에서는 세션을 시작할 때 $secure 옵션을 사용하면 

https 상태에서만 세션 쿠키가 전송되도록 강제할 수 있습니다. 

그러나 이렇게 하면 https를 적용하지 않은 다른 페이지에서는 로그인이 풀려버리죠. 

그래서 대부분의 사이트들은 세션의 $secure 옵션을 사용하기가 힘듭니다. 


------------------------------------------------------------------------------------------------------- 


오늘은 http와 https를 혼합하여 사용하는 환경에서도 

세션 쿠키 도난의 위험을 최대한 줄이는 방법을 소개해 보겠습니다. 


문제의 핵심은 공격자가 http 상태에서 훔친 세션 쿠키를 

https 상태에서도 마음놓고 사용할 수 있다는 것입니다. 

따라서 우리의 목적은 http 상태에서 세션 쿠키를 훔치더라도 

https 상태에서는 무용지물이 되도록 하는 것입니다. 


------------------------------------------------------------------------------------------------------- 


1. 일단 그냥 세션을 시작합니다. $secure 옵션은 사용하지 않습니다. 

    PHP에서는 보통 PHPSESSID라는 이름의 세션 쿠키를 사용합니다. 


2. 로그인하는 순간에는 https 상태이겠죠? 이 때 쿠키를 하나 더 구워줍니다. 

    이 쿠키를 편의상 "보안쿠키"라고 부르고, 쿠키 이름은 SSLSESSID라고 하겠습니다. 

    랜덤으로 생성한 값을 이 쿠키에 넣고, 같은 값을 세션에도 하나 저장해 둡니다. 

    중요한 건, SSLSESSID 쿠키에는 $secure 옵션을 사용해야 한다는 점입니다. 

    당연히 이 쿠키는 https 상태일 때만 전송되겠죠? 

    다른 방법으로 쿠키를 훔치는 것을 막기 위해 $httponly 옵션도 넣어주면 좋습니다. 


3. 사용자를 http 페이지로 돌려보냅니다. 

    이 때는 세션 쿠키(PHPSESSID)만 전송되고, 보안쿠키는 전송되지 않습니다. 

    따라서 누가 세션 쿠키를 훔쳐가도 알아차릴 방법이 없습니다. 

    공격자가 실제 사용자와 같은 와이파이를 사용하고 있다면 IP도 당연히 같겠고, 

    세션 쿠키를 훔칠 정도면 User-Agent 같은 것도 얼마든지 훔쳐서 베낄 수 있을 테니까요. 

    이건 http의 한계입니다. 어쩔 수 없습니다. 


4. 반면, 사용자가 다시 https 페이지를 방문한다면 어떻게 될까요? 

    정상적인 사용자라면 세션 쿠키(PHPSESSID)와 보안쿠키(SSLSESSID)가 함께 전송되겠죠. 

    그러나 공격자는 세션 쿠키는 훔칠 수 있어도 보안쿠키는 훔칠 수 없습니다. 

    따라서 PHPSESSID만 전송하거나, SSLSESSID의 값을 짐작해야 합니다. 

    그런데 SSLSESSID의 값은 랜덤으로 생성했으므로 짐작하기가 매우 어렵습니다. 


5. https 페이지를 방문할 경우 서버에서 SSLSESSID 쿠키를 체크합니다. 


5-1. 만약 SSLSESSID 쿠키가 있다면 세션에 저장해 두었던 값과 비교합니다. 

      일치하면 정상적인 사용자입니다. 

      일치하지 않는다면 공격자입니다. 세션을 폭파해 버려야 합니다. 콰쾅. 


5-2. 만약 SSLSESSID 쿠키가 없다면 세션에 저장해 둔 값이 있는지 확인합니다. 

      세션에 저장해 둔 값이 없다면 2단계를 거치지 않았다는 뜻이므로 

      2단계와 같이 보안쿠키를 새로 발급해 주면 됩니다. 

      반면, 세션에 저장해 둔 값이 있는데도 보안쿠키를 전송하지 않았다면 

      (즉, 분명 아까 보안쿠키를 구워줬는데 어딘가에 흘리고 왔다면) 

      공격자가 SSLSESSID의 값을 짐작하지 못해서 비워둔 것이겠죠? 

      당연히 세션을 폭파해 버려야 합니다. 쿠콰쾅. 


6. 위와 같은 방법을 사용하면 공격자가 http 상태에서 세션 쿠키를 훔치더라도 

    https 페이지를 방문하는 순간 세션이 폭파되어 버리므로 

    훔친 세션 쿠키는 무용지물이 됩니다. 

    반면, 정상적인 사용자들이 웹사이트를 이용하는 데는 아무 지장이 없습니다. 


7. 단, 로그인 후에 단 한번도 https 페이지를 방문하지 않는다면 아무 소용이 없겠죠? 

    위의 방법으로 최대한의 효과를 얻으려면 

    종종 https 페이지를 방문하도록 해주어야 합니다. 

    로그인, 회원가입, 회원정보 열람 및 수정, 아이디/비번찾기, 결제페이지는 물론이고 

    가끔 막 엉뚱한 것을 https 페이지로 만들어서 공격자를 놀려주세요. 

    예를 들어 게시판에서 글 읽을 때는 평범한 http이지만 

    글 쓰는 폼의 action 주소는 https로 해둔다거나... 

    그러면 만약 세션 쿠키를 훔치더라도 다른 사람을 사칭해서 글을 쓰려고 하는 순간 

    세션 폭파 쿠콰콰콰! 


8. 그런데 대부분의 웹사이트들은 http로 접속하든 https로 접속하든 내용이 똑같습니다. 

    그래서 아주 조심스러운 공격자라면 https 링크를 http로 바꾸어 접속함으로써 

    세션이 폭파되는 것을 피할 수 있어요. 

    이런 꼼수를 막기 위해, https로 접속해야 하는 페이지에 http로 접속한 경우 

    아무 것도 보여주지 말고 곧바로 Location: 헤더를 사용해서 https로 넘겨주세요. 

    만약 공격자였다면 당연히 세션 폭파 쿠콰콰콰! 


------------------------------------------------------------------------------------------------------- 


9. 방법만 알려드리고 예제 소스가 없으면 그건 제 스타일이 아니죠? 

    위에서 언급한 모든 작업을 한 번에 해주는 함수입니다. 

    그 밖에도 3분마다 쿠키값을 바꿔주고 

    세션 관련 php.ini 속성들을 자동으로 조절해 주는 등 

    쓸만한 기능들이 좀 있어요. 

    session_start() 대신 쓰시면 됩니다. 


/** 

 * 합리적인 기본값으로 세션을 시작하는 함수 

 * 

 * @param int $lifetime = 0 

 * @param string $path = '/' 

 * @param string $domain = null 

 * @param bool $secure = false 

 * @param bool $httponly = true 

 * @return void 

 */ 

function session_start_better($lifetime = 0, $path = '/', $domain = null, $secure = false, $httponly = true) 

    // 세션 관련 php.ini 설정 조절 

    ini_set('session.gc_maxlifetime', max($lifetime, 86400)); 

    ini_set('session.hash_function', 1); 

    ini_set('session.use_cookies', 1); 

    ini_set('session.use_only_cookies', 1); 

    ini_set('session.use_strict_mode', 1); 

    if (defined('PHP_OS') && !strncmp(PHP_OS, 'Linux', 5)) 

    { 

        ini_set('session.entropy_file', '/dev/urandom'); 

        ini_set('session.entropy_length', 20); 

    } 

    

    // 실제로 세션을 시작 

    session_set_cookie_params($lifetime, $path, $domain, $secure, $httponly); 

    session_start(); 

    

    // HTTPS인 경우 보안쿠키 체크 

    if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') 

    { 

        // 보안쿠키를 처음 발급하는 경우 

        if (!isset($_SESSION['SSLSESSID'])) 

        { 

            $_SESSION['SSLSESSID'] = sha1(pack('V*', rand(), rand(), rand(), mt_rand(), mt_rand())); 

            setcookie('SSLSESSID', $_SESSION['SSLSESSID'], $lifetime, $path, $domain, true, true); 

            if (isset($_COOKIE[session_name()])) session_regenerate_id(); 

        } 

        // 보안쿠키를 발급했는데 제대로 돌아오지 않은 경우 공격자로 간주함 

        elseif (!isset($_COOKIE['SSLSESSID']) || $_COOKIE['SSLSESSID'] !== $_SESSION['SSLSESSID']) 

        { 

            $_SESSION = array(); 

            $sp = session_get_cookie_params(); 

            setcookie(session_name(), '', time() - 86400, $sp['path'], $sp['domain'], $sp['secure'], $sp['httponly']); 

            setcookie('SSLSESSID', '', time() - 86400, $sp['path'], $sp['domain'], true, true); 

            session_destroy(); 

        } 

        // 보안쿠키가 정상적으로 되돌아온 경우는 별도의 처리 불필요 

    } 

    

    // 세션을 발급한 지 3분이 경과하면 자동으로 쿠키값을 변경해줌 

    if (isset($_SESSION['AUTOREFRESH'])) 

    { 

        if ($_SESSION['AUTOREFRESH'] < time() - 180) 

        { 

            $_SESSION['AUTOREFRESH'] = time(); 

            session_regenerate_id(); 

        } 

    } 

    else 

    { 

        $_SESSION['AUTOREFRESH'] = time(); 

    } 


------------------------------------------------------------------------------------------------------- 


10. 소스가 너무 길어지지 않도록 하기 위해 몇 가지를 간단하게 처리하고 넘어갔는데, 

    실제로 쓰실 때는 아래의 두 군데를 적당히 고쳐쓰셔도 됩니다. 

    

    - 로드밸런싱, CDN 등을 사용할 경우 $_SERVER['HTTPS']가 정확하지 않을 수 있음 

    - 보안쿠키 발급시 난수생성 알고리듬을 더욱 강력한 것으로 변경 

      참고: http://www.phpschool.com/link/tipntech/79087 


11. 물론 최고의 해결책은 웹사이트 전체에 https를 적용하고 

    HTTP Strict Transport Security (HSTS) 헤더를 사용하여 

    아예 브라우저들이 http 사이트로는 접속 시도조차 하지 않도록 만드는 것입니다.

서버스캔 (Snooping) 막기 스크립트 (.htaccess ip deny)

서버스캔 (Snooping) 막기 스크립트 (.htaccess ip deny)



http://kb.site5.com/security/how-to-automatically-block-someone-who-is-snooping-around-your-site/ 

.htaccess 에서, 임의로 서버스캔해가는 놈들 감지되면, block.php 으로 보내고, 


http://kb.site5.com/security/how-to-automatically-block-someone-using-a-php-script/ 

이 스크립트에서, .htaccess 에, 아이피 deny 하는거에요. 



별건 아닌데, 아주 유용하게 쓰일수 있습니다. 


보통 해커들이 스캔 프로그램 임의로 돌리면 , 500 에러서부터, 실제로 뚫리기도 하고요. 


작은 작업으로 큰 효과를 볼수 있는.... 


미국 호스팅 회사인데, 잘 정리해놓은듯 해서 올려봅니다.

서버운영_웹 재요청 방지 및 트래픽 감소를 위한 방법

서버운영_웹 재요청 방지 및 트래픽 감소를 위한 방법


from cache 

서버에 요청자체를 하지 않는다. 

가장 효과가 좋다.(요청 자체가 없으므로) 

최초 한번 데이터를 가져오면, 그 후로는 웹 브라우저의 캐시에서 데이터를 가져온다. 

즉, 서버와의 통신이 없어진다. 

하지만 F5를 누를 경우 새로 데이터가 전송된다.(HTTP Code 200 발생) 

관련 응답 해더 및 PHP 적용법 ($g는 캐시 기간(초)) 

header('Cache-Control:public, max-age='.$g); // HTTP/1.1 

지정 초 이전까지는 재요청하지 않도록 권장함 (새로 고침에서는 무시됨) 

header("Expires: ".gmdate("D, d M Y H:i:s", time()+$g)." GMT"); //캐시 

지정 시간까지는 재요청 하지 않도록 권장함 (새로 고침에서는 무시됨) 

apache의 경우 mod_expires 적용 



304 Not Modified 

요청은 하지만, 트래픽이 아주 적게 발생된다.(해더 전송 정도만 발생) 

F5로 새로 요청해도 Etag나 Last-Modified의 조건에 맞으면 HTTP Code는 304가 발생된다.(실제 데이터 전송은 없음) 

(ctrl+F5의 경우 etag와 Last-Modified 가 없이 요청되므로 새로 가져온다.) 

관련 응답 해더 및 PHP적용법 

header("Etag: ".$etag_key); //etag 

파일의 수정내역을 Etag로 만들어서 출력한다. 

클라이언트가 같은 Etag로 요청하면, 304코드를 알려준다. 

아파치의 경우 FileETag 부분 참고 

파일 수정 시간을 사용할 경우 문제가 될 수 있다. 

서버를 여러대 사용할 경우 서버 간의 파일의 시간 차가 발생될 수 있기 때문이다. 

여러서버를 묶어쓰는(L4에 연결 해서) 경우 사용안하는게 좋다 

PHP에서 처리할 경우 요청에서 HTTP_IF_NONE_MATCH 관련 처리가 필요 

header('Last-Modified: '.gmdate("D, d M Y H:i:s", time()+$g)." GMT"); 

지정 시간까지는 파일이 수정되지 않는다는 것을 나타낸다. 

즉, 그 시간에 재요청해봤자 304 코드가 반환된다. 

apache의 경우 mod_expires 적용 

PHP에서 처리할 경우 요청에서 HTTP_IF_MODIFIED_SINCE 관련 처리가 필요


관련 링크 : http://www.mins01.com/home/board/board.php?type=read&b_id=tech&page=1&b_idx=903&t=1414993105

JENNIFER UI 차트 소개 (1.2 버전 릴리즈)


JENNIFER UI 라이브러리가 약 6개월 만에 정식 릴리즈를 하게 되었습니다. 이번 버전에서는 차트 라인업이 추가되었고, 아이콘 컴포넌트가 기존의 이미지 스프라이트 방식에서 벡터 타입의 폰트 아이콘으로 변경되었습니다.
 
차트는 SVG 기반으로 구현되었으며, 배경이 되는 5종의 그리드와 데이터를 표현할 수 있는 26종의 브러쉬 그리고 인터랙션을 담당하는 6종의 위젯으로 구성되어 있습니다. 또한 기존의 차트를 사용하여 구현한 래핑 컴포넌트로써 리얼타임 데이터를 보여주기 위한 컴포넌트도 제공합니다.
 
앞으로는 좀 더 다양한 종류의 브러쉬를 제공할 예정이며, 이 중에는 3D 브러쉬도 포함되어 있습니다. 그리고 커스텀 브러쉬를 구현할 수 있는 가이드 문서와 차트 구성에 대한 아키텍처 문서를 공개할 예정입니다.
 
관련해서 자세항 사항은 아래 링크를 참조하시면 됩니다.


메뉴얼 - http://seogi1004.github.io/jui
릴리즈 노트 - https://github.com/seogi1004/jui/releases


Link1 http://seogi1004.github.io/jui

Link2 https://github.com/seogi1004/jui/releases




윈도우에서 APM 설치하기

윈도우에서 APM 설치하기


윈도우에서 로컬에서 php를 개발하기 위한 세팅인 APM설치해보겠습니다.
APM 다운받는 곳
MySQL : http://mysql.org
PHP : http://php.net
Apache server : http://httpd.apache.org/
각각 자료실에서 쉽게 다운로드 하실수 있습니다.
MySQL 설치
MySQL은 아무 최신버전을 설치하면 됩니다. MySQL5버전을 설치할경우 설치중간에 root 비밀번호를 입력해주면
됩니다.
다음 중요한것은 php와 apache 설치인데요... 최신 apache2.2가 아직까지 php최신버전을 지원하지 않는 문제
로 인해 이 둘의 설치를 잘 해줘야 합니다.
여기서는 다음의 php와 apache버전을 설치합니다.
php5.1.6
Apache2.0.59
물론 정확히 위 버전대로 설치 안해도 되지만 만약 따라하시다가 설치가 제대로 안되시면 정확히 위 버전으로 설
치하시면 설치가 잘 될겁니다. MySQL은 아무 버전이나 상관없습니다.
PHP 설치
다운받은 PHP 5.1.6 의 압축을 C:\php 폴더에 풀어줍니다. php는 압축을 풀어준것만으로 설치가 다 됩니다.
- php 폴더의 php.ini-dist 파일의 이름을 php.ini로 변경한다.
- php.ini 파일을 C:\WINDOWS 폴더에 복사한다.
- php5ts.dll 파일을 C:\WINDOWS\system32 폴더에 복사한다.
- php 폴더의 libmysql.dll 파일을 C:\WINDOW\system32 디렉토리에 복사한다. (mysql설정)
이제 PHP가 제대로 돌아가도록 php.ini 파일의 설정 부분을 수정해야 한다. 메모장과 같은 편집기를 이용하여
php.ini 파일을 연뒤 extension_dir 부분을 찾아 디렉터리를 'c:\php\ext\로 바꾼다. MySQL의 사용과 관련된
설정인 ;extension=php_mysql.dll 부분을 찾아 앞의 주석 표시(;)를 지우고
'extension=php_mysql.dll' 로 바꾼다.
Apache 설치
apache_2.0.59-win32-x86-no_ssl을 다운받습니다. 이 파일을 더블클릭하여 설치를 시작합니다.
설치 중간에 Network Domain을 localhost 로 설정하고 Typical로 설치합니다.
Change 를 클릭하여 설치폴더를 C:\apache 로 변경합니다. install을 합니다.
이제 httpd.conf 파일의 환경설정이 남았습니다.
Apache가 설치된 폴더(C:\apache\Apache2\conf)를 찾아서 conf 폴더 내에 있는 httpd.conf 파
일을 엽니다. 메모장으로 열어도 되고 다른 에디터에서 열어도 됩니다.
httpd.con 파일의 최하단에 아래의 소스를 추가하고 저장하된 됩니다.
-------------------------------------------------------------------------
LoadModule php5_module "C:\php\php5apache2.dll"
AddType application/x-httpd-php .phtml .html .htm .inc .php .php3
AddType application/x-httpd-php-source .phps
Action application/x-httpd-php "/php/php.exe"
AddDefaultCharset euc-kr
-------------------------------------------------------
httpd.conf 파일의 환경설정이 끝났다면 반드시 Apache를 재실행시켜야 합니다. Apache를 재 실행하지 않으면
PHP가 실행되지 않습니다.
이제 C:\apache\Apache2\htdocs 폴더내에 파일을 저장하면 그 파일을 웹 브라우저에서 볼 수 있는 것입니
다. 메모장이나 에디터를 열어 아래와 같이 작성하고 C:\apache\Apache2\htdocs 폴더 내에 test.php로 저장
합니다.
-------------------------------------------------------------------------
<?
echo "<center><b>PHP 작동과 버전</b><p> ";
phpinfo();
?>
-------------------------------------------------------------------------
브라우저를 열고 주소 창에 http://localhost/test.php 라고 입력하고 이동하면 php 화면이 뜨면 설치가 성공한겁
니다.
참고 : test.php 파일을 htdocs 폴더에 저장하고 웹 브라우저를 실행하여 주소에 127.0.0.1/text.php 라고 하면
test.php 파일이 출력된다. 그런데 htdocs 폴더를 사요하기 싫고 다른 폴더를 설정하고 싶다면 httpd.conf 파일의
228라인의 DocumentRoot 값을 수정하면 된다.
이때 반드시 지정할 디렉터리가 생성되어 있어야 한다.

php 중복 로그인 방지

php 중복 로그인 방지


몇년전 중복로그인 방지를 해야하는일이 있어 만들었던 소스입니다. 정확히는 A-pc에서 로그인했을때 B-pc에서 로그인이 되지 않는게 아니라, A-pc에서 로그인했을때 B-pc에서 로그인하면 2군데 모두 세션이 없어지고 로그아웃 처리되는 개념입니다. 스쿨에 괴수분들이 많아서 팁아닌 팁 올리는게 부끄럽네요;




 

<?php
/**

CREATE TABLE `avoid_duplication` (
  `idx`         int(11)         NOT NULL AUTO_INCREMENT,
  `mem_idx`     int(11)         DEFAULT NULL, # 회원의 index
  `sess_id`     varchar(100)    DEFAULT NULL, # 세션아이디 (회원의 아이디 아님.)
  `wrt_date`    int(11)         DEFAULT NULL, # 등록일 time()
  `ip`          varchar(255)    DEFAULT NULL, # 아이피.
  PRIMARY KEY (`idx`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 
 
CREATE TABLE `member_block` (
  `mb_idx`          int(11)         NOT NULL AUTO_INCREMENT,
  `mem_idx`         int(11)         DEFAULT NULL, # 회원의 index
  `mem_wrt_date`    int(11)         DEFAULT NULL, # 차단된 날짜 time()
  `mb_code`         varchar(255)    DEFAULT NULL, # 차단해제 신청시 인증번호 체크
  PRIMARY KEY (`mb_idx`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
$sess_uidx : 회원의 index를 세션값으로..
 * */
Class AvoidDuplication extends DB
{
    var $TBL = "avoid_duplication";
    
    function __construct()
    {
        $this->ezSQL_mysql(
            DBUSER,
            DBPW,
            DBNAME,
            DBHOST
        );
    }

    function bloackChk($sess_uidx)
    {
        
        $sql = "select count(*) as cnt from member_block where mem_idx = '{$sess_uidx}'";
        $cnt = $this->get_row($sql)->cnt;
        if ($cnt!=0)
        {
            //alert("중복로그인으로 인해 블럭처리된 아이디입니다.\\n관리자에게 문의주시거나, \'중복로그인해지신청\'을 해주세요.");
			//location.href = 'logout.php';
        }
    }

    function processing()
    {
        global $sess_uidx;
        $nowTime    = time();
        $IP         = $_SERVER["REMOTE_ADDR"];
        
        $this->bloackChk($sess_uidx);
        
        $sql = "SELECT * FROM {$this->TBL} WHERE mem_idx = '{$sess_uidx}'";
        $row = $this->get_row($sql);
        
        $resTime    = $nowTime - $row->wrt_date;
        $time       = 60*10;
        
        if ($sess_uidx)
        {
            if ($row->mem_idx=="")
            {
                $sql = "INSERT INTO {$this->TBL} (mem_idx, ip, wrt_date) VALUES ('{$sess_uidx}','{$IP}','{$nowTime}')";
                $this->query($sql);
            }
            else
            {
                if ($row->ip!=$IP)
                {
                    if ($resTime < $time+1)
                    {
                        // 블럭처리
                        $sql ="INSERT INTO member_block (mem_idx, mem_wrt_date) VALUES ('{$sess_uidx}','$nowTime')";
                        $this->query($sql);
                    }
                    else
                    {
                        $sql = "UPDATE {$this->TBL} SET wrt_date = '{$nowTime}',ip = '{$IP}' WHERE mem_idx = '{$sess_uidx}'";
                        $this->query($sql);
                    }
                }
                else
                {
                    // do noting
                }
            }
        }
        else
        {
            // do noting
        }
    }

    function processingStop()
    {
        global $sess_uidx;
        $sql = "delete from {$this->TBL} where mem_idx = '{$sess_uidx}'";
        $this->query($sql);
        
    }
    
    // 인증번호 생성하여 발송하고 '차단'테이블에 인증번호 입력.
    function duplication($mem_id,$mem_pw,$mem_ssn1,$mem_ssn2,$mem_mail1,$mem_mail2)
    {
        global $sess_uidx;
        $sql = "
        SELECT *, count(*) AS cnt FROM member WHERE
        mem_id = '$mem_id' AND
        mem_pw = '$mem_pw' AND
        mem_ssn1 = '$mem_ssn1' AND
        mem_ssn2 = '$mem_ssn2' AND
        mem_mail1 = '$mem_mail1' AND
        mem_mail2 = '$mem_mail2' 
        ";
        $row = $this->get_row($sql);
        if ($row->cnt!=0)
        {
            $key = rand(0,9999);
            $sql = "UPDATE member_block SET mb_code = '$key' WHERE mem_idx = '$row->mem_idx'";
            $res = $this->query($sql);
            
            if ($res)
            {
                // 이곳에서 인증번호를 메일이나 문자로 발송. 인증번호는 $key 변수.
                echo true;
            }
        }
    }

    // 차단 해제.
    function duplicationDel($mem_id, $mb_code)
    {
        global $sess_uidx;
        $sql = "SELECT * FROM member WHERE mem_id = '{$mem_id}'";
        $row = $this->get_row($sql);
        $row->mem_idx;
        
        $sql = "SELECT count(*) AS cnt FROM member_block WHERE mem_idx = '$row->mem_idx'
        AND mb_code = '$mb_code'";
        $cnt = $this->get_row($sql)->cnt;
        
        if ($cnt!=0)
        {
            $sql = "DELETE FROM member_block WHERE mem_idx = '$row->mem_idx'
            AND mb_code = '$mb_code'";
            $res = $this->query($sql);
            echo true;
        }
        else {
            echo false;
        }
    }
}

$aDupli = new AvoidDuplication();
$aDupli->processing();

// 사용시
//$aDupli->bloackChk($sess_idx);
?>







[스크립트] jQuery 기반 숫자관련 플러그인.

- removeText: 숫자제외 텍스트 제거. 

- numberFormat: 3자리 마다 콤마 표시. 

- onlyNumber: 위의 모든 기능 포함. 


소스와 예제는 파일첨부하였습니다.

archive.zip



===========================================

http://www.phpschool.com/link/tipntech/64665 

음수와 소수점까지 어느정도 처리하는 버전.

php 함수 모음

php 함수 모음


PHP에는 수많은 함수들이 존재한다. PHP가 웹프로그래밍 언어로서 가장 인기 있는 이유 중에 하나가 바로 풍부한 함수들을 제공하고 있기 때문이다. 프로그래머에게 함수가 풍족하다는 것은 목수가 연장을 다양하게 가지고 있는 것과 같다. 목수에게 적재적소에 맞는 다양한 연장이 있어야 좋은 집을 짓듯이 프로그래머에게는 다양한 함수가 제공 되어야 멋진 홈페이지를 구축 할 수 있다. PHP는 문자열 함수부터 다양한 변수와 연산자, 요즘 많이 사용되고 있는 XML 함수에 이르기까지 충분한 함수를 제공한다.



함수명

함수설명

echo

문자열을 출력한다.

print

문자열을 출력한다.

htmlspecialchars

줄을 바꾸지 않고 HTML 코드를 문자열 그대로 출력한다.

nl2br

개행 문자 앞에 <BR/>태그를 삽입하여 줄을 자동으로 바꾼다.

substr

지정해준 숫자에 따라 문자열 앞뒤 일부를 추출한다.

strstr

찾고자 하는 문자열이 처음으로 나타나는 위치 이후의 문자열을 반환한다.(대소문자 구분한다.)

strchr

찾고자 하는 문자열이 마지작으로 나타나는 위치 이후의 문자열을 반환한다.

trim

문자열의 앞부분과 뒷부분에 있는 공백 문자를 제거한다.

addslashes

작은 따옴표와 큰 따옴표, 역슬래쉬와 같은 문자 앞에 역슬래쉬를 붙인다.

stripslashes

addslashes() 함수로 역슬래쉬가 처리 된 문자를 원 상태로 돌린다.

explode

문자열을 지정한 구분자로 나누어 배열에 저장한다.

strcmp

두 개의 문자열을 비교한다.

date

시간이나 날짜를 지정한 형식에 맞게 출력한다. 

time

현재의 시간을 유닉스 시간(초)으로 얻는다.

mktime

특정날짜와 시간을 유닉스 시간으로 얻는다.

인자가 없다면 time 함수와 같은 결과를 얻는다.

checkdate

주어진 날짜와 시간이 실제로 존재하는지 검사한다.

microtime

유닉스 시간과 마이크로 초 단위의 시간을 얻는다.

getdate

날짜와 시간 정보를 배열의 형태로 얻는다.

file

파일을 읽어 배열로 반환한다.

filesize

바이트 수로 파일의 크기를 반환한다.

file_exists

파일이 존재하는지 검사한다.

fopen

지정한 파일 모드로 연다.

fclose

fopen() 함수로 연 파일을 닫는다.

is_dir

디렉토리인지 검사한다.

is_file

파일인지 검사한다.

copy

파일을 복사한다.

unlink

파일을 삭제한다.

mkdir

디렉토리를 생성한다.

rmdir

디렉토리를 삭제한다.

array

배열을 생성한다.(구문)

list

배열에서 값을 가져와 지정된 변수에 할당함(구문)



날짜 및 시간 함수

 

checkdate : 주어진 날짜와 시간이 올바른지 검사한다.

date : 지정한 형식으로 시간이나 날짜를 배열로 반환한다.

getdate : 날짜와 시간의 정보를 배열로 형태로 얻는다.

gettimeofday : 시스템의 현재 시간 자료를 얻는다.

gmmktime : 그리니치표준 시간으로 지정한 날짜의 유닉스 시간(timestamp)을 얻는다.

localtime : 현재 서버의 로컬 타임을 얻는다.

mktime : 지정된 날짜를 유닉스 시간(timestamp)으로 얻는다.(시,분,초,월,일,년)

microtime : 현재시간의 유닉스 시간과 마이크로타임 값을 얻는다.

strftime : 주어진 포맷으로 시간이나 날짜 정보를 출력한다.

time : 현재 시간을 유닉스 시간(timestamp)으로 얻는다.

 

문자열 함수


AddCSlashes C 형식으로 문자열에 슬래쉬를 덧붙인다. 

addslashes 작은따옴표 큰따옴표와 같은 특정문자 앞에 역슬래시 문자를 붙인다. 

bin2hex  바이너리 데이터를 16진수 표현으로 바꾼다. 

chop 문자열의 끝에 있는 공백문자를 제거하고 문자열을 반환한다. 

chr 특정 문자를 반환한다.chr()함수는 아스키함수에 해당하는 문자를 반환한다.ord()함수는 문자열에서 첫번째 문자에 아스키코드값을 반환한다.  

chunk_split 문자열을 작은 조각으로 나눕니다. 

count_chars 문자열 안에 사용한 문자에 대한 정보를 반환합니다. 

crc32 str의 32비트 순환 반복 체크섬 값을 생성합니다. 보통 모든 데이터가 전송되었는지 확인하는 데에 사용합니다.  

crypt 단방향 문자열 암호화(해슁). 

echo 하나 이상의 문자열을 출력합니다. 

explode 문자열을 주어진 문자열을 기준으로 분리합니다. 

fprintf 문자열을 형식화하여 스트림에 기록합니다.  

hebrev 논리 헤브라이어 텍스트를 표시 텍스트로 변환합니다.한 줄에 출력할 최대 문자 수를 지시합니다.  

hebrevc 개행 문자(\n)를 "<br>\n"로 바꾼는 점을 제외하면, hebrev()와 동일합니다. 

html_entity_decode  모든 HTML 엔티티를 해당하는 문자로 변환합니다. 

htmlentities 해당하는 모든 문자를 HTML 엔티티로 변환합니다. 

htmlspecialchars 특수 문자를 HTML 엔터티로 변환합니다.

'&'(앰퍼샌드)는 '&'가 됩니다.

'"'(큰 따옴표)는 ENT_NOQUOTES를 지정하지 않았을 때 '"'가 됩니다.

'''(작은 따옴표)는 ENT_QUOTES를 지정했을 때만 '''가 됩니다.

'<'(보다 작음)는 '<'가 됩니다.

'>'(보다 큼)는 '>'가 됩니다.

 

implode 모든 배열 원소를 순서대로, 각각의 원소 사이에 glue 문자열을 덧붙인 문자열 표현을 반환합니다.  

localeconv 숫자 형식화 정보를 얻습니다.  

ltrim  문자열 시작 부분의 공백을 제거합니다. 

md5_file 주어진 파일명의 md5 해쉬를 계산합니다.  

md5 문자열의 md5 해쉬를 계산합니다.해쉬는 16진수의 32문자입니다.  

nl2br 문자열의 모든 줄바꿈 앞에 HTML 줄바꿈 태그를 삽입합니다. 

number_format 숫자를 천 단위로 구분하여 포맷합니다. 

ord  문자의 아스키 값을 반환합니다. 

print 문자열을 출력합니다.  

printf 형식화한 문자열을 출력합니다. 

quotemeta 메타 문자를 인용합니다.문자 앞에 백슬래쉬(\)를 덧붙인 str을 반환합니다. 

rtrim 문자열 끝 부분의 공백을 제거합니다. 

similar_text 두 문자열 간의 유사성을 계산합니다.  

sprintf 형식화한 문자열을 반환합니다.  

str_ireplace 대소문자를 구별하지 않는 str_replace().  

str_pad 문자열을 어떠한 길이가 되도록 다른 문자열로 채웁니다. 

str_repeat 문자열을 반복합니다. 

str_replace 발견한 모든 검색 문자열을 치환 문자열로 교체합니다. 

str_shuffle 문자열을 랜덤하게 섞습니다. 

str_split  문자열을 배열로 변환합니다. 

strip_tags 문자열에서 HTML과 PHP 태그를 제거합니다.  

stripcslashes addcslashes()로 처리한 문자열을 되돌립니다. 

stripos 대소문자를 구별하지 않고 문자열이 처음 나타나는 위치를 찾습니다.  

stripslashes addslashes()로 처리한 문자열을 되돌립니다. 

strlen 문자열의 길이를 구합니다.  

strpos 문자열이 처음 나타나는 위치를 찾습니다.  

strrchr 문자열에서 문자가 마지막으로 나오는 부분을 찾습니다. 

strrev 문자열을 뒤집습니다.  

strripos 문자열에서 대소문자 구별 없이 문자열이 나타나는 마지막 위치를 찾습니다. 

strrpos 문자열에서 마지막 문자의 위치를 찾습니다 

strstr 문자열이 처음으로 나타나는 부분을 찾습니다 

strtolower 문자열을 소문자로 만듭니다.  

strtoupper 문자열을 대문자로 만듭니다. 

strtr 특정 문자를 번역한다.  

substr_count 부분문자열의 수를 센다 

substr_replace 문자열의 일부를 치환한다. 

substr 문자열의 일부를 반환한다. 

trim 문자열의 처음과 끝에 있는 공백을 제거한다. 

ucfirst 문자열의 처음 글자를 대문자로 만든다. 

ucwords 문자열에 있는 각 단어의 처음 글자를 대문자로 바꾼다.  

wordwrap 정지문자를 이용해 주어진 수 만큼의 문자를 래핑한다.

 

파일 함수

 

basename : 경로명에서 파일명만을 반환한다.

chgrp : 파일 그룹을 변환한다.

chmod : 파일의 모드를 변경한다.

chown : 파일의 소유자를 변경한다.

clearstartcache : 파일의 통계 캐시를 삭제한다.

copy : 파일을 복사하고 제대로 수행이 되면 true를 반환한다.

dirname : 경로의 구성요소에서 디렉토리 이름만 반환한다.

fopen : 파일이나 url경로의 파일을 읽기나 쓰기 모드로 연다.

fclose : fopen() 함수로 열린 파일 포인터를 닫는다.

feof : 현재 포인터의 위치가 파일 끝에 있는지 테스트한다.

fflush : 출력결과를 파일로 보낸다.

fgetc : 파일 포인터로부터 문자를 읽어들인다.

fgets : 파일을 한줄씩 읽어들인다.

file : 파일 전체 읽어서 배열(줄단위)로 반환한다.

fileatime : 파일에 접근한 최근 시간을 반환한다.

filesize : 파일의 크기를 바이트수로 반환한다.

file_exists : 지정한 파일이 존재하는지 체크한다.

fpassthru : 파일포인터에 남아 있는 데이타를 모두 출력한다.

fputs : 특정 바이트 수 만큼을 파일에 기록한다.

fread : 지정한 수만큼 파일을 읽어 들인다.

fwirte : 파일을 기록한다. is_dir : 지정한 이름이 디렉토리인지 아닌지 검사하여 반환한다.

is_executable : 지정한 이름이 실행가능한 것인지 아닌지 검사하여 반환한다.

is_file : 지정한 이름이 일반적인 파일인지 아닌지 검사하여 반환한다.

is_link : 지정한 이름이 심볼릭 링크인지 아닌지 검사하여 반환한다.

is_readable : 지정한 파일이 읽기 가능한지 검사하여 반환한다.

is_writeable : 지정한 파일이 쓰기 가능한지 검사하여 반환한다.

mkdir : 디렉토리를 생상한다.

move_uploaded_file : 업로드된 파일을 다른 곳으로 이동한다.

readfile : 파일을 읽어들여 출력한다.

rename : 파일 이름을 바꾼다.

rmdir : 디렉토리 삭제

unlink : 파일을 삭제한다.

 

 

디렉토리 함수


chdir : 디렉토리를 바꾼다.

chroot : 루트 디렉토리를 변경한다.

closedir : 디렉토리 핸들을 닫는다.

dir : 관련 함수를 사용할 수 있는 디렉토리 클래스

opendir : 지정한 디렉토리에 대한 핸들을 연다

readdir : 디렉토리에서 디렉토리 및 파일들의 이름을 읽는다.

rewinddir : 디렉토리 핸들을 제일 처음으로 되돌린다.

scandir : 지정 경로 내의 파일과 디렉토리 목록을 반환한다.

 

 

URL 함수


base64_decode : base64 인코드 데이터를 원상태로 디코드한다.

base64_encode : 데이터를 base64로 인코드한다.

get_meta_tags : 메타 태그 내용을 배열로 반환한다.

http_build_query : 인코드한 쿼리 문자열을 생성한다.

parse_url : url 정보를 배열로 저장하여 구성요소를 반환한다.

rawurldecode : url 인코드 문자열을 디코드 한다.

rawurlencode : RFC 1738에 따라 url을 인코드 한다.

urldecode : 인코딩된 url 문자열을 디코드한다.

urlencode : 문자열을 url 인코드 한다.

 

 

변수 함수


doubleval : 변수의 실수형 값을 얻는다.

empty : 변수 값이 존재 하는지 검사한다.

get_definde_vars : 정의된 변수의 배열을 반환한다.

gettype : 변수 형을 반환한다.

import_request_variables : GET/POST/쿠키 변수를 전역으로 가져온다.

intval : 변수의 정수형 값을 반환한다.

is_array : 변수가 배열형인지 확인한다.

is_double : 변수가 실수형인지 확인한다.

is_int : 변수가 정수인지 확인한다.

is_null : 변수가 null인지 확인한다.

is_numeric :  변수가 숫자나 숫자형인지 확인한다.

is_object : 변수가 객체인지 확인한다.

is_string : 변수가 문자열인지 확인한다.

isset : 변수가 존재하는지 확인한다.

print_r : 변수의 정보를 사람이 읽기 쉽게 출력한다.

settype : 변수형을 설정한다.

strval : 변수를 문자형 값으로 변환한다.

unserialize : PHP 값으로 변환한다.

unset : 변수를 삭제한다.


 

 

수학 함수


abs : 절대값을 반환한다.

cos :  아크 코사인

base_convert : 수를 임의의 진수로 변환한다.

bindec : 2진수를 10진수로 변환한다.

ceil : 소수점 이하를 올림하여 값을 구한다.

decbin : 10진수를 2진수로 변환한다.

dechex : 10진수를 16진수로 변환한다.

decoct : 10진수를 8진수로 변환한다.

floor : 소수점 이하를 내림하여 값을 구한다.

fmod : 나눗셈에서 소수점 나머지를 반환한다.

getrandmax : 랜덤 값의 가장 큰 값을 반환한다.

hexdec : 16진수를 10진수로 변환한다.

is_finite : 허용 범위의 수인지 검사한다.

is_nan : 값이 수가 아닌지 검사한다.

log : 자연로그

max : 최대값을 반환한다.

min : 최소값을 반환한다.

mt_rand : 난수를 생성한다.

pow : 거듭제곱의 값을 반환한다.

rand : 정수형의 난수를 생성한다.

round : 변수의 반올림한 값을 구한다.

sin : 아크 사인

tan : 아크 탄젠트

 

#########################################################

날짜 및 시간 함수

함수명함수설명상세정보
checkdate인자로 주어진 날짜가 유효한지 검사한다.상세정보
date지정한 형식에 맞게 날짜와 시간을 출력한다.

a : 오전과 오후, 소문자 am, pm
A : 오전과 오후, 대문자 AM, PM 
B : 스왓치 인터넷 시간 000부터 999 
c : ISO 8601 날짜 (PHP 5에서 추가) 2004-02-12T15:19:21+00:00 
d : 일, 앞에 0이 붙는 2자리 01부터 31 
D : 요일, 3글자 문자 Mon부터 Sun 
F : 월, January, March 등의 완전한 문자 표현 January부터 December 
g : 시, 0이 붙지 않는 12시간 형식 1부터 12 
G : 시, 0이 붙지 않는 24시간 형식 0부터 23 
h : 시, 0이 붙는 12시간 형식 01부터 12 
H : 시, 0이 붙는 24시간 형식 00부터 23 
i : 분, 0이 붙는 형식 00부터 59 
I : (대문자 i) 일광 절약 시간 여부 일광 절약 시간이면 1, 아니면 0 
j : 일, 0이 붙지 않는 형식 1부터 31 
l : (소문자 'L') 요일, 완전한 문자 표현 Sunday부터 Saturday 
L : 윤년인지 여부 윤년이면 1, 아니면 0 
m : 월, 숫자 표현, 0이 붙는 형식 01부터 12 
M : 월, 짧은 문자 표현, 3문자 Jan부터 Dec 
n : 월, 숫자 표현, 0이 붙지 않는 형식 1부터 12 
O : 그리니치 시간(GMT)과의 차이 예: +0200 
r : RFC 2822 형식 날짜 예: Thu, 21 Dec 2000 16:01:07 +0200 
s : 초, 0이 붙는 형식 00 부터 59 
S : 일 표현을 위한 영어 서수 접미어, 2문자 st, nd, rd나 th. j와 잘 작동합니다. 
t : 주어진 월의 일수 28부터 31 
T : 이 기계의 표준 시간대 설정 예: EST, MDT ... 
U : 유닉스 Epoch(January 1 1970 00:00:00 GMT)로부터의 초 time() 참고 
w : 요일, 숫자형 0(일요일)부터 6(토요일) 
W : ISO-8601 연도의 주차, 주는 월요일에 시작 (PHP 4.1.0에서 추가) 예: 42 (연도의 42번째 주) 
Y : 연도, 4 자리수 표현 예: 1999, 2003 
y : 연도, 2 자리수 표현 예: 99, 03 
z : 연도의 일차 (0부터 시작) 0부터 365 
Z : 표준 시간대의 오프셋 초. UTC로부터 서쪽의 오프셋은 항상 음수이고, UTC로부터 동쪽의 오프셋은 항상 양수. -43200부터 43200 

상세정보
getdatetimestamp 형태로 받은 날짜 정보를 연,월,일,시,분,초 등의 정보로 반환한다.

seconds : 초의 숫자 표현 0 부터 59 
minutes : 분의 숫자 표현 0 부터 59 
hours : 시간의 숫자 표현 0 부터 23 
mday : 일의 숫자 표현 1 부터 31 
wday : 요일의 숫자 표현 0 (일요일) 부터 6 (토요일) 
mon : 월의 숫자 표현 1 부터 12 
year : 연도의 숫자표현, 4 자리 Examples: 1999 또는 2003 
yday : 연도의 일차 0 부터 366 
weekday : 요일, 완전한 문자 Sunday 부터 Saturday 
month : 월, 완전한 문자, January 나 March January 부터 December 
0 : 유닉스 Epoch (January 1 1970 00:00:00 GMT)로부터의 초, time()에 의해 반환되는 값과 유사하고, date()에 의해서 사용된다. 시스템 의존적이다, 일반적으로 -2147483648 부터 2147483647.

상세정보
gettimeofday현재 시간을 얻는다.상세정보
gmmktimeGMT(Greenwich Mean Time) 시간으로 지정한 날짜의 Unix timestamp을 얻는다.상세정보
localtime현재 서버 로컬 타임을 표시상세정보
microtime현재시간에 해당하는 Unix timestamp 값과 마이크로타임을 반환한다.상세정보
mktime지정된 날짜를 timestamp(초단위 유닉스시간)값으로 변환한다.
예)mktime(시,분,초,월,일,년)
상세정보
strftime특정한 포맷으로 날짜 정보를 출력하는데 언어를 지정할수 있다.상세정보
time현재 시각을 timestamp값으로 구한다.상세정보

문자열 함수

함수설명상세정보
AddCSlashesC 형식으로 문자열에 슬래쉬를 덧붙인다.상세정보
addslashes작은따옴표 큰따옴표와 같은 특정문자 앞에 역슬래시 문자를 붙인다.상세정보
bin2hex바이너리 데이터를 16진수 표현으로 바꾼다.상세정보
chop문자열의 끝에 있는 공백문자를 제거하고 문자열을 반환한다.상세정보
chr특정 문자를 반환한다.chr()함수는 아스키함수에 해당하는 문자를 반환한다.ord()함수는 문자열에서 첫번째 문자에 아스키코드값을 반환한다.상세정보
chunk_split문자열을 작은 조각으로 나눕니다.상세정보
count_chars문자열 안에 사용한 문자에 대한 정보를 반환합니다.상세정보
crc32str의 32비트 순환 반복 체크섬 값을 생성합니다. 보통 모든 데이터가 전송되었는지 확인하는 데에 사용합니다.상세정보
crypt단방향 문자열 암호화(해슁).상세정보
echo하나 이상의 문자열을 출력합니다.상세정보
explode문자열을 주어진 문자열을 기준으로 분리합니다.상세정보
fprintf문자열을 형식화하여 스트림에 기록합니다.상세정보
hebrev논리 헤브라이어 텍스트를 표시 텍스트로 변환합니다.한 줄에 출력할 최대 문자 수를 지시합니다.상세정보
hebrevc개행 문자(\n)를 "<br>\n"로 바꾼는 점을 제외하면, hebrev()와 동일합니다.상세정보
html_entity_decode모든 HTML 엔티티를 해당하는 문자로 변환합니다.상세정보
htmlentities해당하는 모든 문자를 HTML 엔티티로 변환합니다.상세정보
htmlspecialchars특수 문자를 HTML 엔터티로 변환합니다.
'&'(앰퍼샌드)는 '&'가 됩니다.
'"'(큰 따옴표)는 ENT_NOQUOTES를 지정하지 않았을 때 '"'가 됩니다. 
'''(작은 따옴표)는 ENT_QUOTES를 지정했을 때만 '''가 됩니다. 
'<'(보다 작음)는 '<'가 됩니다. 
'>'(보다 큼)는 '>'가 됩니다. 
상세정보
implode모든 배열 원소를 순서대로, 각각의 원소 사이에 glue 문자열을 덧붙인 문자열 표현을 반환합니다.상세정보
localeconv숫자 형식화 정보를 얻습니다.상세정보
ltrim문자열 시작 부분의 공백을 제거합니다.상세정보
md5_file주어진 파일명의 md5 해쉬를 계산합니다.상세정보
md5문자열의 md5 해쉬를 계산합니다.해쉬는 16진수의 32문자입니다.상세정보
nl2br문자열의 모든 줄바꿈 앞에 HTML 줄바꿈 태그를 삽입합니다.상세정보
number_format숫자를 천 단위로 구분하여 포맷합니다.상세정보
ord문자의 아스키 값을 반환합니다.상세정보
print문자열을 출력합니다.상세정보
printf형식화한 문자열을 출력합니다.상세정보
quotemeta메타 문자를 인용합니다.문자 앞에 백슬래쉬(\)를 덧붙인 str을 반환합니다.상세정보
rtrim문자열 끝 부분의 공백을 제거합니다.상세정보
similar_text두 문자열 간의 유사성을 계산합니다.상세정보
sprintf형식화한 문자열을 반환합니다.상세정보
str_ireplace대소문자를 구별하지 않는 str_replace().상세정보
str_pad문자열을 어떠한 길이가 되도록 다른 문자열로 채웁니다.상세정보
str_repeat문자열을 반복합니다.상세정보
str_replace발견한 모든 검색 문자열을 치환 문자열로 교체합니다.상세정보
str_shuffle문자열을 랜덤하게 섞습니다.상세정보
str_split문자열을 배열로 변환합니다.상세정보
strip_tags문자열에서 HTML과 PHP 태그를 제거합니다.상세정보
stripcslashesaddcslashes()로 처리한 문자열을 되돌립니다.상세정보
stripos대소문자를 구별하지 않고 문자열이 처음 나타나는 위치를 찾습니다.상세정보
stripslashesaddslashes()로 처리한 문자열을 되돌립니다.상세정보
strlen문자열의 길이를 구합니다.상세정보
strpos문자열이 처음 나타나는 위치를 찾습니다.상세정보
strrchr문자열에서 문자가 마지막으로 나오는 부분을 찾습니다.상세정보
strrev문자열을 뒤집습니다.상세정보
strripos문자열에서 대소문자 구별 없이 문자열이 나타나는 마지막 위치를 찾습니다.상세정보
strrpos문자열에서 마지막 문자의 위치를 찾습니다상세정보
strstr문자열이 처음으로 나타나는 부분을 찾습니다상세정보
strtolower문자열을 소문자로 만듭니다.상세정보
strtoupper문자열을 대문자로 만듭니다.상세정보
strtr특정 문자를 번역한다.상세정보
substr_count부분문자열의 수를 센다상세정보
substr_replace문자열의 일부를 치환한다.상세정보
substr문자열의 일부를 반환한다.상세정보
trim문자열의 처음과 끝에 있는 공백을 제거한다.상세정보
ucfirst문자열의 처음 글자를 대문자로 만든다.상세정보
ucwords문자열에 있는 각 단어의 처음 글자를 대문자로 바꾼다.상세정보
wordwrap정지문자를 이용해 주어진 수 만큼의 문자를 래핑한다.상세정보

 

PHP 프로그래밍 언어에 대해 간략하게 알아보자.

PHP는 서버측 스크립트 언어이다. PHP는 HTML 코드 안이나 바깥에서 자유자재로 작동한다.

PHP 소스는 <? 으로 시작해서  ?> 마무리 되거나, <?php 로 시작해서 ?>으로 마무리 된다. 또 <SCRIPT LANGUAGE="PHP"> 로 시작해서 </SCRIPT>로 마무리해도 된다. 이것은 HTML과 분리하기 위함이다. 그래서 이러한 태그를 Escaping Form HTML(html로부터 탈출)이라 부른다. 그리고 하나의 명령문을 마무리 지을 때는  ‘;’으로 처리한다.


주석처리는 다음과 같다.

//..........한 줄 주석

#...........한 줄 주석

/*

는 여러 줄 주석이 필요할 때 사용한다.

*/

참고 ☞ HTML 주석은 <!-- 으로 시작해서 -->으로 마무리 된다.


예제) test.php 

<? 

echo "php는 정말 훌륭한 ";   

print "프로그래밍 언어이다."; 

?> 

 


이 파일을 서버에 업로드 시켜놓고 연결을 하면 "php는 정말 훌륭한 프로그래밍 언어이다.“가 출력된다. echo 와 print는 문자열을 출력하는 함수이다.