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) &문자는 혼자 쓸 수 없다.
예를 들면, 문자열 '배트맨& 로빈'은 '배트맨 & 로빈'으로 대체해야 한다.
<a href="index.php"?page=12&itemp=15"> 는
<a href="index.php"?page=12&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 |