728x90

목차

  1. PHP 변수
  2. URL과 파라미터
  3. 배열
  4. 조건문&반복문배열
  5. 함수
  6. 리팩토링_require/require_once
  7. 보안_htmlspecialchars/basename

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]\">

728x90

+ Recent posts