정규식 체크.


< php >


1. 이메일 체크

preg_match("/([0-9a-zA-Z_-]+)@([0-9a-zA-Z_-]+)\.([0-9a-zA-Z_-]+)/", $mb_email)


2. 휴대폰 체크(hyphen 포함)

/^\d{3}-\d{3,4}-\d{4}$/


3. 휴대폰 하이픈 넣기

preg_replace("/(0(?:2|[0-9]{2}))([0-9]+)([0-9]{4}$)/", "\\1-\\2-\\3", $hp_no);



< Javascript >


1. 휴대폰 하이픈 넣기.

var hp = $('#od_hp').val().replace(/-/gi, "");

hp = hp.replace(/(^02.{0}|^01.{1}|[0-9]{3})([0-9]+)([0-9]{4})/,"$1-$2-$3");


2. 휴대폰 정규식 체크.

var hp_chk = /^\d{3}-\d{3,4}-\d{4}$/;

if(!hp_chk.test(hp)){

alert("잘못된 연락처입니다");

return;

}



Posted by 경제/부동산/프로그래머/안드로이드/PHP/mysql/asp 당양부부

php 에서 코딩을하다보면 인코딩이 꼬여 한글이 깨지는 현상이 나타난다...

개발자의 적은 한글이라는 소리가 있듯이? ㅋㅋ 이럴때 사용 하는 방법이

 

1. iconv 함수 사용.

iconv('현재인코딩','바꿀인코딩','문자열');

 

2. mb_convert_encoding 함수 사용(한글, 중국어 등 2byte 이상 문자를 지원).

mb_convert_encoding('문자열', '바꿀인코딩', '현재인코딩');


3. EUC-KR보다 cp949(한글 완성형) 사용 장려.

Posted by 경제/부동산/프로그래머/안드로이드/PHP/mysql/asp 당양부부

자바스크립트로 새로운 페이지를 여는 경우

file 내 링크에서 새로운 페이지를 여는 경우

https 프로토콜에서 새로운 페이지를 http: 프로토콜로 여는 경우에는


보안을 위해서 이전 문서 정보 (PHP 문장을 기준으로 한다면, $_SERVER['HTTP_REFERER'] 변수값) 을 전달하지 않는다는 것....



Posted by 경제/부동산/프로그래머/안드로이드/PHP/mysql/asp 당양부부

str_replace('찾을 문자열', '변경할 문자열', '해당 문자열')

​preg_replace(/찾을 문자열/, '변경할 문자열', '해당 문자열')

 

​문자열을 검색해 치환 문자열로 변경한다.

​preg_replace의 경우 정규표현식의 이 가능.

Posted by 경제/부동산/프로그래머/안드로이드/PHP/mysql/asp 당양부부

[Session]
session.save_handler = files
session.save_path = /tmp
session.use_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.gc_maxlifetime = 1440
session.cache_expire = 180


session.save_handler :
기본적으로 Files 방식을 이용한다.
session_module_name() 을 통하여 현재 설정된 정보를 볼 수 있다. 공유 메모리를 사용하는 MM방식과 USER방식을 지원하다.
USER방식을 사용하는 경우에는 session_set_save_handler(string open, string close,string read, string write, string destroy, string gc)을 이용하여session_set_save_handler("함수명", "함수명", "함수명", "함수명", "함수명", "함수명")과 같이콜백 함수를 정의하고 콜백 함수를 호출하여 세션 데이터나 세션ID등을 데이터베이스 등에 보관하여 사용할 수도 있다.


session.save_path :
세션 파일을 저장할 경로을 의미하고 files 방식에서는 /tmp가 기본적인 파일이 저장되는 디렉토리의 절대 경로이다.


session.use_cookies :
세션과 함께 쿠키를 사용할 것인가에 대한 설정으로 기본적으로 쿠키와 함께 사용하도록 되어 있다.
쿠키를 사용하지 않는 경우에는 0으로 설정하고 버전에 따라서는 On과 Off로 설정하기도 한다.


session.name :
세션ID를 쿠키에 저장한 경우 PHP에서 세션ID를 확인하기 위한 변수명을 의미한다.
기본값으로 PHPSESSID로 설정되어 있으며$PHPSESSID라고 하면 세션ID를 확인할 수 있다.


session.auto_start :
PHP시작과 동시에 세션이 자동으로 스타트 되도록 하는 옵션이다.
기본값은 0으로 자동으로 시작되지 않도록 되어 있다.
그러므로 세션을 사용하기 전에는 session_start()를 호출해야 하고, 자동으로 시작하게 하려면 1로 설정하면 된다.
버전에 따라서는 On과 Off로 설정하기도 한다.


session.cookie_lifetime :
세션ID를 저장한 쿠키의 활성화 시간 또는 유효 시간을 설정하는 것이다.
기본값으로는 0이 설정되어 있어 브라우저가 종료되면 자동으로 쿠키값은 삭제된다.
session_set_cookie_params()함수를 이용하여 쿠키의 유효 시간을 변경할 수 있으며 PHP.INI를 수정하여 쿠키 적용 시간을 변경 가능하다.


session.cookie_path :
세션ID가 저장된 쿠키가 적용될 유효 경로(디렉토리)를 설정하는 부분이다.
기본값은 "/"로 모든 경로에서 적용 가능하도록 설정되어 있다.
session.cookie_lifetime과 같이 session_set_cookie_params()함수를 이용하여 쿠키의 적용 디렉토리를 변경할 수 있다.


session.gc_maxlifetime :
사용되지 않는 것으로 보이는 세션 데이터를 삭제한다.
세션ID를 삭제하는 것이 아니라 기본 설정 시간인 1440초 동안 아무런 요청이 없을때 자동으로 세션 데이터를 삭제하도록 되어 있다.
이렇게 자동으로 삭제하는 이유는 서버의 부하를 줄이기도 하지만 클라이언트에서 접속을 종료하였는지 여부를 확인할수 없으므로1440초 동안 사용하지 않는 데이터는 삭제하게 한다.


session.cache_expire :
서버에 저장된 세션ID의 활성화 시간이다.
클라이언트에서 브라우저를 닫아버리면 서버에서는 클라이언트가 연결중인지 아닌지 확인하는 방법이 없으므로 미리 세션데이터를 삭제하고 세션ID는 180분 이후에 삭제시킨다.
만약 세션 ID를 삭제하지 않으려면 PHP.INI를 수정하여 시간을 늘려주면 된다.



세션을 핸들링하려면 세션 저장 디렉토리를 별도로 사용해야 한다.

session_save_path("저장디렉토리");
ini_set("session.cache_expire", 180); // 세션 유효시간 : 분
ini_set("session.gc_maxlifetime", 86400); // 세션 가비지 컬렉션(로그인시 세션지속 시간) : 초



Posted by 경제/부동산/프로그래머/안드로이드/PHP/mysql/asp 당양부부

배열을 URL GET 변수로 만들어 주는 함수 - http_build_query   PHP  

 

이런 자잘한 함수를 알면 시간이 절약되고 코드가 깔끔해 진다. 특히 자잘한 함수들에 자잘하게 신경쓸 게 많은 경우 그렇다.

코드를 한 번 보자.

<a target="_blank" href="http://twitter.com/share?text=<?php echo urlencode('[맑시즘 2011]'.$page_title)?>&url=http://<?php echo $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']?>&via=marxismTwit" title="트위터로 퍼가요">

이걸 이렇게 만들 수 있다.


$twitter_query_array = array(

    'text'=>'[맑시즘 2011]'.$page_title,

    'url'=>'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'],

    'via'=>'marxismTwit'

);

$twitter_query = http_build_query($twitter_query_array);


<a target="_blank" href="http://twitter.com/share?<?php echo $twitter_query?>" title="트위터로 퍼가요">


GET 변수를 직접 쓰는 방식이 아니라 array로 만든 후 http_build_query 함수를 이용해 변환하는 방식을 사용하면 장점이 있다.

일단, 위에서 볼 수 있는대로 URL 길이가 줄어든다.

다음으로, 변수와 값의 쌍이 1줄에 1개씩 들어가는 것으로 관리되므로, SVN 같은 버전관리 시스템에서 관리하기 용이하다.

알아보기 쉬움은 물론이다.

마지막으로 한글이나 특수문자가 들어가는 경우 urlencode 함수를 사용해 줘야 하는데 알아서 변환해 준다.

Posted by 경제/부동산/프로그래머/안드로이드/PHP/mysql/asp 당양부부

2015.04.20 11:22 IT/PHP

PHP XSS filter function

출처 : http://kallahar.com/smallprojects/php_xss_filter_function.php


function RemoveXSS($val) { 
   // remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed 
   // this prevents some character re-spacing such as <java\0script> 
   
// note that you have to handle splits with \n, \r, and \t later since they *are* 
   // allowed in some inputs
 
   $val = preg_replace('/([\x00-\x08][\x0b-\x0c][\x0e-\x20])/''', $val); 
    
   // straight replacements, the user should never need these since they're normal characters 
   
// this prevents like <IMG SRC=&#X40&#X61&#X76&#X61&#X73&#X63&#X72&#X69&#X70&#X74&
   // #X3A&#X61&#X6C&#X65&#X72&#X74&#X28&#X27&#X58&#X53&#X53&#X27&#X29>
 
   $search = 'abcdefghijklmnopqrstuvwxyz'
   $search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
   $search .= '1234567890!@#$%^&*()'
   $search .= '~`";:?+/={}[]-_|\'\\'
   for ($i = 0; $i < strlen($search); $i++) { 
   // ;? matches the ;, which is optional 
   // 0{0,7} matches any padded zeros, which are optional and go up to 8 chars 
    
   // &#x0040 @ search for the hex values 
      $val = preg_replace('/(&#[x|X]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); 
      // with a ; 

      // &#00064 @ 0{0,7} matches '0' zero to seven times 
      $val = preg_replace('/(&#0{0,8}'.ord($search[$i]).';?)/', $search[$i], $val); // with a ; 
   } 
    
   // now the only remaining whitespace attacks are \t, \n, and \r 
   $ra1 = Array('javascript''vbscript''expression''applet''meta''xml''blink''link''style'
'script''embed''object''iframe''frame''frameset''ilayer''layer''bgsound''title''base'); 
   $ra2 = Array('onabort''onactivate''onafterprint''onafterupdate''onbeforeactivate''onbeforecopy''onbeforecut''onbeforedeactivate','onbeforeeditfocus''onbeforepaste''onbeforeprint''onbeforeunload''onbeforeupdate''onblur''onbounce''oncellchange''onchange','onclick''oncontextmenu''oncontrolselect''oncopy''oncut''ondataavailable''ondatasetchanged''ondatasetcomplete''ondblclick','ondeactivate''ondrag''ondragend''ondragenter''ondragleave''ondragover''ondragstart''ondrop''onerror''onerrorupdate','onfilterchange''onfinish''onfocus''onfocusin''onfocusout''onhelp''onkeydown''onkeypress''onkeyup''onlayoutcomplete''onload','onlosecapture''onmousedown''onmouseenter''onmouseleave''onmousemove''onmouseout''onmouseover''onmouseup','onmousewheel''onmove''onmoveend''onmovestart''onpaste''onpropertychange''onreadystatechange''onreset''onresize','onresizeend''onresizestart''onrowenter''onrowexit''onrowsdelete''onrowsinserted''onscroll''onselect''onselectionchange','onselectstart''onstart''onstop''onsubmit''onunload'); 
   $ra = array_merge($ra1, $ra2); 
    
   $found = true; // keep replacing as long as the previous round replaced something 
   while ($found == true) { 
      $val_before = $val; 
      for ($i = 0; $i < sizeof($ra); $i++) { 
         $pattern = '/'
         for ($j = 0; $j < strlen($ra[$i]); $j++) { 
            if ($j > 0) { 
               $pattern .= '('
               $pattern .= '(&#[x|X]0{0,8}([9][a][b]);?)?'
               $pattern .= '|(&#0{0,8}([9][10][13]);?)?'
               $pattern .= ')?'
            } 
            $pattern .= $ra[$i][$j]; 
         } 
         $pattern .= '/i'
         $replacement = substr($ra[$i], 0, 2).'<x>'.substr($ra[$i], 2); // add in <> to nerf the tag 
         $val = preg_replace($pattern, $replacement, $val); // filter out the hex tags 
         if ($val_before == $val) { 
            // no replacements were made, so exit the loop 
            $found = false; 
         } 
      } 
   } 
   return $val; 

Posted by 경제/부동산/프로그래머/안드로이드/PHP/mysql/asp 당양부부

2015.04.03 11:57 IT/PHP

php-mysql 개행 적용.

<?=nl2br($row["am_memo"])?>

Posted by 경제/부동산/프로그래머/안드로이드/PHP/mysql/asp 당양부부

언제부터선가 session을 사용하게 되었습니다.


그런데 또 언제서부턴가, form에서 전송후, Back을 하게 되면,


form을 재전송하지 않는다는, 백지 화면이 뜨더군요.


처음에는 원인조차 파악하지 못하다가, 최근에야 그 이유와 해결책을 알아내었습니다.




보통 session을 사용하실때, session_start() 함수를 사용하게 됩니다.


저같은 경우는 공통 헤더 파일의 상단에 이 함수를 자동으로 실행하게 해놓습니다. 물론 php.ini 셋팅을 통해 자동으로 실행되게 할 수도 있지만,


서버간의 프로그램 이식성을 위해 저같은 경우엔 프로그램 레벨에서 실행해 줍니다.


php.ini에 보시면 요런 부분이 있습니다.




session.cache_limiter = nocache ; set to nocache,private,public} to




이건 세션이 스타트될때 참고되는 부분중 하나입니다.


제 서버의 경우엔 기본값이 nocache로 되어 있습니다.


nocache의 경우엔, 브라우저에 캐슁돼지 않는 것은 기본이고, form도 재전송되지 않습니다.


그래서 form을 전송하고 난 후의 페이지에서 history.back()을 할경우, 하얀 화면이 나오는 것입니다.


그러면 어떻게 해줘야 하냐구요..




php.ini의 윗 구절을 자세히 보시면, cache_limiter를 세가지로 셋팅할 수 있다고 되어 있습니다. "nocache", "private", "public"...


document를 찾아보니..




Setting the cache limiter to nocache, for example, would disallow any client-side caching.


A value of public, however, would permit caching. It can also be set to private, which is slightly more restrictive than public.




"public"은 브라우저 캐슁을 허용하는 것이고, "private"는 public과 거의 유사하지만, 조금더 제한적이라고 하고 있습니다.


실제 이용을 해본결과, 저는 둘의 차이를 이해하지 못하겠습니다.


근데 이 둘을 이용할 경우에, history.back() 문제는 해결되지만, 반대로 정말 캐슁이 잘되어, 내용이 변하질 않습니다.


환장할 노릇이지여~~




이곳 저곳을 쑤시고 다니고, 모두 테스트 해본 결과,,


그 답을 찾았습니다.




바로 'nocache, must-revalidate' 입니다.




이것은 캐싱은 허용하지 않되, form은 재전송할 수 있도록 한다는 것입니다.




이걸 사용해본 결과, 현재 일주일정도 테스트해봤는데, 다이나믹 컨텐츠의 경우 컨텐츠도 잘 변경되고, form 전송시에서 back이 아주 잘됩니다.


cache_limiter는 php.ini에서 셋팅하지 않고 함수호출로도 사용할 수있습니다.


session_cache_limiter('nocache, must-revalidate');


이렇게 해주면 , php.ini에 셋팅한 것과 동일한 효과를 나타냅니다. 아까도 말씀드렸지만, 서버간에 서로 셋팅이 다를 수 있어서, 저는 소프트웨어 레벨에서 이런 문제점들을 다루려고 최대한 노력합니다.




저 함수를 반드시 session_start() 전에 호출해 주어야만 적용이 됩니다.


그런데 간혹, form 재전송도 허용하지 않아야 할때가 있습니다. 즉 완전 nocache 해주어야 할 때가 있다는 것이죠..




예를 들면, 쇼핑몰 등에서 결제 정보 입력 페이지 등은, 보안상의 이유나 중복 결제 방지를 위해서 form을 재전송해서는 안되는 경우입니다.




이럴때는 cache_limiter를 nocache로 셋팅합니다.




이런것들을 융통성있게 할 수 있도록 다음과 같은 방법을 저는 사용합니다.




이건 제가 공통으로 프로그램파일의 젤 상단에 포함시키는 헤더 파일의 일부분입니다.


if($SESSION_CACHE_LIMITER){


session_cache_limiter($SESSION_CACHE_LIMITER);


} else {


session_cache_limiter('nocache, must-revalidate');


}


session_start() ;




이렇게 해서 기본값은 폼 재전송을 허용하도록 하고, 특별하게 셋팅할 경우가 있을때에는, 이 헤더파일을 포함시키기 전에, $SESSION_CACHE_LIMITER라는 변수에 값을 대입시켜 줍니다.


많은 도움이 되시길 바라면..


출처 : PHPSCHOOL , shellbru님의 글

'IT > PHP' 카테고리의 다른 글

PHP XSS filter function  (0) 2015.04.20
php-mysql 개행 적용.  (0) 2015.04.03
[소스] SESSION 사용시, Back을 이용할 수 있게.  (0) 2015.03.19
PHP Server 변수. $_SERVER  (0) 2015.03.12
PHP 파일 업로드 ( input type file )  (0) 2013.07.19
php $_SERVER, $_Server  (0) 2013.07.19
Posted by 경제/부동산/프로그래머/안드로이드/PHP/mysql/asp 당양부부

$_SERVER['DOCUMENT_ROOT'] : 사이트 루트의 물리적 경로. ex) /home/dyang34/www



$_SERVER['HTTP_ACCEPT_ENCODING'] : 인코딩 받식. ex) gzip, deflate



$_SERVER['HTTP_ACCEPT_LANGUAGE'] : 언어. ex) ko



$_SERVER['HTTP_USER_AGENT'] : 사이트 접속한 클라이언트 프로그램 정보. ex) Mozilla/4.0(compatible; MSIE 7.0; Windows NT 5.1; Q312461; .NET CLR 1.0.3705



$_SERVER['REMOTE_ADDR'] : 사이트 접속한 클라이언트의 IP. ex) 192.168.10.111



$_SERVER['HTTP_REFERER'] : 현제 페이지로 오기전의 페이지 주소값. <a> 또는 <form> 태그로 전송시 값이 넘어옴. 

ex) http://dyang34.tistory.com/view.php 



$_SERVER['SCRIPT_FILENAME'] : 실행되고 있는 파일의 전체경로. ex) /home/dyang34/www/index.php



$_SERVER['SERVER_NAME'] : 사이트 도메인 : dyang34.tistory.com (virtual host에 지정한 도메인)



$_SERVER['HTTP_HOST'] : 사이트 도메인 : dyang34.tistory.com (접속할 때 사용한 도메인)



$_SERVER['SERVER_PORT'] : 사이트 포트. ex) 80



$_SERVER['SERVER_SOFTWARE'] : 서버의 소프트웨어 환경

ex) Apache/1.1.1 (Unix) PHP/5.2.7 mod_fastcgi/2.2.10 mod_throttle/3.1.2 mod_ssl/2.8.6



$_SERVER['GATEWAY_INTERFACE'] : CGI 정보. ex) CGI/1.1



$_SERVER['SERVER_PROTOCOL'] : 사용된 서버 프로토콜. ex) HTTP/1.1



$_SERVER['REQUEST_URI'] : 현재페이지의 주소에서 도메인 제외. ex) /index.php?user=dyang34&name=na



$_SERVER['PHP_SELF'] : 현재페이지의 주소에서 도메인과 넘겨지는 값 제외. ex) /test/index.php

 - 파일명만 가져올때 : basename($_SERVER['PHP_SELF']);



$_SERVER['APPL_PHYSICAL_PATH'] : 현재페이지의 실제 파일 주소. ex) /home/dyang34/www/



$_SERVER['QUERY_STRING'] : GET 방식의 파일명 뒤에 붙어서 넘어오는 파라미터 값. ex) ?user=dyang34&name=na



모든 환경 변수를 보고 싶으면 print_r($GLOBALS);

Posted by 경제/부동산/프로그래머/안드로이드/PHP/mysql/asp 당양부부
이전버튼 1 2 이전버튼

블로그 이미지
경제를 좋아하는 일산의 행복한 프로그래머입니다. 감사합니다.
당양부부
Yesterday31
Today3
Total107,629

달력

 « |  » 2018.06
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

최근에 달린 댓글

최근에 받은 트랙백

글 보관함