https://analyticsacademy.withgoogle.com/course01/course

Posted by 이상욱1
,

u가 CTR+Z실행취소 

ctr+R 이 CTR+Y 

Posted by 이상욱1
,

htmlspecialchars

PHP 2015. 8. 12. 11:07

태그를 안먹게 한다 태그를 string 으로 바꿔 준다 


htmlspecialchars

(PHP 4, PHP 5)

htmlspecialchars — Convert special characters to HTML entities

Description ¶

string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ]]] )

Certain characters have special significance in HTML, and should be represented by HTML entities if they are to preserve their meanings. This function returns a string with these conversions made. If you require all input substrings that have associated named entities to be translated, use htmlentities() instead.

If the input string passed to this function and the final document share the same character set, this function is sufficient to prepare input for inclusion in most contexts of an HTML document. If, however, the input can represent characters that are not coded in the final document character set and you wish to retain those characters (as numeric or named entities), both this function and htmlentities() (which only encodes substrings that have named entity equivalents) may be insufficient. You may have to use mb_encode_numericentity() instead.

The translations performed are:

  • '&' (ampersand) becomes '&'
  • '"' (double quote) becomes '"' when ENT_NOQUOTES is not set.
  • "'" (single quote) becomes ''' (or ') only when ENT_QUOTES is set.
  • '<' (less than) becomes '&lt;'
  • '>' (greater than) becomes '&gt;'

Parameters ¶

http://php.net/manual/en/function.htmlspecialchars.php

Posted by 이상욱1
,

php date() 함수

PHP 2015. 8. 11. 10:09

$today date("Y-m-d H:i:s");        // 2001-03-10 17:16:18 (the MySQL DATETIME format)



http://php.net/manual/en/function.date.php

'PHP' 카테고리의 다른 글

php 와 java에서 string 사용시 큰차이  (0) 2015.08.27
htmlspecialchars  (0) 2015.08.12
php explode 문자열 잘라 쓰기  (0) 2015.08.07
php와 java string 연결 문법 차이  (0) 2015.08.07
페이징 처리를 하는 이유  (0) 2015.08.03
Posted by 이상욱1
,

final

java 2015. 8. 11. 09:10

final, static, abstract, synchronized


변수나 함수 선언시, 해당 변수나 함수 활용 방법에 대한 modifier를 설정할 수 있다.


 modifier

 구분

설명 

final 

 변수 선언

 변수를 상수로 이용하는 경우 사용한다. 

 함수 선언

 오버라이딩이 불가능한 메쏘드를 정의할 때 이용한다.

static 

 변수 선언

 클래스에 소속된 클래스 변수를 의미한다. 클래스 생성시 만들어진다.

 함수 선언

 abstract

함수 선언

 추상 메쏘드를 의미한다. 하위 클래스에 의해 구현된다.

 synchronized

함수 선언

 thread의 동기화를 의한 메쏘드이다. 

http://hyeonstorage.tistory.com/177



자바의 상속을 방지하는 명령어(final)

자바의 상속에 대해서 저번에 공부했었는데 final이란 키워드를 잠시 언급했었다. final이 어떨때 필요하고 어떻게 쓰이는지 알아보는 시간을 갖기로 하자. final 말그대로 마지막 최종 종결자(?)다. class 앞에 final이 붙으면 이 클래스는 상속할수 없게 된다. 메소드의 경우도 마찬가지로 앞에 final이 붙으면 이 메소드는 오버라이드 해서 재정의할수 없게 된다. 상속시 전부 똑같은 형태 즉 메소드 오버라이드해서 내용은 자기가 원하는 입맛대로 쓸수 있었지만 final이 붙었을 경우 이렇게 재정의해서 쓰는것이 불가능하다.


final class Parent
{
   final int total=0;

   final void pmethod( )
   {
       int a=0;
   }
}

class Child extends Parent  //final 때문에 상속불가능해서 에러남.
{
   int total=100; //final 때문에 값을 변경하지 못해서 에러남.

   void pmethod( )  //final 때문에 오버라이드 불가능해서 에러남.
   {
      int a=100;
   }
}

위의 예제에서 보듯이 설령 class 앞에 final이 없어서 상속까진 되었다고 하더라도 메소드에 final이 있으면 역시 에러난다. 변수에 붙어도 마찬가지로 final이 있으면 초기화된 그 값은 절대 변경할수 없다. 그렇다면 자바에서는 왜 이런 기능을 만들어 놓았을까?

여러분이 프로그램을 만들때 어떤 변수는 그 값을 변경하면 안되는 것이 있을수도 있고 혹은 보안을 위해서 어떤 메소드는 항상 똑같은 기능 이외에 다르게 쓰면 안되는 경우가 있을수 있다. 클래스에 final을 걸어놓으면 아예 상속이 불가능하여 원천적인 봉쇄가 가능해 완벽한 은닉이 가능해진다. 대표적인 final 클래스의 예로 우리가 jdk api에서 불러 쓰고 있는 System이나 String, 혹은 Math 클래스 같은 것들이 있다. 누군가가 System 클래스를 상속받아 재정의해 버린다면 제작자의 의도와는 다르게 치명적인 에러가 날수 있다. 이를 방지하기 위해 이런 중요한 클래스들은 자바에서 이미 final로 만들어 놓았다.

부분적으로도 가능한데 메소드의 예를 들자면, 뭔가 열리는 기능을 갖춘 open( ) 이라는 메소드를 만들었는데 누군가가 이를 오버라이드 해서 open( ) 메소드를 열리는게 아닌 뭔가 닫히는 기능으로 바꿔버린다면 전체 프로그램이 엉망이 될것이다. 이렇게 상속해서 공유해 쓰는것은 가능하지만 부분적으로 변경을 원하지 않는 경우 우리는 그 부분을 final로 만들면 이런 발생가능한 위험을 사전에 차단할수 있다.

또한 final은 프로그램의 성능 향상에 기여한다. 지금 단계에서 할말은 아닌듯 하지만 자바에서는 메소드가 하위 클래스에서(상속받은 클래스에서) 오버라이드 하는지 안하는지 검사를 한다. 그런데 메소드 앞에 final이 붙어있으면 자동으로 이런 검사를 안하게 되어 메소드 호출시 속도를 높여 성능향상에 기여하게 된다.

다시 정리하자면,
final이 붙은 클래스는 상속할수 없다.
final이 붙은 메소드는 오버라이드할수 없다.
final이 붙은 초기화된 변수(final int a=0;)는 값을 변경할수 없다.(a=1; 불가능)
final이 붙은 선언만된 변수(final int a;)는 값을 오직 한번만 넣을수 있다.
(a=1; 가능, 하지만 두번째부터는 a=0; 불가능)
오직 한번이라고 했으니 그 다음부터 1 이외의 다른 값으로 변경불가능하다.

자바의 상속에 대해서 공부하고 느끼겠지만 그에 대한 파장(?)이 얼마나 큰지 몸소 체험하고 있을 것이다. 아직도 갈길이 멀다. 그래서 오늘은 강좌를 본의아니게 짧게 마무리한다. 다음시간을 위해 에너지(?)를 비축해두기 바란다.^^


'java' 카테고리의 다른 글

자바에서 os 값들 가지고오기  (0) 2016.01.05
자신 메모리 보는 코드  (0) 2015.10.04
자바 쉽게 업데이트  (0) 2015.07.22
이클립스 전체폴더 키워드 찾기  (0) 2015.07.10
이클립스 여러줄 제어 단축키  (0) 2015.07.09
Posted by 이상욱1
,

PHP 문자열 자르기 explode 함수

php explode 함수는 문자열을 지정된 문자열로 나눈 후 배열로 리턴을 해주는 함수입니다.

아래의 예제는 $a에 저장된 문자열을 콤마(,)로 나누어 배열로 리턴하고 그 결과를 $aa에 받아서 처리하는 예제이구요

$a = "손오공,저팔계,사오정";

$aa = explode(",", $a);

echo $aa[0]; // 손오공

echo $aa[1]; // 저팔계

echo $aa[2]; // 사오정


이해를 돕기위한 또 다른 문자열 자르기 예제

$a = "백두산:::한라산:::설악산:::지리산";

$aa = explode(":::", $a);

echo $aa[0]; // 백두산

echo $aa[1]; // 한라산

echo $aa[2]; // 설악산

echo $aa[3]; // 지리산


이해가 조금 되시지요.


http://php.net/manual/en/function.explode.php

http://tipsbox.tistory.com/50

'PHP' 카테고리의 다른 글

htmlspecialchars  (0) 2015.08.12
php date() 함수  (0) 2015.08.11
php와 java string 연결 문법 차이  (0) 2015.08.07
페이징 처리를 하는 이유  (0) 2015.08.03
조회수 제어 방법과 쿠키 set 하는법  (0) 2015.08.03
Posted by 이상욱1
,

.$sDate[1].'/'.$sDate[2].'/'.$sDate[0].



php 는 "abc"."def"."ghij" 와 같이 . 으로서 연결해준다 

java 는 "abc"+"def"+"ghij" 와 같이 +으로서 문자열을 연결해준다 

Posted by 이상욱1
,

END 누른담에 shift + Home

Posted by 이상욱1
,

페이징이라는건 주로 게시판 목록에서 하단에 존재하는 1 ~ 10, 11 ~ 20과 같이 각 페이지를 볼 수 있게하는 기능을 말합니다.

이런 기능이 필요한 이유가 뭘까요?



먼저 한 목록에 모든 페이지가 나오게 되면 스크롤이 길어집니다.

사용자가 가독성이 떨어지게 되고 글을 찾기도 힘들죠.


그리고 요청 데이터가 많은 만큼 페이지의 로딩 속도(모바일의 경우 데이터 문제도 있음)도 많이 느려지겠죠.


하지만 가장 중요한 부분은 페이징 기능을 사용함으로써 DB에 대한 부하가 줄어듭니다.

만약 게시판에 10000개의 글이 존재하는 게시판에 만명의 사용자가 들어왔는데, 모든 글을 출력해준다고 하면 어떻게 될까요?

모두에게 10000개의 글을 보여주기 전에 DB 서버가 과부하가 걸려서 멈출겁니다.


페이징을 사용하게 되면 적당한 양의 글을 나눠서 보여줄 수 있습니다.

이제 코드를 보며 페이징의 작동 방식을 알아봅시다.


http://blog.kurien.co.kr/529

Posted by 이상욱1
,

여기서 조회수를 제한할 수 있는 세 가지의 방법이 있는데요,

쿠키와 세션, DB를 이용한 방법이 있습니다.


여기서 쿠키를 이용한 방법은 제가 사용했으니 세션과 DB에 대해서 먼저 설명하겠습니다.


세션은 서버에 저장되는 변수라고 생각하시면 되겠습니다.

서버의 한 장소에 데이터를 저장해놓고 필요할 때 찾아서 사용하는 방식이죠.

이런 방식을 사용하는 이유는 기본적인 HTML이나 JavaScript 만을 가지고는 사용자 자신이 누군지 서버에게 알려줄 수가 없기 때문입니다.

세션같은 것이 없다면 로그인을 하더라도 다음 페이지로 넘어가는 순간 풀려버리게 되는거죠.


여기서 세션을 사용하지 않은 이유는 세션은 위에 적었듯이 서버에 저장이 됩니다.

조회수가 프로그램상 정말 중요한 부분이라면 세션이나 DB를 사용해야겠지만,

일반적인 게시판에서는 조회수가 큰 작용을 하지 않기 때문에 쿠키를 이용했습니다.


DB의 경우도 서버에 저장되지만 조회수를 올렸던 사용자가 누구인지 알기 위해서는 ip, 조회수를 올렸던 시간, 글 번호 이 세 가지가 필요합니다.

게다가 계속 DB에 쌓이면 느려지니 삭제도 해줘야 하구요.


쿠키는 위의 두 방법과는 다르게 클라이언트(사용자)의 PC에 저장됩니다.
클라이언트에 저장되는 세션이라고 생각하시면 되겠습니다.


대신 쿠키는 사용자가 맘대로 접근을 할 수 있기 때문에 쿠키를 이용할 때는 보안과는 관련 없는 기능에 사용해야하죠.

그리고 쿠키를 지우게 되면 조회수가 한번 더 오르기 때문에 딱히 하든 안하든 차이가 없는 것 같지만,

조회수 같은 중요하지 않은 기능에 그런 시간을 투자할만한 사람은 적다고 생각됩니다.


이러한 이유로 쿠키를 이용했구요.

이 글을 보시는 분들은 원하는 방법으로 사용하시면 되겠습니다.


if(!empty($bNo) && empty($_COOKIE['board_free_' . $bNo])) {

$sql = 'update board_free set b_hit = b_hit + 1 where b_no = ' . $bNo;

$result = $db->query($sql); 

if(empty($result)) {

?>

<script>

alert('오류가 발생했습니다.');

history.back();

</script>

<?php 

} else {

setcookie('board_free_' . $bNo, TRUE, time() + (60 * 60 * 24), '/');

}

}


위의 코드를 설명해보자면, 만약 $bNo이 있고, $_COOKIE['board_free_' . $bNo(글 번호)]가 없을 때 update 쿼리를 전송합니다.

결과가 없다면 오류가 발생했다는 메시지를 출력하고 이전 화면으로 돌아갑니다.


결과가 성공이라면 setcookie 함수를 이용해서 'board_free_' . $bNo이라는 쿠키를 만듭니다.

여기서 사용된 setcookie의 매개변수는 setcookie('쿠키 명', '쿠키 값', '쿠키 유지시간', '경로') 순입니다.


쿠키 명은 말 그대로 쿠키를 사용할 때 쓰는 쿠키의 이름으로 배열에서 키 값과 동일한 역할이라고 보시면 되겠구요.

여기서 board_free_$bno이라는 이름으로 만든 이유는 free라는 이름을 가진 게시판의 글 번호를 나타낸겁니다.


쿠기 값도 배열의 값와 같다고 보시면 되겠습니다.

쿠키 유지시간은 쿠키가 얼마의 시간만큼 유지될 건지를 나타내는 건데요.

time()은 현재 시간을 나타내주고 거기에 + (60(초) * 60(분) * 24(시간))의 값을 더해줍니다.

60 * 60 * 24란 하루를 초로 나타낸 값입니다.

그러므로 하루 후에 다시 조회가 가능하게 되는거죠.


그리고 마지막으로 경로인데 만약 경로부분이 비어있다면 http://kurien.dothome.co.kr/board/에서 글을 조회했을 때는 /board/라는 경로에

쿠키가 생성되고 http://kurien.dothome.co.kr/project/board/에서 글을 조회했을 때는 /board/project/라는 경로에 쿠키가 생성됩니다.


그러므로 한 사람이 2의 조회수를 올릴 수 있게 되는거죠.

이 경로를 /로 고정 함으로써 하루 한번의 조회만 가능하게 했습니다.

http://blog.kurien.co.kr/529

Posted by 이상욱1
,