2015년 5월 22일 금요일

블로그 차트 인증

블로그차트 라는
http://www.blogchart.co.kr/

페이지에서 블로그를 등록시 블로그 차트 인증

을 진행해야 하는데

해당 블로그에 내 블로그 주소를 등록하면

내 블로그에 자동으로 게시물 하나를 추가한다.

이 안에 들어있는 Key 값을 복사해서 블로그차트 에서 요구하는 인증
키에 넣으면 끝.


2015년 5월 20일 수요일

구글, 네이버, 다음, 야후 검색연산자(고급검색) 종류

결론

1. 구글은 네이버와 별루 안친하다. (서로 검색이 막혀있음)
2. 확장키워드는 구글이 압도적이다.
3. 네이버는 기존에 12가지 확장키워드가 있다고 했으나 
    4가지정도가 잘 먹히는걸로 보인다.
4. 의외로 다음에 추가기능이 있다. 
    (다른 검색사이트로 간다든지 다른 검색사이트로 간다든지)

0. 그냥 검색

       2개 단어를 쥐어주고 검색 결과를 본다. (밑에 제시된 내용과 비교하기 위해)

사이트검색어입력 및 결과
네이버핸드폰 삼성
다음핸드폰 삼성
구글핸드폰 삼성
야후핸드폰 삼성
       ps. 한국 사이트는 사이트, 블로그, 문답 등등으로 분류해서 보여주고
            외국의 경우 해당 주제의 정보에 집중하는 특색이 보임.


1. 찾고자 하는 내용과 정확하게 일치하는 것만 검색하기

"내용"

       내용 이라는 글자가 정확하게 들어가는 내용만 검색된다.

사이트검색어입력 및 결과
네이버핸드폰 "삼성"
다음핸드폰 "삼성"
구글핸드폰 "삼성"
야후핸드폰 "삼성"
       ps. 구글, 야후는 결과가 완전하게 일치하고 네이버, 다음은 비슷하다.
            구글 맨처음 검색결과가 apple.com 인건 참 흥미로움


2. 검색으로 작성한 단어가 들어간 사이트를 제외한다.

-내용

       내용이라는 글자가 제외된 결과를 보여준다.

사이트검색어입력 및 결과
네이버핸드폰 -삼성
다음핸드폰 -삼성
구글핸드폰 -삼성
야후핸드폰 -삼성
       ps. 네개 사이트 다 정상적으로 먹혀들어감
            국내 사이트는 엘쥐가 뜨고 구글을 apple 중점적으로 뜨는것도 흥미로움


3. 검색하는 단어의 유의어를 포함하여 검색한다.(구글만 지원)

~내용

       내용 이라는 글자의 유의어를 포함하여 결과를 보여준다.

사이트일반검색연산자사용검색
네이버예쁘다~예쁘다
다음예쁘다~예쁘다
구글예쁘다~예쁘다
야후예쁘다~예쁘다
       ps. 지원된다는 구글은 오히려 일반검색이랑 별 차이가 없고 오히려 네이버,
           다음에서는 결과가 조금 상이함


4. 2개 단어중 하나라도 포함시 다 보여준다. (네이버, 다음)

내용1 | 내용2

       내용1 과 내용2중 하나라도 일치하는 결과를 다 보여준다.

사이트일반검색연산자사용검색
네이버야구 배구야구 | 배구
다음야구 배구야구 |배구
구글야구 배구야구|배구
야후야구 배구야구 | 배구
     ps. 네이버는 글자와 | 사이를 꼭 띄워줘야함, 구글을 상관없음(다됨)
          다음은 앞글자와 | 사이엔 공백이 있어야 되고 뒤에는 붙여주는 경우에만 적용


5-1. 2개 단어 꼭 포함

내용1 + 내용2
       내용1 와 내용2 단어를 반드시 포함하는 결과를 보여준다.

사이트일반검색연산자사용검색
네이버야구 배구야구 +배구
다음야구 배구야구 +배구
구글야구 배구야구 + 배구
야후야구 배구야구 + 배구
       ps. 네이버, 다음은 표에서와 같이 띄어쓰기에 주의해야함
           여느 사이트에서는 네이버에서 단어1 &, 단어2 를 설명하는데가 있지만
           검색 해봤을때에는 적용되지 않았음


5-2. 2개 단어를 순서 관계없이 꼭 포함(네이버)

단어1~단어2

       ps. ~ 연산자를 설명하는 곳이 적지 않았으나 해보았을때에는 별반 차이가 없음
               다만 다음의 경우 ~를 넣으면 기본적으로 길찾기 기능이 포함되어 검색됨


5-3. 단어들이  2단어내에 위치한 결과를 보여준다. (네이버)

단어1 ^ 단어2
       2 단어를 주어줄때 중간에 ^를 붙이면 인접한 결과를 보여준다.

       ps. 특별하게 다른 조회결과를 보여주지는 않음

5-4. 단어들이 한문장내 위치한 결과를 보여준다.(네이버)

단어1@(단어2)

       ps. 역시 특별하게 다른 조회결과를 보여주지는 않음


5-5. 주어진 단어를 포함하는 검색결과를 보여준다.

*단어1 또는   단어1*

사이트일반검색연산자사용검색
네이버삼한지*삼한지
다음삼한지*삼한지
구글삼한지*삼한지
야후삼한지*삼한지
       ps. 네이버, 다음은 순서가 좀 바뀌어 나오고 내용은 같음
            구글의 경우 5-6 에서 다룸


5-6. 불확실한 단어를 포함하고자 할때 (구글만 적용)

단어1 * 단어2
사이트일반검색연산자사용검색
네이버삼국지 마지나수삼국지 *마지나수
다음삼국지 마지나수삼국지 *마지나수
구글삼국지 마지나수삼국지 *마지나수
야후삼국지 마지나수삼국지 *마지나수
       ps. 구글은 검색 범위가 넓어짐 마지나수 라는 이상한 단어를 좀더
            다각적으로 검색, 나머지 사이트에서는 일반검색과 동일


6. 숫자 범위를 지정(구글)

숫자1.. 숫자2
       구글        2010 2012       2010..2012     다른 사이트는 일반 검색과 동일


7. 단어의 정의를 보여줌(구글)

define:단어
       구글         단어       define:단어     다른 사이트는 일반 검색과 동일


8. 특정 단어나 내용을 제목에 반드시 포함(구글, 야후)

intitle:단어
       구글         단어       intitle:단어     구글에서 가능

u:단어
       야후         단어       u:단어           야후에서 가능


9. 특정 사이트에 한정지어 검색(구글, 야후)

site:사이트주소
       구글         단어 site:www.naver.com     구글에서 가능

t:사이트주소
       야후         단어 t:www.naver.com         야후에서 가능

       ps. 의외로 구글, 야후와 네이버와의 관계를 알수 있다.
            단어를 검색어에 포함시킨건 좀더 범위를 좁혀볼려고 한 의도이다.
            t:www.naver.com 으로도 가능하다.


10. 특정 사이트에 관련있는 결과를 보여줌(구글)

rel:사이트주소
       구글         rel:www.naver.com     

       ps. site보다는 큰 범위에서 검사(daum이나 한국어 사이트까지 포함)


11. 특정 사이트를 링크한 모든 사이트를 보여줌(구글)

link:단어
       구글         link:www.yahoo.com     

       ps. 해당 사이트를 링크로 가지고있는 모든 사이트를 검색


12. 특정 파일타입을 한정하여 보여줌(구글)

(단어) filetype:pdf

       구글         단어 filetype:pdf     

       ps. 단어 라는 키워드가 들어가고 파일 형태가 pdf인 조건으로 검색하여
             보여준다.


13. 다른 사이트에서 같은 키워드로 검색(다음)

단어/네이버
단어/구글
단어/야후
.....

       다음         단어/구글

       ps. 클릭하면 찰나에 다음영역에서 구글로 바뀌어 검색한다.
            한글로 적는만큼 가능한 검색 사이트는 한정되어 있다.



번외 : 작성에 참고한 사이트 및 게시물

1. 구글 검색 잘하는 법    강력추천!!!!!!
2. 천태평의 위드푸드 : + 구글 검색 방법 & 구글링 잘하는 법 & 검색연산자 +
3. Things in Life : 유용한 다음만의 검색 연산자
4. 뽐뿌 게시물 : 네이버 검색 연산자
5. 엽기 개그적 일산다반사에 호기심들 : 구글 검색엔진 사용법 ..... 
6. 구글 : 웹 검색 도움말   추천!!!
7. 살마치킨 :  네이버 검색연산자를알면 확장키워드는 내 것이다.     추천!!!! (이런 제목...)
8. 목포대학 : yahoo


2015년 5월 14일 목요일

Meteor 프레임워크 + FOLD

기존에 자바1.4 에  Spring 2버전으로 되어있는 사이트를 유지보수하다가
쉬는중간에

친하게 지내던 동생이 있어서 놀러갔는데

사이트를 Meteor 로 구현한다고 해서 첨에 뭐가 미쳐? 미쳐? 하다가
프레임워크라는 소리를 듣고
찾아보는 중인데

개발자가 확 땡기는 내용들이 많이 있어서 좀 알아보기로 함

metero 의 장점은
  단일언어 구성
  개발 소스가 대체적으로 줄어든다.
  프레임워크에 의해서 게시물, 댓글 등 변동사항이 다른 유저에게도
    실시간 갱신된다는 것

단점은
  시작이 2012년도 라 아직 특히 한국에는 이슈가 안되어 있다는점
  같은 이유로 이슈사항이 구글에 널리 알려져 있지 않은점
정도랄까?

기본적으로 OS 는 윈도가 아닌 리눅스 기반으로 작업했던터라
  동작하는거에 명령어 중심으로 진행해야함.


실제 helloworld 만 찍어보니 이건 자바스크립트 프레임워크 + autoset 으로 보인다.
 명령어 실행하면 기본 골격 잡아주고 그 위에서
  db까지 바로 띄우고 설정 잡을게 있는 경우 같이 포함시키는데 설정도
   파일안에 포함되어 있어서 실제 실행은 명령어만 때리면 된다.

기본적인 설명은 하단 참고하였던 사이트만 참고해도 충분할듯함
이걸로 녹은 먹지는 않고 있기 때문에
나중에 어쩔수 없이 해야되면 하겠다고 생각하는 터라....

FOLD 의 경우 Meteor로 만든 사이트로
  현재 해당 프로젝트소스가 open되어 있으며
  라이센스는 MIT를 따르고 있는 프로젝트인데
  일단 Meteor로 작성되어 있고 이를 수정할수 있는 openSource라
  해당 내용을 살펴 보게 됨

이를 띄우기 위해서는
    start 파일을 실행하면 되는데 해당 파일 안에는 옵션 설정이 명시되어 있다.
     그 파일명은 settings.json 으로
    소스를 받고 해당 최상위 폴더에서 meteor를 실행하면
    만들어지는 파일인데
    무슨 이유에선지 본인의 컴퓨터에서는 해당 파일이 생성되지 않아
    옆 사람껄 (mac) 받아다 setting.json을 실행하는 방식으로 띄웠다.
    그리고
    settings.json 에 google api 키 가 포함되어 있어야 사용이 가능함

(보완예정)

작성시 meteor 관련 정보
meteor 다운로드 (계정 하나 만드는게 속이 편할 것입니다)
https://www.meteor.com/

meteor를 찬양하는 개발자의 글 - Meteor로 헬로머니 재구축하기
http://lab80.co/rebuilding-hellomoney-in-meteor-kr/

meteor 관련 찬양 블로그 2 (간단한 사용법 포함) - RKJUN'S BLOG
https://rkjun.wordpress.com/2012/06/04/meteor-js-preview-0-3-6-intro/

일부 번역된 meteor 설명
http://kr-docs.meteor.com/

번역하여 다른곳에 따로 구축한 meteor 설명
http://kr.discovermeteor.com/

meteor 관련 커뮤니티 미티어 코리아
http://www.meteorjs.kr/

작성시 FOLD 관련 정보
readFold 사이트 위치
https://readfold.com/

gitgub 프로젝트 위치
https://github.com/readFOLD/FOLD


2015년 5월 13일 수요일

PHP 기초문법 리뷰

PHP 간단한 리뷰

기본문법 변수 
   선언은 $name
     특이한것은 {$name} 도 $name 와 같은뜻
     {$name}000 은 네임 변수끝에 000이라는
     문자를 붙여준다. (둘다 숫자면 숫자로 인식)

   Heredoc, Nowdoc 문법이라는 이상한 방식을 지원한다.
     EOD, EOT를 식별자라고 하는데 식별자 안에 들어간
     문자를 str에 저장한다.

    $str = <<<EOD
    ~~~~문자열
    EOD;
    $str = <<<'EOT'
     ~~~문자열
     EOT;

   변수에 리소스(파일, 그림, DB,객체 일체) 를 넣을 수 있음
     선언 방법이 똑같다.

   프로그램내에서 미리 지정한 변수가 있음
     , 프레임 워크를 쓸때에도 추가로 있을수 있음
     예)$_GET, $_POST, $_COOKIE, $_FILES
         , $_SESSON, $_SERVER, $_ENV

   변수 선언뒤 global $name; 선언시 이는 전역변수가 된다.
     변수 선언뒤 내부 실행 함수에서 글로벌 선언 안하면
     함수 실행시 해당 함수내에서 $name을 쓸수 없다.
      (왜 선언때 안하고 중간에 되는건지 참 헷갈리게...)

   함수내에서 변수 $name 을 static 으로 선언시
     함수를 여러번 실행시켜도 해당 변수는 초기화 되지 않고
     이용할 수 있다.
   golbal과 static이 다른점은 static은 해당 함수 내에서만
     접근되고, global은 함수 밖에서도
     접근 가능하다는점이다.
     같은점은 함수가 끝나더라도 정보를 보유하고 있다는점.

기본문법 상수 
     define("상수명", "값"); 형태로 선언하고
     상수명을 가져다 쓴다. 전역처럼 쓰는데
     함수 안에다 써놔도 밖에서 쓸수 있고,
     함수 밖에다 선언해놔도 함수안에서 읽을 수 있다.

1)
<?php
define("hello", "good morning");
function a(){
echo(hello);
}
a();
?>

2)
<?php
function a(){
define("hello", "good morning");
}
a();
echo(hello);
?>

3)
<?php
define("hello", "good morning");
echo(hello);
?>

   3가지 다 된다는 이야기다.
     PHP에서 미리 정의한 상수가 있다.
참고 : define(상수 정의) : http://jobdahan.net/language_php/17380

기본문법 연산자
   =     우측 정보를 왼쪽에 대입하시오
   ==   같은지 확인하시오 같으면 true, 틀리면 false이다
   === 같은지 확인 다만 변수 형식까지 같아야 함

   문자열 결합
     $a="레바";
     $b="숯덩이";
     두 문자열 결합시에는
        $c = $a.$b;
     로 표현한다.

   주로 쓰는 자바의 문자열 결합 += 은
     대상 문자열 .= 추가할 문자열
     로 표현된다.

   두 배열을 + 기호로 합칠수 있는데
     일시 $a 와 key가 같은 $b의 배열은 무시된다.
     $a = array("A"=>"LOL", "B"=>"POP");
     $b = array("A"=>"LOL2", "B"=>"POP2", "C" => "PVP");
     $c = $a + $b;
     $c를 뜯어보면
     array("A"=>"LOL", "B"=>"POP", "C" => "PVP");
       로 보인다. $b의 A,B는 무시되었다.

   ` key로 감싼 문자열을 변수에 넣으면
      (shift 안누르고 누른 KEY ~)
      변수에 저장되는건 문자열이 아니라 해당 문자열을
      서버 환경에서 실행한 결과를 넣는다.

   @ 를 표시한 줄의 실행문은 에러가 나도 표시하지 않고 넘긴다.

기본문법 제어구조
if
   if(0) 은 거짓이다. 0만 아니면 true로 판단한다. (-값도 true)
     예를 들어    
       if(2) echo"너는 바보가 틀림없다.";
       if(-2) echo"너는 바보가 틀림없다.";
     위 문장들은 실행된다.

for
   continue 를 지원한다.
   (마주하면 이하구문을 실행하지
     않고 다시 for 조건을 따진다.)
   break
   (마주하면 이하구무능ㄹ 실행하지
      않고 for 구문 밖으로 빠져나간다.)
   는 차이점이 있다.

기본문법 파일 읽기
   include "파일위치 및 이름";
   require "동일";
     include는 해당 파일이 없으면 그냥 넘어가고
      (경고는 함)
     require는 에러를 뱉어내고 종료한다.

기본문법 함수
   function changeLand(&$a, &$b) {...}
     로 선언시 함수 changeLand 에서 $a, $b 를
     수정한 결과가 함수를 호출한 대상에도 적용된다.
     return 하지 않고 인자값을 자체 변환할 수 있다는 말씀.
     그것도 2개 이상을
   기본 문법인 return 문도 사용가능하다.

날자관련 함수

date(문자를 포함한 포멧형태, 날자);
   date() 에서 쓸수있는 포멧은 여러가지이므로 찾아볼것.
   날자는 넣지 않으면 자동으로 현재를 기준한다.
   다만 date() 쓸때에 예약된 문자는 모두 날자 형태로 바꿔
     버리기 때문에 그냥 문자를 출력할때에는 예약어를 확인뒤
     앞에 역슬래시를 붙여야 문자가 정상 출력된다.
 
getdate() <-- return array 형태임
   날짜, 시간을 반환함 array 형태이기 때문에 전체 또는 일부를
     가공해서 사용 가능함.

microtime(get_as_float)
   get_as_float 인자를 false 일 경우 2개 float 값을
     하나의 str로 리턴
     앞 숫자는 유닉스 시간(초단위 절대값)
     뒤에껀 100만분위 1초 단위 값
   get_as_float bool 인자를 true로 하면
     두값을 더해서 하나로 리턴함
   ps) get_as_float는 5버전부터 지원함


파일 시스템 함수
    웹 언어라서 지원되는 부분인데
    리눅스 명령어를 php를 통해서 실행하게 해준다.
    보안이슈가 많은 부분임

basename(경로): 파일 이름리턴(경로에서 디렉토리 제거)
      2번째 인자로 파일 이름에서 생략할 부분을 지정가능
     ex) basename (경로, "빼야할 문자열 또는 확장자");

chmod("파일이름", 권한) : 파일 권한 변경 (0슈퍼,그룹,유저)
      ex) chmod("경로 혹은 파일 이름", 0777);

copy : 파일 복사
      ex) copy("원본파일","복사위치 및 파일 이름");

dirname("경로") : 경로에서 디렉토리 리턴(파일이름제거)

fopen("파일", "모드") : 파일이나 URL을 연다.
      ex) fopen("파일", "모드")
      모드는
        r(읽기)
       ,r+(읽기, 쓰기)
       , w(쓰기)
       , w+(읽기, 쓰기, 포인터 맨앞 위치, 없으면 새로 생성)
       , a(쓰기전용, 포인터 맨끝 위치, 없으면 새로 생성)
       , a+(읽기, 쓰기, 포인터 맨끝 위치, 없으면 새로 생성)
       , x(쓰기, 포인터 맨앞, 새로 생성, 기존에 있으면 false 리턴)
       , x+(쓰기, 읽기, 포인터 맨앞, 나머지는 x와 동일)

file_exists(fopen객체) : 파일 존재 여부를 체크

filesize(fopen객체) : 파일 크기 리턴

filetype(fopen객체) : 파일인지 경로 인지를 리턴(파일 형식 리턴)
   

fread : 파일을 읽어낸다. (지정된 크기만큼)

feof(fopen객체) : 열려있는 파일의 포인터?(커서?)가
     파일 끝에 위치하고 있는지 여부를 체크
      이때 파일이름은 fopen 된 파일이어야 함

file : 파일을 배열형태로(한줄씩) 읽어온다.
      ex) file("파일이름")
       ps) 2번째 인자로 php 설정 기본 폴더에서 찾으려고
           하는 경우 1을, 아닐 경우 생략.
           URL로 지정가능 : PHP.ini 의
           allow_url_open 항목과 연동

rename("파일이름", "변경파일이름")
     : 파일 이름 변경(경로 포함)

fgetc(fopen객체) : 파일에서 하나의 문자를 리턴

fgets(fopen객체, 원하는 줄수int)
     : 파일에서 한줄 데이터 혹은 문자를 리턴
       2번째 인자 생략시 1줄만 진행

readfile("파일이름", 설정 디렉토리 조사 여부 생략가능)
     : 파일 데이터를 출력

fpassthru : 현재 파일 포인터~끝까지 데이터를 출력
      이미지 출력등에 쓰일 수 있음.
      ex) fpassthru(fopen객체)

fputs : 포인터부터 문자를 쓴다. (fwrite와 동일)
fwrite: 포인터부터 문자를 쓴다.
     ex) fwrite(fopen객체, "문자열", "쓸 길이 생략가능")
   
is_file("문자열") : 문자열이 파일이지 여부를 체크

is_uploaded_file("파일") : 업로드된 파일인지 여부를 체크

move_uploaded_file("파일이름", "이동할 위치")
         : 업로드된 파일을 해당 위치로 이동

unlink("파일이름") : 파일 삭제

fclose(fopen객체) : 열려있는 파일을 닫는다.

is_dir("문자열") : 문자열이 디렉토리인지 여부를 리턴

mk_dir("디렉토리") : 디렉토리 생성
      ex) mk_dir("디렉토리 경로", 권한
              , 재귀적 디렉토리 생성여부)

rm_dir("디렉토리) : 디렉토리 삭제

문자열 처리 함수
crypt("문자열","암호화 방식") : 문자를 암호화
   PHP 메뉴얼 : http://php.net/manual/kr/function.crypt.php

echo("문자열","문자열2"...) : 문자열 출력 ()는 생략가능
       싱글따옴표의 경우 특수문자도 출력함
       컴마로 여러 문자열을 붙일수 있음
       (태그를 고려하지 않음)

explode("기준문자", "대상 문자열")
      : 문자열을 특정 문자or문자열 기준으로 분리

htmlentities("대상문자")
      : 해당하는 문자는 html 엔티티로 변환
       (특수문자를 표시되는 html 엔티티 기호로 변환)
 
htmlspecialchars("대상문자")
      : 특수문자를 html 엔티티로 변환
        (5가지 특수문자를 표시되는 html 엔티티 기호로 변환)

implode("구분자", $배열)
     / join(동일)
      : 배열 원소를 문자열로 연결

itrim("문자열") : 왼쪽 공백 제거
       itrim("문자열", "제거할 문자") : 왼쪽 제거할 문자 삭제

md5("문자열") : MD5 해시값 리턴

nl2br("문자열") : 줄바꿈을 <br/> 태그 삽입
       자동으로 html 줄바꿈이 되기 때문에 많이 씀

print("문자열") : 문자열 출력(하나의 문자열만 가능)
       () 생략가능

printf("문자열", 옵션) : 옵션에 지정한 형식으로 출력
       기본기능은 같음
       %d : 10진수 정수
       %f : 실수
       %b : 2진수 정수
       %o : 8진수 정수
       %x : 16진수 정수
       %s : 문자열

sprintf("문자열", 옵션) : 옵션 printf 와 동일 적용하나
       리턴을 문자열로 반환

rtrim("문자열") / chop : 오른쪽 공백 제거


sscant("문자열", 옵션, $저장변수)
      : 문자열을 옵션(printf와 동일) 으로 해석해서 변수에 저장

str_replace
   ("원본 문자열", "찾는 기워드", "변환문자", 실행횟수(생략가능))
      : 문자열을 치환

strip_tags("문자열", 허용태그1, ..2, ...)
      : 문자열에서 HTML과 PHP 태그 제거

strlen("문자열") : 문자열 길이 반환

strops("원본문자열", "찾을 문자열", 시작위치int)
      : 원본 문자열에서 찾을 문자열이 처음 발견되는 위치int
        를 리턴

strstr("원본문자열, "찾을 문자열")
      : 원본 문자열에서찾을 문자열을 처음 발견하는
        위치에서부터 끝까지 문자열String 을 리턴

strchr : strstr 와 동일 다만 뒤에서부터 찾기 시작함

substr("대상문자열", int시작위치, int길이)
      : 문자열 일부 반환

trim("대상문자열") : 문자열 공백제거
기타 함수 (자주쓰는)

mail("받는이 mail주소", "제목", "내용");
      : 시스템에 sendmail 이 설지되어야 가능함
        내용 파라미터 다음 위치에 정보를 포함할 수 있는데
         보내는이 표시, 첨부파일을 포함하는등의 업무가 가능

abs(int) : int의 절대값을 리턴

ceil(float) : float의 소수점 이하를 올림

floor(float) : float의 소수점 이하를 내림

pow(int, 승수) : int를 승수번수 만큼 서로 곱한다. (거듭제곱)

rand(maxint, minint) : max, min 사이의 정수 난수를 리턴
        다만 시스템에 따라 MAX 가 32768이상 안나올 수 있음

mt_rand(rnad와 동일) : rand 업그레이드 버전, 오류 수정및
        속도가 빨라짐, 기능 동일

round(float) : 실수를 반올림한다.

base64_encode(String) : String 를 인코딩한다.

base64_decode(String) : 인코딩된 String을 디코딩한다.

urlencode(String) : String을 URL인코딩한다.

urldecode(String) : URL 인코딩된 String을 디코딩한다.

empty($변수) : 변수 empty 여부를 확인하여 bool로 리턴

isset($변수) : 변수가 선언되었는지 체크하여 bool로 리턴

unset($변수) : 변수를 제거

is_array($변수) : 변수가 배열인지 체크

배열특징
  key 가 array의 index 와 동일

  $변수이름 으로 정의, array("list1", "list2"...) 함수로
      선언가능

  $변수이름[]="list1" 형태로 array 생성
      또는 원소 추가 가능
      , 이때 []안에 key값을 넣을 수 있다.

  array("a"->"list1", "list2"...) 등으로 key값을 주거나
      안주거나 섞어서 사용 가능

  key 값으로 숫자를 주면 다음 배열 원소는
      주어진 key 다음 값을 가진다 (중복 방지)
      array("5" ->"list1", "list2")  여기서
        list2는 6의 index를 가진다.

  다차원 배열은 $arr = array(array(...), array(...)...) 형태로 작성한다.

  배열 연산 기능 제공
   +      : 동일한 내용은 +앞의 내용 앞에 없는건 뒤에꺼
   ==    : 내용이 같으면 true
   ===  : 같은 원소+순서라면 true, 반대 체크는 !===
   !=     : 원소가 다르면 true, <>도 동일

  배열 정렬 기능 제공
  sort
     : 값 기준 정렬, 인덱스(key)를 바꿈(0부터 할당)
  rsort
     : 값 기준 내림차순 정렬, 인덱스(key)를 바꿈(0부터 할당)

  asort
     : 값 기준 정렬, 인덱스 유지
  arsort
     : 값 기준 내림차순 정렬, 인덱스 유지

  ksort
     : 키기준 정렬, 인덱스 유지
  krsort
     : 키기준 내림차순 정렬, 인덱스 유지

  natsort
     : natural order 알고리즘 정렬, 인덱스 유지
  natcasesort
     : 대소문자 구분없이 narsort, 인덱스 유지

객체(php4부더 도용, php5버전부터는 쓸만해짐)
   클래스 생성은 자바랑 비슷함 class 클래스이름 {...}
 
   클래스 생성자는
     __construct($hname) 이라는 형태로 제공됨

   소멸자를 제공하는데 함수명은 __destruct()
     소멸자는 파라미터를 가지지 못함

   객체 생성은 new 키워드로 생성하고
     변수를 선언할때 뜨는 $~ 으로 넣어 씀

Mysql관련 함수

mysql_connect('hostname', 'username','pass')
    : 연결한다. 연결되면 id를 준다.

mysql_pconnect(위와 동일)
    : 연결하는건 같은데 기존에 연결 여부를 체크한다.
      기존게 있다면 그걸 쓰고, 아니면 새로 연결
       + php 구문이 끝나도 재사용되도록 남겨둠

mysql_close(link_id)
    : 연결을 종료한다.

mysql_select_db('db name', linkid)
    : db를 선택한다. 이때 linkid는 선택해도되고
       안해도 된다.

mysql_query('query(string)', linkid)
    : 쿼리를 전송 결과는 리소스id(select)
      또는 실행여부(delete, insert,update)를 리턴

resource_num_rows (resourceId)
    : mysql_query 함수가 실행된 쿼리의
      리소스id를 보고 실행 결과 레코드 수(int)를 리턴

mysql_affected_rows(linkid)
    : update, delete insert 의 실행 줄수(int)를 리턴
      linkid는 생략가능(생략시 최근 실행했던 결과리턴)

mysql_result(resourceid, rownum, filed순서)
    : mysql_query() 결과 레코드를 한 셀 단위로 리턴
      딱 그 부분만 필요시 쓰는 함수

mysql_fetch_row(resourceid)
    : 결과레코드를 배열(array)로 리턴

mysql_fetch_assoc(resourceid)
    : 결과 레코드를 배열(array)로 리턴
       다만 index가 숫자가 아닌 다른 값

mysql_fetch_array(resource, type(int))
    : type (MYSQL_ASSOC, MYSQL_NUM, MYSQL_BOTH)
      가 있으며 생략가능(생략시BOTH가 기본값)
     array로 반환한다.    

mysql_real_escape_string('변경할 문자', linkid)
    : 특수문자를 쿼리날릴수 있도록 수정해서 리턴(string)

mysql_error(linkid)
    : 실행시 발생한 에러를 리턴(string)

 MYSQLi 함수
      (php5 부터 지원하는 mysql 함수 확장 함수)

mysqli_connect('host','user','pass','port','socket')
    : pass 이하 생략가능

mysqli_close()
    : 접속 종료

mysqli_select_db(동일)
    : 기능도 동일

mysqli_real_query(link, query(string))
    : 기능 동일(쿼리전송)

mysqli_store_result(link)
    : 쿼리 결과 레코드를 리턴(mysqli_result 객체)

mysqli_use_result(link)
    : 결과 레코드를 조회(mysqli_result 객체)

mysqli_query(link, query(String),option(int))
    : 기능 동일(쿼리 전송) 리턴은 mixed 라는 객체로 리턴
      옵션은 MYSQLI_USE_RESULT 또는 MYSQLI_STORE_RESULT

mysqli_multi_query(link, query(String))
    : 하나 이상의 쿼리를 전송

mysqli_next_result(link)
    : 멀티쿼리 실행시 결과값은 최초 실행 쿼리
       결과값을 보내기 위해 준비하고 있는데
       이를 다 사용했다고 이 다음 쿼리 결과값을
       받을 수 있도록 지시하는 함수

mysqli_more_result(link)
     : 멀티 함수 실행해서 대기하고 있는 결과가 있는지 확인

mysqli_fetch_array(mysqli_result 객체, option(int))
     : mysqli_result 객체를 array 객체로 받아낸다.

mysqli_free_result(mysqli_result)
      : mysqli_result 객체에 저장된 내용을 해제한다.

mysqli_autocommit(link, mode(bool))
      : db 자동 commit 여부를 체크

mysqli_commit(link)
      : 현재 트랜잭션을 커밋한다.

mysqli_rollback(link)
      : 현재 트랜잭션을 롤백한다.

카운터 파일로 관리하기(정말 기본형)

$count = file("count.txt");
$count = trim($count[0]);
if(!isset($_COOKIE['visit'])){
    $count++;
    $fp = fopen("count.txt", "w");
    fwrite($fp, $count);
    fclose($fp);
    setcookie("visit");
}
echo $count;

die() or exit() - 종료시 사용 에러메시지 출력도 겸함
wp_die()
  : http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_function&wr_id=70324


require_once(php 파일 작성 시에, 외부 파일을 포함하기 위해 사용)
  : http://zzaps.tistory.com/15


@ini_set
문법 : 문법:ini_set("php.ini항목명","0 또는1");
내용 : php.ini 의  설정 정보를 건든다.
         사용방법은 하단을 참고
  php 메뉴얼 : 추천
  : http://php.net/manual/kr/info.configuration.php#ini.magic-quotes-runtime

  php.ini 설정에 대한 설명글 : 중간
  : http://iwithjoy.tistory.com/m/post/71


register_shutdown_function()
  : http://phpdoc.me/manual/kr/function.register-shutdown-function.php


shutdown hook

  : http://blog.seulgi.kim/2014/06/java-shutdown-hook.html


2015년 5월 12일 화요일

워드프레스 4.1 기준 codeFlow

wordpress 4.1 기준 작성


일하던중 본의아니게 대기를 하게 되는 시점이 있어서

그동안 php및 wordpress에 대해서 공부하고자 하여

목적없이 소스 까서 보는중입니다.
태클이나 질문 주셔도 되지만 그때 제가 놀고 있어서 답변할지는 모르겠습니다.


1. index.php 로드
    단순이  2. wp-blog-header.php로 넘기는 역할


1
2
3
4
5
6
<?php
define('WP_USE_THEMES'true);
require( dirname( __FILE__ ) . '/wp-blog-header.php' );


내용 설명은 아래 링크에 너무 잘 설명되어 있어서 제 작성 의욕을 꺽었습니다.
하단 링크를 참고하세요 
   <-- 출처(Parkgaram Dev Blog)

간추리자면

line 02. WP_USE_THEMES 라는 상수를 만들고 나머지는
line 04. 2. wp-blog-header.php Call


2. wp-blog-header.php 로드
      설정관련 내용은 3.wp-load.php
      테마에 관련된 내용은 template-loader.php 에서 로드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
if ( !isset($wp_did_header) ) {
    $wp_did_header = true;
    require_once( dirname(__FILE__) . '/wp-load.php' );
    wp();
    require_once( ABSPATH . WPINC . '/template-loader.php' );
}

line 06. $wp_did_header 변수가  null 일때
line 08. 3.wp-load.php (워드프레스 관련 설정파일 로드 시작파일)
line 10. wp() 함수를 실행하고
line 12. template-loader.php  를 로드

  여기서 wp() 함수는 어디서 선언된것도 아닌데 떡하니 들어가있네요
    하지만 역시 구글과 개발자는 위대합니다.
    아래 블로그의 3/5지점을 확인하세요

    http://biscuitpress.kr/518
 <-- 출처(비스킷프레스)

   설정파일 로드하고 설정파일 설정을 프레임워크로 올리는 wp() 실행후
     템플릿 을 로드하네요(아직 다 안봤어요)


3. wp-load.php
    4.wp-config.php 를 호출 및 에러처리


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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?php
define'ABSPATH', dirname(__FILE__) . '/' );
error_reporting( E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR );
if ( file_exists( ABSPATH . 'wp-config.php') ) {
    require_once( ABSPATH . 'wp-config.php' );
} elseif ( file_exists( dirname(ABSPATH) . '/wp-config.php' ) && ! file_exists( dirname(ABSPATH) . '/wp-settings.php' ) ) {
    require_once( dirname(ABSPATH) . '/wp-config.php' );
else {
    define'WPINC''wp-includes' );
    require_once( ABSPATH . WPINC . '/load.php' );
    wp_fix_server_vars();
    require_once( ABSPATH . WPINC . '/functions.php' );
    $path = wp_guess_url() . '/wp-admin/setup-config.php';
    if ( false === strpos( $_SERVER['REQUEST_URI'], 'setup-config' ) ) {
        header'Location: ' . $path );
        exit;
    }
    define'WP_CONTENT_DIR', ABSPATH . 'wp-content' );
    require_once( ABSPATH . WPINC . '/version.php' );
    wp_check_php_mysql_versions();
    wp_load_translations_early();
    $die  = __( "There doesn't seem to be a <code>wp-config.php</code> file. I need this before we can get started." ) . '</p>';
    $die .= '<p>' . __( "Need more help? <a href='https://codex.wordpress.org/Editing_wp-config.php'>We got it</a>." ) . '</p>';
    $die .= '<p>' . __( "You can create a <code>wp-config.php</code> file through a web interface, but this doesn't work for all server setups. The safest way is to manually create the file." ) . '</p>';
    $die .= '<p><a href="' . $path . '" class="button button-large">' . __( "Create a Configuration File" ) . '</a>';
    wp_die( $die, __( 'WordPress &rsaquo; Error' ) );
}



line 05. filepath 를 상수(ABSPATH)로 잡아주고
line 08. 소스 오류 발견시 출력되도록 오류 레포팅 함수를 셋팅
     (안에 상수는 기존에 정의되어 있는것임)

line 11. ABSPATH 폴더에 wp-config.php 실행전 체크
     true인 경우 4.wp-config.php 로드

line 17. 한번더 체크
     true 인 경우 4.wp-config.php 로드

line 23. 분기 
     false 의 경우  ~/wp-includes 경로에서 (끝까지 실행)
       load.php 로드
       wp_fix_server_vars() 함수 실행
       fucntions.php 로드

       line 21 $path 변수에 문자열(경로 + setup_config.php) 저장
       line 40. setup_config.php = false 여부 체크
         연산자 관련 자료 : http://pcomkr.tistory.com/8
       line 51. /version.php 로드
       line 54. wp_check_php_mysql_versions();
       line 56 wp_load_translations_early();
       line 68~ wp_die() 함수 실행
      여기서 die() or exit() 함수를 피하고 재정의한 함수를 씀



4. wp_config.php
    db 접속 정보 및 API KEY 셋팅 , 5.wp-settings.php호출


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
31
32
33
34
35
36
37
38
39
40
<?php
define('DB_NAME''XX');
define('DB_USER''ADNAM');
define('DB_PASSWORD''XX');
define('DB_HOST''XX');
define('DB_CHARSET''utf8mb4');
define('DB_COLLATE''');
define('AUTH_KEY',         'ㅅㅅㅅ');
define('SECURE_AUTH_KEY',  'ㅍㅍㅍ');
define('LOGGED_IN_KEY',    'ㅅㅅㅅ');
define('NONCE_KEY',        'ㄹㄹㄹ');
define('AUTH_SALT',        'ㄷㄷㄷ');
define('SECURE_AUTH_SALT''ㅋㅋㅋ');
define('LOGGED_IN_SALT',   'ㅎㅎㅎ');
define('NONCE_SALT',       'ㅊㅊㅊ');
$table_prefix  = 'wp_';
define('WP_DEBUG'false);
if ( !defined('ABSPATH') )
    define('ABSPATH', dirname(__FILE__) . '/');
require_once(ABSPATH . 'wp-settings.php');


line 4~14 DB server 에 관련된 변수를 생성
line 16~30 인증키를 변수에 셋팅
line 40 5.wp-settings.php 실행


5. wp-setings.php
   워드프레스 설정 메인 php (설정값 가져오는건데 다 보자니 의욕이 떨어짐)
line 06, 08 6.load.php 와 7. default-constants.php 를 로드


6. load.php

 여기서 @internal 같은 어노테이션이 나오는데
   php에서 @는 문법에서 사용시 에러 메시지를 숨기는기능을
   아래 링크에서와 같이 지정된 몇개의 단어와 같이 사용하면
   phpDocument 를 이용한 문서생성를 하기위한 문법이라고 함.

http://manual.phpdoc.org/HTMLSmartyConverter/PHP/phpDocumentor/tutorial_tags.pkg.html

------------------------------
작성중 참고한 문헌 및 사이트

1. 블로그 igotit : http://igotit.tistory.com/23 
    (워드프레스 생성부터 테마, 플러그인 개발까지 총 망라하여 정리됨 강력추천)
    ps. 나도 영어만 가능했으면 .......



*** 내용 종합

1. 테마에 관련된 내용은
wp-content / theme / ~테마명~/ index.php 부터 시작한다.
css 는 같은 폴더의 style.css 를 수정한다.

2. 메인 화면에서 컨텐츠 불러올때 조건 거는방법은

   해당 테마이하에서 xxx.php 파일
    query_posts()
    pre_get_posts() 함수를 봐라

3. 컨텐츠 게시물에 대한 파일은
    single.php 에서 시작함.

    index.php 처럼 header, footer 등을 끼워넣어줘야 구성이 비슷해짐