본문 바로가기

개발/웹

PHP 문법

PHP언어가 C랑 비슷한 점이 많이만 차이점 또한 존재한다.

그 부분을 정리함으로써 좀 더 개발의 편리성을 향상시키도록 한다.


1. html 내에 php 포함


1) php 파서 호출


<?php 

내용

?>


2. php의 구조


1) 주석 


C와 동일하다 : /* */ 또는 //


2) 변수


모든 변수에 $ 심볼을 붙여준다.

전역변수 : global을 앞에 추가로 붙여준다.

고정변수 : static을 앞에 추가로 붙여 준다.


 - 변수 선언 방법



 - 2차원 배열 선언 방법



 - 변수 네이밍 규칙


변수의 시작은 알파벳이나 밑줄로 해야 한다.

변수의 이름이네는 a-z와 A-Z, 0-9, 밑줄만 쓸 수 있다.

변수 이름에는 공백을 넣을 수 없다. 밑줄을 이용!!

변수 이름은 대소 문자를 구분한다.


3) 연산자


C와 동일하다 : + - % / ++ -- ...기타 등등

논리 연산자에는 and or도 있으나 걍 패스!


4) 문자열 연결


마침표를 사용

echo "abc" . "def" . "ghi"

출력 : abcdefghi

.=  : 뒤에 문자열을 붙임


 - 다중 라인 문자열 변수 대입

<<<로 시작하여 _END 사이에 문자열을 넣음




5) 상수 선언


define ("ROOT_LOCATION", "/usr/local/www/");

와 같은 방법으로 사용

주의점 : $를 붙이지 않음


6) 출력


echo 또는 print 이용

echo : print보다는 텍스트 출력에 빠르다

print : 복잡한 명령이 가능하다.


7) 함수


c와 동일 : 아래 예제 참고

선언시 function을 붙임



8) 슈퍼 전역 변수


 슈퍼 전역 변수 이름

내용 

 $GLOBAL

 현재 스크립트의 전역 범위 안에 정의된 모든 변수, 변수 이름은 배열의 키 

 $ _SERVER

 헤더, 패스, 스크립트 위치 등에 관한 정보

 이 배열의 엔트리는 웹서버가 만들었지만 모든 웹 서버가 동일하게 일부나 전체 정보를 제공하리라는 보장은 없다. 

 $_GET

 HTTP GET 명령으로 현재 스크립트에 전달되는 변수 

 $_POST

 HTTP POST 명령으로 현재 스크립트로 전달되는 변수 

 $_FILES

 HTTP POST 명령으로 현재 스크립트로 전달되는 아이템 

 $_COOKIE

 HTTP 쿠키를 통해서 현재 스크립트로 전달되는 변수 

 $_SESSION

 현재 스크립트에 유효햔 세션 변수

 $_REQUEST

 브라우저에서 전달되는 정보 내용, 기본적으로 $_GET, $_POST, $_COOKIE 

 $_ENV

 환경변수를 통해서 스크립트로 전달하는 변수 



3. 기타 C언와 다른점


1) else if -> elseif



2) switch 문에서 ()안에는 문자열도 가능하다.




3) include 문


c언어에서는 중복 헤더 파일 때문에 개발시 고려할점이 많았다.

여기에도 include가 존재하지만 include_once를 이용하면 php파일을 한번만 포함시킬 수 있다.

주의할점은 뒤에 ;을 붙여야된다.




4) 생성자, 소멸자


__construct() 와 __destruct() 로 작성한다



5) 클래스 상속


예제 보는 것이 편하다 아래 그림을 참고한다.

주의점 : 상속받을 시 자식 클래스는 자동적으로 부모클래스의 생성자를 호출하지 않으므로 코드로 작성해주어야 한다.

부모클래스의 함수 호출 방법은 parent::함수명 을 이용한다.




3. php 배열


배열은 예제를 통해 하나씩 살펴본다.


1) 기본적인 배열의 숫자 인덱스




2) map 방식 배열



아래 그림과 같이 키워드를 사용하여 대입을 할 수 있다.




3) foreach...as 루프


파이썬의 for in 구문과 비슷하지만 위치가 좌우 바뀌었다.




4) each와 list를 이용한 방법



이때 item에는 키워드가 들어가고 description에는 값이 들어간다.



5) 배열함수


 - is_array

변수가 배열인지 아닌지 확인해준다. 


 - count

엘리먼트 수를 반환한다.


 - sort, rsort

각 엘리먼트를 정렬한다.

ex) sort($fred, SORT_NUMERIC);

ex) sort($fred, SORT_STRING);


 - shuffle

각 배열의 엘리먼트를 무작위로 섞는다.


 - explode

문자열을 구분해 배열에 넣는다.




 - extract

배열의 키워드 이름의 변수를 생성하여 값을 집어넣는다.

보통 $_GET, $_POST 변수를 처리할 때 쓰인다.

근데 이럴 경우 기존의 변수이름이 키워드 이름과 동일할 수 있다.

이거를 대비 하기 위해

extract($_GET, EXTR_PREFIX_ALL, 'fromget');

이런식으로 사용하고 q라는 매개변수가 있을 때

$fromget_q 와 같이 변수가 만들어진다.


 - compact

extract와 반대이다. 아래 그림을 보면 된다..




- reset, end

foreach...as 구조나 each 함수가 배열을 탐색할 때 다음차례가 아닌 처음과 끝으로 다시 이동하고 싶을 때가 있다.

이때 사용한다.

ex) reset (end도 동일함)

reset($fred); //반환값을 버린다.

$item = reset($fred); //$item에 배열의 첫번째 엘리먼트를 넣는다.


4. 실용적인 php


여기서부터는 예제를 통해 무엇이있는가만 살펴보도록 한다.


1) printf




2) 날짜와 시간 함수


 - date($format, $timestamp);

ex) echo date("l F jS, Y - g:ia", time());

결과 : Wednesday February 18th, 2015 - 9:50pm


포맷

 설명

 반환 값

 날짜 인자

 d

 채움 있는 월의 날, 두 자리 

 01 - 31 

 D 

 요일의 날, 세 자리 문자 

 Mon - Sun

 j 

 채움 없는 월의 날 

 1- 31 

 l 

 요일의 날, 전체 이름

 Sunday - Saturday

 N

 요일의 날, 숫자, 1: 월요일

 1-7 

 S 

 월의 날의 접미사  (j와 함께 사용)

 st, nd, rd, th 

 w 

 요일의 날, 숫자 0 : 일요일

 0-6 

 z 

 연도의 날 

 0-365 

 요일 인자

 W 

 연도 내 주의 수 

 1-52 

 월 인자

 F

 달 이름

 Junuary - December

 m

 채움 있는 달의 수

 01-12

 M

 달 이름, 세 자리 문자

 Jan - Dec

 n

 채움 없는 달의 수

 1-12

 t

 주어진 달의 날의 개수 

 28, 29,30 31 

 연도 인자

 L

 윤년

 1: 예, 0: 아니오

 Y

 연도, 네자리 

 0000-9999

 y

 연도, 두자리 

 00-99 

 시간 인자

 a

 정오의 전과 후, 소문자

 am 또는 pm

 A

 정오의 전과 후, 대문자

 AM 또는 PM 

 g

 채움 없는 날의 시간, 12-시간 포맷 

 1-12 

 G

 채움 없는 날의 시간, 24-시간 포맷 

 1-24

 h

 채움 있는 날의 시간, 12-시간 포맷 

 01-12 

 H

 채움 있는 날의 시간, 24-시간 포맷 

 01-24

 i

 채움 있는 분 단위 

 00-59 

 s

 채움 있는 초 단위 

 00-59



날짜 상수를 통해 쉽게 포맷을 이용할 수 있다.


 - DATE_ATOM

Atom 피드용 포맷

사용방법 : date(DATE_RSS)

결과 : Wed, 18 Feb 2015 22:02:27 +0900


 - DATE_COOKIE

웹 서버나 자바스크립트로부터 설정된 쿠키용 포맷

사용방법 : date(DATE_COOKIE)

결과 : Wednesday, 18-Feb-15 22:03:09 JST


 - DATE_RSS

RSS 피드용 포맷

사용방법 : date(DATE_RSS)

결과 : Wed, 18 Feb 2015 22:03:42 +0900


 - DATE_W3C

www 컨소시엄의 포맷

사용방법 : date(DATE_W3C)

결과 : 2015-02-18T22:04:39+09:00


사용자가 프로그램에 유효햔 날짜를 넣었는지 확인할 때 다음 함수를 사용하면 된다.


 - checkdate

.



3) 파일 처리


 - 파일 존재 여부 검사

if (file_exists ( "testfile.txt")) 

echo "File exists";


 - 파일 생성




 - 파일 읽기





 - 파일 복사





 - 파일 이동




 - 파일 삭제




 - 파일 갱신




 -다중 접근으로부터 파일 잠금




 - 전체 파일 읽기



이 함수는 인터넷 너머의 서버에서 파일을 가져올 수 있기 때문에 매우 유용하다.

그런데 난 왜 안될까..




 - 파일 업로드



파일이 업로드 될 때 $_FILES 배열에는 다섯가지의 내용이 저장된다.


배열 엘리먼트

내용 

 $_FILES['file']['name']

 업로드된 파일 이름 (예, smiley.jpg)

 $_FILES['file']['type']

 파일의 내용 형식 (예, image/jpeg)

 $_FILES['file']['size']

 파일 크기 (byte)

 $_FILES['file']['tmp_name']

 서버에 저장된 임시 파일 이름

 $_FILES['file']['error']

 파일 업로드 중 발생한 에러 코드



파일 내용 형식에 나타나는 인터넷 미디어 형식이라고 불리는데 주로 나타나는 형식이 정해져있다.


 application/pdf

 image/gif 

 multipart/form-data

 text/xml

 application/zip

 image/jpeg

 text/css

 video/mpeg

 audio/mpeg

 image/png

 text/html

 video/mp4

 audio/x-wav

 image/tiff

 text/plain video/quicktime



 - 검증을 고려한 업로드 (해커로 부터 텍스트 코드 삽입 방지)



4) 시스템콜


시스템콜은 보안의 위협으로 인해 웹 호스트에서는 일반적으로 동작을 비활성화한다. 가능하다면 php 내에서 문제를 해결하도록 노력해야 한다.



exec는 세개의 매개 변수를 갖는다.

 - 명령어 자체

 - 시스템이 명령어의 결과를 저장하는 배열

 - 호출이 반환된 상태의 변수 


4. XHTML


XHTML : Extensible Hypertext Markup Language

HTML의 복잡하고 관대한 파서문제를 해결하기 위해 XML에 가까운 표준 문법을 사용하여 단순한 파서로 처리할 수 있게하는 방식


이점 : 

XHTML 문서는 XML 파일을 다룰 수 있는 프로그램이라면 어떤 프로그램이든 신속히 처리할 수 있다.


버전 :

여러가지 버전이 있지만 XHTML 1.0만 잘 이해하면 된다.

다른 버전도 이미 제안되었지만 웹 개발자들에게 큰 지지를 얻은 버전은 없기 때문에 한 가지 버전에만 익숙해지면 된다.


XHTML vs HTML


1) 모든 태그는 다른 태그로 닫혀야 한다. 


매칭되는 닫힘 태그가 없으면 태그는 공백과 /과 > 심볼을 사용해 자체적으로 닫아야 한다.

예를들어 <input type='submit'>와 같은 태그는 <input type='submit' />와 같이 변경해야 한다.

더욱이 모든 열림 <p>는 닫힘 태그인 </p>가 필요하다. <p />로 대체할 수 없다.



2) 모든 태그는 정확히 계층을 형성해야 한다.


 <b>내 이름은 <i>로빈</b></i>


위 문자열의 경우 <b>가 <i>이전에 닫혔기 때문에 허용되지 않는다. 정확하게 표현하려면


 <b>내 이름은 <i>로빈</i></b>


위와 같은 방식으로 표현해야 한다.



3) 모든 태그의 속성은 작은 따옴표로 감싸야 한다.


 <form method=post action=post.php>


를 사용 하는 대신에


 <form method='post' action='post.php'>


를 사용해야 한다. 물론 작은 따옴표 대신 큰 따옴표를 사용해도 무관하다.



4) &문자는 혼자 쓸 수 없다.


예를 들면, 문자열 '배트맨& 로빈'은 '배트맨 &amp; 로빈'으로 대체해야 한다.

<a href="index.php"?page=12&itemp=15"> 는

<a href="index.php"?page=12&amp;itemp=15"> 로 바뀌어야 한다.



5) XHTML 태그는 대소문자를 구분하고 모두 소문자여야 한다.


<BODY><DIV ID="heading"> 는

<body><div id="heading"> 로 바뀌어야 한다.



6) 속성은 더 이상 축소될 수 없다.


<option name="bill" selected> 는

<option name="bill" selected="selected"> 로 바뀌어야 한다.


checked 는 checked="checked" 이렇게

disabled 도 disabled="disabled" 이렇게 바뀌어야 한다.



7) XHTML 문서는 가장 첫 줄에 새로운 XML 선언인 <?xml version="1.0" encoding="UTF-8"?>로 시작해야 한다.



8) DOCTYPE 선언은 바꿨다.



9) <html> 태그는 현재 xmlns 속성이 필요하다.



10) 허용된 문법을 정의하는 DOCTYPE 선언은  HTML5를 넘어오면서 <!DOCTYPE html> 로 간단해졌다.





'개발 > ' 카테고리의 다른 글

Nessus 를 활용한 웹서버 취약점 확인  (0) 2015.03.19
LAMP 설치 (Linux, apache, MySQL, PHP)  (0) 2015.03.19
Ajax  (0) 2015.03.09
MySQL  (0) 2015.02.19
웹 개발 환경 설정  (0) 2015.02.18