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


댓글 없음:

댓글 쓰기