목차
htmlspecialchars/basename
[바로가기] PHP MySQL 연동
[바로가기] PHP 세부 설정
[바로가기] 파일로 구현한 CRUD
1. PHP 변수
[목차 바로가기]
* <?php ?>
* $var = ' ';
* ' . ' vs ' + '
<body>
<?php
$var = "ABC";
echo "abc_"."var"."_abc"; //abc_ABC_abc
?> <br>
<?php
$num1 = 1;
$num2 = 2;
echo $num1.$num2; //12
?> <br>
<?php
$num1 = 1;
$num2 = 2;
echo $num1 + $num2; //3
?>
</body>
2. URL과 파라미터
[목차 바로가기]
* URL의 ? 뒤가 전달된 파라미터를 의미하며 $_GET[ '파라미터이름' ] 이 전달된 파라미터를 캐치한다.
* post 방식으로 전달된 파라미터는 $_POST[ '파라미터이름' ] 으로 캐치한다.
<body>
<?php
echo $_GET['para1'];
?> <br>
<?php
echo $_GET['para2'];
?> <br>
<body>
3. 배열
[목차 바로가기]
* $arrVarName = array( 'a', 'b', ... , 'c' ); : 배열 생성
<?php
$arrayTest = array('AA', 'BB', 'CC');
echo $arrayTest[0].'<br>'; //AA
array_push($arrayTest, 'DD');
echo $arrayTest[3].'<br>'; //DD
var_dump(count($arrayTest)); //int(4)
?>
* 배열과 함께 사용될 수 있는 함수
함수 | 설명 | 예시 |
array_push( $arrVarName, 'DD' ); | arrVarName 배열의 마지막 인덱스에 DD인자를 추가 | |
count( $arrVarName ) | $arrVarName 배열의 인덱스 반환 |
4. 조건문&반복문
[목차 바로가기]
함수 | 설명 | 예시 |
while(condition){ //code... } |
condtion이 True가 될 때까지 코드를 반복 | $i = 0; while ($i < 6) { echo "Hi <br>"; $i = $i+1; } //Hi를 6번 반복 |
for ($i=0; $i < k; $i++) { // code... } |
$i가 +1씩 변하다가 k가 될 때까지 코드를 반복 | |
if (condition) { // code1... } else { // code2... } |
condition이 True이면 code1영역을 False라면 code2영역을 실행 |
5. 함수
[목차 바로가기]
6. 리팩토링_require/require_once
[목차 바로가기]
* 중복된 코드를 없애는 등 코드의 가독성을 높히고 유지보수를 쉽도록 하는 작업
* 관용적으로 lib폴더에는 재사용 가능성이 있는 기능성 함수들를 모아 관리하고 view폴더에는 시각적으로 보여지는 태그와 함수들을 모아 관리한다.(<head> <body> <html> 등의 태그도 모아 관리하기도 함)
* require( 'dir' ); 로 폴더에서 필요한 php파일을 호출해 사용한다. ex) require( 'lib/print.php' )
* require 함수에 정의된 함수가 중복 정의된다면 에러가 발생하므로 마음 편하게 require_once( 'dir' )를 사용하는게 마음편할 수 있음
* 위 첨부 이미지는 [2]가 없어도 기능을 하지만 top.php내 test_echo1 함수의 출처를 명확히 하기 위해서 코딩해 넣음. 대신 이로 인해 function.php가 test1.php에 최종 사용될 때 한번만 정의되면 되는데(require) <html> <head> <body>를 구성하는 top.php에서 한번 더 정의가 되어서 오류가 발생함. 따라서 top.php에 require 대신 require_once를 사용함. test1.php에는 require를 사용해도 되지만 마음편하게 require_once를 사용한 사례
7. 보안_htmlspecialchars/basename
[목차 바로가기]
a. 스크립트 인젝션 방어_htmlspecialchars
XSS(Cross Site Scripting) : 웹사이트에다가 <script> 를 주입
ex) 게시판에서 create나 update 작업을 할 때,
<script> location.href="https://www.google.com"; </script>
이런 식으로 스크립트 태그를 주입해서 사용자를 다른 웹페이지로 보내버릴 수 있음.
* XSS를 방어하기 위해 htmlspecialchars( );를 사용해 함수 안에 들어오는 스크립트 태그를 태그가 아닌 문자로 인식하게 만들어 xss를 방어할 수 있음.
b. 파일경로보호_basename
* 파일 시스템을 사용때는 URL을 사용자가 직접 입력해서 수동으로 파일에 접근 할 수 있기 떄문에 악용될 가능성이 있다.
ex) read.php?title=test3 와 같이 URL로 페이지를 이동한다면 파라미터를 사용자가 수동으로 입력할 수 있다. 만약title=../password.txt 처럼 파라미터를 변형에 부모 디렉토리로 접근한다면 페이지에 file_get_contents( );가 있기 때문에 개발자의 의도에 없던 파일 내용을 읽어 올 수 있게된다. (문제는 파라미터를 이용해 부모디렉토리에 접근할 수 있다는 것! 부모디렉토리에 접근할 수 없게 만드는 것이 해결책)
* basename( );를 사용하면 파일이름만 추출되기 때문에 ../는 기능하지 못함. 따라서 파라미터를 통해 부모디렉토리에 접근할 수 없음. 디렉토리와 관련된 코드에 사용해 보안을 높힌다.
//update_process.php
<?php
unlink('../textSample/'.basename($_POST['title']));
header('Location: ../CRUD_main.php');
?>
* 유용한 함수/기능
[목차 바로가기]
함수 | 설명 | 예시 |
var_dump($var) | 받은 변수의 데이터 타입을 출력해준다. 실제 서비스에서는 거의 쓰이지 않지만 개발과정에서 유용한 기능 (비교연산자를 받으면 Boolean 값을 출력함 |
var_dump('10'); //string(2) "10" var_dump(10); //int(10) var_dump('ten'); //string(3) "ten" |
isset($var); | 변수가 선언돼 있다면 TRUE 아니라면 FALSE를 반환 | $var1 = "set!"; if ( isset($var1) ) { echo "var1 is set<br>"; } else { echo "var1 is not set<br>"; } // var1 is set * var1=" " 도 변수 선언으로 인식 |
strlen("sentence"); | 함수에 들어 문자타입 변수의 길이를 반환 | $var = "strlenTest"; echo strlen( $var ); //10 |
header('Location: A') | A에 지정된 경로의 파일로 redirection 시켜줌 | <?php file_put_contents($_GET['textName'], $_GET['textAreaName']); header('Location: ./test.php'); ?> |
die($var) | 함수에 들어온 인자를 출력하면서 코드 실행 정지 (개발과정에서 변수에 값이 제대로 들어갔는지 사용할 때 사용) |
파일 관련 함수 | 설명 | 예시 |
scandir('dir'); | 해당 디렉토리의 파일 목록을 배열로 반환 | $dir = '/tmp'; $files1 = scandir($dir) |
file_get_contents('dir'); | 받은 디렉토리에 있는 파일을 읽는다. | echo file_get_contents('data/'.$_GET['param']); |
1. file_put_contents('dir'); 2. file_put_contents( '*.txt' , function( ) ); |
1. dir에 파일 생성 2. 현재 디렉토리에 *.txt 를 생성하고 function( )의 결과를 저장한다. |
file_put_contents('result.txt', sum(2,5)); //7이 result.txt 에 저장됨 |
file_exists('dir'); | dir에 해당하는 파일이 있으면 True 없으면 False를 반환 | if (file_exists($filename)) { echo "파일 존재"; }else { echo "파일을 찾을 수 없습니다."; } |
rename('dir1', 'dir2'); | dir1경로에 있는 파일이름을 dir2로 바꿈 | rename('../textSample/'.$_POST['old_title'], '../textSample/'.$_POST['new_title']); |
unlink('dir'); | dir 경로에 해당하는 파일을 삭제 | unlink('../textSample/'.$_POST['title']); |
** 디렉토리 지정할 때 ' ./temp ' 는 현재 파일이 열려있는 디렉토리의 하위폴더 temp를 의미하고
' ../temp ' 는 현재 파일이 열려있는 디렉토리의 부모 디렉토리의 하위폴더 temp를 의미함
** php는 \ 직후에 나오는 코드를 문법적으로 해석하는 것이 아니라 문자로 해석함
ex) <a href=\"index.php?param=$list[$i]\">
'# WEB > PHP' 카테고리의 다른 글
[PHP] 테이블 행마다 색을 자동으로 바꾸는 코드_for/if (0) | 2021.01.02 |
---|---|
[PHP] PHP와 MySQL로 구현한 CRUD (2) | 2021.01.02 |
[PHP] PHP와 MySQL 연동_mysqli API (0) | 2020.12.29 |
[PHP] PHP 세부설정_에러표시/수정사항/타임존/포트설정 (0) | 2020.12.20 |
[PHP] 파일로 구현한 CRUD (0) | 2020.12.13 |