해킹/웹해킹

4주차 과제 1_PHP 정리

코코딩딩 2020. 11. 22. 18:17

PHP란 무엇인가?

server side script : 서버 측면의 기술, 언어

server : 요청에 의한 응답, 제공

client : 무언가를 요청

web client : 해당하는 구체적인 제품들에는 firefox, chrome, ie, safari이 있음

web server : 해당하는 구체적인 제품들에는 Apache, IIS, nginx이 있음

CGI(common gateway interface) : web server와 web client 간의 통신규약, 약속을 CGI라고 함

web : 네트워트 위에서 동작하는 하나의 서비스, 어플리케이션

internet : 컴퓨터들 간의 네트워크를 포괄한 것

PHP : Hypertext preprocessor로 서버쪽에서 실행 되는 프로그래밍 언어, PHP로 만들어진 경우의 예시로 위키피디아, facebook이 있음

PHP의 장점 : 배우기 쉽다, 웹에 최적화됐다.

PHP의 단점 : web만 위한 언어이고, 많은 사람의 손 거쳐 만들어져서 이름이나 인자가 일관성이 없다, 예측가능성이 낮아 기억할 게 많다.

 

윈도우에 PHP 설치하기

클라이언트가 서버에 요청하면 Apache는 사용자가 요청한 내용을 서버에 있는 파일을 찾음

설치 홈페이지 : https://bitnami.com/stack/wamp

 

 

윈도우 설정

php.ini-development : 개발환경에 권장되는 설정을 담고 있음

php.ini-production : 실서버를 권장하는 설정을 담음

에러를 브라우저에 표시하는 것, 에러를 로그로 기억하는 설정을 알아봄 (display_errors = On, log_errors = On)

 

첫번째 PHP 에플리케이션

화면에 Hello world 출력 해봄

<?php
echo "Hello world";
?>

<?php : php 엔진에게 php 문법에 따라 해석해야 함을 알려주는 기호

?> : 여기까지 php, 뒤에 나오는 것은 php가 아님을 알려줌.

문자열 작성시 “”로 감싸주고, 하나의 명령이 끝날 때 ;를 붙여줘야 함. 위 사진은 에플리케이션의 전체적인 흐름을 설명한 것이다.

 

서버측 언어를 사용하는 이유

HTTP : 웹브라우저와 웹 서버가 서로 데이터를 주고받기 위한 통신 규약

CGI : 웹서버와 서버사이드스크립트가 서로 데이터를 주고받기 위한 통신 규약

 

 

 

 

숫자와 문자

데이터형(data type) : 숫자와 문자 등이 있음

숫자 : 연산 가능, 자동적으로 정수와 실수가 됨

문자 : 문자를 쓸 때는 큰따옴표나 작은따옴표로 감싸줘야함, 문자와 문자를 결합할 때는 .을 써야함, 문자에서 큰따옴표를 쓰고 싶다면 문자를 작은따옴표로 감싸줘야함, 혹은 \“를 사용하면 됨

\” : “의 원래의 의미를 escaping을 해줌, 즉 문자열 시작을 의미에서 일시적으로 해제해줌, 따라서 단순한 문자 ”로 인식하게 해줌

var_dump(x) : x가 어떠한 형인지 알려줌

 

변수

변수 : 변하는 값, 다양한 데이터형이 들어갈 수 있음, 값을 재활용할 수 있고, 효율적으로 코딩할 수 있음

php에서 변수의 이름을 정의할 때, 무조건 앞에 $를 표시해줘야 함

<?php
$a=1;
echo $a+1;	#2
echo "<br />";
$a=2;
print $a+1;	#3
?>

echo와 print는 같은 의미라 생각하면 됨

주석처리 : 코드에 대한 설명할 때, 일시적으로 코드를 사용시켜주기 않고 싶을 때 사용, #와 //, /**/로 주석처리시킬 수 있음

상수 : 변하지 않는 값, 한 번만 정의하면 변경 불가능, 시스템에서 고정적으로 사용하는 값을 사용할 때 사용, 관습적으로 대문자로 씀

<?php
define('TITLE', 'PHP Tutorial');	# TITLE를 PHP Tutorial를 나타내는 상수로 설정
?>

gettype : 전달된 인자의 데이터형을 알려줌

settype : 첫 번째 인자로 주어진 값을 두 번째 인자에 해당하는 데이터형으로 변경

데이터형에 의해서 로직이 에러가 날 수 있고, 잘못된 방향으로 흘러갈 수 있어서, gettype와 settype를 사용함

가변변수 : 앞에 $$를 써서 표현해줌

 

비교

비교 : 조건문과 반복문에 핵심적으로 사용됨

Boolean : 데이터타입 중 하나, true와 false

연산자 : 컴퓨터에게 어떠한 작업을 지시하기 위한 기호

비교 연산자 : 주어진 값들을 비교하는 연산자, 비교 연산자의 결과는 true와 false 중의 하나

== : 같은지 비교

!= : 프로그래밍에서 !는 부정을 의미하며, 다른지 비교해줌

부등호 : 부등호에 따라 비교해줌, ex) >, >=. <. <=

 

입출력 그리고 폼과 HTTP

localhost/IO_form/25.php?id=happy 를 통해서 id에 값을 입력할 수 있다.

위 사진에서 &는 값과 값을 구분해주는 구분자이고, =는 값과 값 사이의 구분자이다.

form : 편리하게 정보를 server에 전송

입력컨트롤 : 사용자의 정보를 서버로 전송하는 장치, ex) 텍스트필드, 체크박스, submit 버튼

submit 버튼을 누르면, 입력컨트롤에 입력된 정보가 action 속성에 지정된 URL로 전송

get 방식 : 어떤 정보를 서버에 전송할 때, url에 데이터를 포함, url에 정보가 유출될 수 있음, 정보를 담고 있기 위한 링크를 위해서 사용됨

post 방식 : url에 정보를 적지 않고 서버에 전송, 보안에 관해서 안전한 방식

어떤 방식으로 수신했느냐에 따라, 가질 수 있는 방법이 달라짐

 

조건문

조건문 : 주어진 조건에 따라서 에플리케이션을 다르게 동작하도록 하는 것

if : 조건이 true이면 실행

else : if의 보강, 즉 if가 거짓일 때 실행, 조건을 가지지 않음

else if : if와 else의 보강, if와 else if가 나오고, else가 나옴, else와 달리 조건을 가짐

<?php
if (조건문1){
    실행문1
} else if (조건문2){
    실행문2
} else if (조건문3){
    실행문3
} else {
    실행문4
}
?>

논리 연산자 : 논리 연산자에는 and와 or이 있음, 이를 통해 하나의 조건 안에 여러 조건을 함께 쓸 수 있음

and(&&) : 좌우가 모두 true일 때, true

or : 좌우 둘 중 하나만 true여도, true

! : 부정의 의미, ex) !true = false

boolean : true와 false를 나타내는 데이터형, 관습적인 이유로 0는 false 0이 아닌 숫자는 true를 대체할 수 있음

PHP type comparison tables : 유사한 의미를 갖는 함수들에 따른 값을 알려줌

https://www.php.net/manual/en/types.comparisons.php

 

반복문

반복문 : 컴퓨터에게 반복적인 작업을 지시하는 방법, 반복문 안에는 다시 반복문이 나타날 수 있음

while : 조건을 만족하면 해당 코드를 실행

while(조건){
    코드
    코드
}

for : 조건을 만족하면 해당 코드를 실행시키며, 관습적으로 프로그래밍에서 카운팅할 때 0부터 함

for(초기화; 반복 지속 여부; 반복 실행){
    코드;
}

break : 반복문 중단시킬 때 사용, 반복문에서 할 일이 다 끝났을 때 사용

continue : 반복문의 실행을 중지하고(continue 이후의 코드를 실행하지 않고), 다시 반복문을 실행시킴, 특정 조건에서 할 일을 끝났지만 반복적으로 계속 수행해야 할 때 사용

 

함수

함수 : 코드에 대한 재활용, 정의(define)와 호출(call)로 이루어짐, 함수를 이용하면 유지보수가 용이함

function 함수명( [인자...[,인자]] ){
   코드
   return 반환값;
}

return : return 뒤에 따라오는 값을 함수의 결과로 반환하고, 출력하고함수를 종료함

인자 : 함수로 유입되는 입력 값, 인자의 기본값이 정의되어 있으면 입력값을 넣지 않고 함수를 호출했을 때 기본값으로 설정됨

지역변수 : 그 지역(함수) 안에서만 의미있는 변수

전역변수 : 함수 바깥쪽에 선언된 변수로, php 에플리케이션 전체에서 사용할 수 있는 변수

전역과 지역 모두 같은 이름의 변수가 존재한다면, 지역변수의 함수에서 그 변수를 부르면 그 지역변수 쓰게 된다.

global : 함수에서 전역변수에 접근하는 키워드, 권장되지 않는 방법으로 권장되지 않음

 

배열

배열(array) : 하나의 변수에 여러 개의 값을 관리하고 싶을 때 사용, 반복문과 결합할 때 진가가 나타남, 함수는 한 개의 값 리턴하는데 이때 배열을 리턴하면 하나의 호출로 여러 개의 데이터를 가져올 수 있음

<?php
$class = Array(“happy”,“cat”);
$class = [“happy”,“cat”];
?>

index(색인) : 위치를 통해서 정보를 가져올 수 있음, 프로그래밍에서 숫자를 0부터 카운팅해서 첫 번째 데이터의 index 값은 0

count : 배열의 요소의 개수를 알 수 있음

ucfirst : 첫 번째 문자를 대분자로 바꿔줌

push : 제일 끝에 값을 추가시킴

pop : 제일 끝에 있는 값을 나오게 함

shift : 맨 처음에 있는 값을 나오게 함

unshift : 시작점에 값을 추가시킴

sort : 숫자순이나 알파벳순으로 순서대로 정렬시켜줌

rsort : sort와 반대로 정렬시켜줌

PHP 공식 Array 사용 : php에서 제공하는 함수를 이용하는 것이 바람직함

https://www.php.net/manual/en/language.types.array.php

연관 배열(associative array) : 문자를 인덱스로 사용하는 배열

foreach : 연관배열을 열거시켜줌

 

 

참고 : opentutorials.org/course/62/233