PHP 기초
PHP의 원리
- 웹브라우저에서 웹 서버로
index.php
을 달라고 요청보냄 - 웹서버는
index.php
을 처리할 수 있는 프로그램인 php에게 위임함 - php는
index.php
를 찾고, 해석해서 html 파일을 만듬. - 웹 서버는 html을 받고 웹브라우저로 보내줌.
PHP의 데이터 타입
숫자와 산술연산자
- int : 정수형
- float : 소수형
문자열과 문자열 처리
- string
- ’’
- ””
- 연산자
- . : 문자열 붙이기 ex) “hello “.”world” -> “hello world”
변수
$변수명
으로 선언
PHP와 URL 쿼리
php 입력으로 URL 쿼리에 접근할 때는 $_GET['key']
로 접근한다.
ex)
/index.php?name=shin
-> <?php echo $_GET['name']; ?>
-> shin 출력
PHP 함수의 사용
php에는 많은 내장함수가 있음. 대표적으로는 문자열의 길이를 알려주는 strlen()
, 새줄을 <br>
로 바꿔주는 nl2br
반복문
배열의 형식
array()
함수로 배열을 만든다.
키 없이 생성하면 인덱스로 접근가능하고, 키를 함께 선언하면 키로 접근 가능하다.
1
2
3
4
5
6
7
8
9
<?php
$cars=array("volvo", "bmw");
echo $cars[1];
?>
<?php
$cars_with_key = array(
'aaa' => "volvo");
echo $cars['aaa'];
?>
웹 어플리케이션
form과 post
FORM의 action으로 php를 주어 데이터를 전송할 수 있고, POST로 넘긴 데이터는 $_POST['key']
로 접근할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
<!doctype html>
<html>
<body>
<form action="form.php" method="post">
<p><input type="text" name="title" placeholder="Title"></p>
<p><textarea name="description"></textarea></p>
<p><input type="submit"></p>
</form>
</body>
</html>
1
2
3
4
// form.php
<?php
file_put_contents('data/'.$_POST['title'], $_POST['description']);
?>
글 수정 기능 구현
php는 html 태그 중간에도 삽입이 가능하다. 이는 문자열인 경우에도 마찬가지이다. 이를 통해 input 태그에 수정할 값을 디폴트 값으로 지정이 가능하다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<form action="update_process.php" method="post">
<input type="hidden" name="old_title" value="<?=$_GET['id']?>">
<p>
<input type="text" name="title" placeholder="Title" value="<?php print_title(); ?>">
</p>
<p>
<textarea name="description" placeholder="Description">
<?php print_description(); >
</textarea>
</p>
<p>
<input type="submit">
</p>
</form>
파일명 변경은 rename()
메서드를 사용하여 가능하다.
1
2
3
4
5
<?php
rename('data/'.$_POST['old_title'], 'data/'.$_POST['title']);
file_put_contents('data/'.$_POST['title'], $_POST['description']);
header('Location: /index.php?id='.$_POST['title']);
?>
필요한 경우에만 html 태그를 노출 시키는 것도 가능하다. 예를들어 아래 코드는 URL에 id 쿼리값이 있어야만 update 링크를 보이도록 한 예시이다.
1
2
3
<?php if(isset($_GET['id'])) { ?>
<a href="update.php?id=<?=$_GET['id']?>">update</a>
<?php } ?>
마무리
파일로 모듈화 - require
require()
: 필요한 파일을 불러옴. 파일이 없을 시 fatal error가 나타난다.require_once()
: require()와 동일하지만, 여러 모듈에 거쳐 한번만 불러옴.include()
: 필요한 파일을 불러옴. 파일이 없을 시 warning이 나타나지만 스크립트가 계속 실행됨.include_once()
: include()와 동일. 여러 모듈에 거쳐 한번만 불러옴.
보안
XSS
htmlspecialchars()
: 내부에 스크립트 코드가 있어도 그대로 문자열로 출력함.strip_tags()
: allowable_tags로 허용할 태그만 남기고, 나머지 태그는 전부 지운 후 출력
파일경로보호
basename()
:.
,..
와 같은 상대경로를 지우고, 파일명만 남기는 함수- ex)
../password.txt
->password.txt
- ex)