http 메소드에는 크게 9개 존재. 이 중 브라우저에서는 GET과 POST 2개를 주로 사용.
? 로 시작하고, 각 항목은 키:값 형태로 구성하며, 항목간의 연결에는 & 로 표시.$_GET 슈퍼 글로벌 변수를 이용해 &_GET[파라미터키] 형식으로 읽어올 수 있음<?php
$name = $_GET['name'];
$age = $_GET['age'];
echo "name is $name, age is $age";<form> 태그에 method 속성을 지정하지 않는다면 HTTP GET 메소드로 서버에 데이터를 전달하게 됨.<form method="post">
name : <input type="text" name="name" />
age : <input type="text" name="age" />
<input type="submit" />
</form>
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$name = $_POST['name'];
$age = $_POST['age'];
echo "name is $name, age is $age";
}
?>
<form method="post">
...
</form>
<form> 태그 안의 내용을 파라미터로 전달하는 POST 요청이 실행됨. <form> 태그에서 http 메소드를 결정하는 것은 method='POST' 속성.<input> 태그는 html에서 사용자 입력을 나타내는 태그. name 속성을 키로, value 속성을 값으로 서버에 전달. name 속성을 생략하면 서버에 전달되지 않음. value 속성을 생략하면 빈 문자열(”” )이 전달됨.$_SERVER['REQUEST_METHOD'] : PHP에서 요청 HTTP 메소드 읽음 요청 메소드 결과가 POST 일 때 if 문이 실행되어 바로 아래 코드 블럭이 실행됨.$_POST로 읽을 수 있음. $_POST 는 연관배열 타입으로, $_POST[파라미터이름] 형식으로 HTML에서 입력한 데이터를 읽어옴. 사용자가 입력한 값은 PHP의 $_POST['name']으로 읽음: 다른 페이지로 이동하는 것
<?php
header("Location: /target_url");
exit();
redirect.php 파일에 저장하고 브라우저에서 결과를 확인함.header 함수를 통해 응답 헤더에 보낼 데이터를 설정함.exit() 는 php 실행을 끝내는 표시세션 : 서버에 저장되는 접속 클라이언트별 사용자의 정보
<?php
function redirect($url){
header('Location: ' . $url);
exit();
}
session_start();
$action = $_GET['action'];
if ($action == "set"){ // 세션 설정
$_SESSION['key'] = 'session_value';
redirect("?action=get");
}elseif ($action == "get"){
if (isset($_SESSION['key'])){ // 세션이 있다면
echo $_SESSION['key']; // 세션 출력
}else{
echo "NO SESSION"; // 세션이 없다면 메시지 출력
}
}elseif ($action == "remove"){
if (isset($_SESSION['key'])){ // 세션이 있다면
unset($_SESSION['key']); // 세션 삭제
}
redirect("?action=get"); // 세션 삭제 후 "?action=get" 주소로 이동
}
세션의 작동 방식
- 클라이언트가 서버에 요청함
- 서버는 클라이언트가 보낸 데이터 중 세션키에 해당하는 쿠키가 있는지 확인함. PHP의 경우, 기본값은
PHPSESSIONID.- 세션 키가 없다면, PHP는 새로운 세션 키를 생성하고, 데이터를 서버에 저장.
- 클라이언트에
PHPSESSIONID=세션키형태의 쿠키 응답- 다음번에 클라이언트가 서버에 요청할 때는
PHPSESSIONID=세션키형태의 쿠키를 함께 전달하게 됨- PHP는
PHPSESSIONID=세션키쿠키가 요청 안에 포함되었으므로 기존에 서버에 저장된 데이터를 읽어서 처리할 수 있음.
redirect 함수는 여러 군데서 쓰이기 때문에 편의를 위해 만들어 둠session_start() 를 반드시 사용하기 전에 써서 세션을 준비해야 함. PHP의 기본 세션은 단순 파일로 저장되기 때문에 파일을 읽어오는 것.$action 변수는 파라미터에 따라 하는 일을 구분하기 위해 쿼리 스트링으로 입력. $action 의 값이 set 일 경우 세션을 설정하고, get 일 경우 세션을 가지고 오는 역할을 하고, remove 일 경우 세션을 삭제하게 됨.$_SESSION 글로벌 전역 변수를 통해 사용할 수 있음. 연관 배열 형태이기 때문에 사용법은 연관배열과 동일.$_SESSION[세션키] = 세션값 형태로 쓰면 됨.$_SESSION[세션키] 형태로 가지고 오면 됨.isset($_SESSION[세션키]) 형태로 쓰면 됨. isset 은 변수가 존재하는지 확인하는 내장 함수.isset($_SESSION) 으로 확인할 수 있음. 세션이 시작해야만 $_SESSION 변수가 생기기 때문에 아래와 같이 사용함.if(isset($_SESSION) == false){
session_start();
}unset $_SESSION[세션키] 로 삭제하면 됨<?php
$html = <<<CDATA
A 'quote' is <b>bold</b> "한글" 데이터
CDATA;
$encode = htmlspecialchars($html);
echo $encode;echo PHP_EOL;
$decode = htmlspecialchars_decode($encode);
echo $decode;
& 는 $amp; 로 변환됨
" 는 " 로 변환됨
' 는 ENT_QUOTES 옵션을 함께 줄 때만 변환됨
< 는 < 로 변환됨
> 는 > 로 변환됨
htmlspecialchars 함수는 html에서 XSS 공격을 방어하기 위해 특수 문자를 인코딩함.
인코딩한 결과를 반대로 바꾸려면 디코딩 함수인 htmlspecialchars_decode를 사용.
<?php
$origin_pw = "1234asdf";
$hash_pw = password_hash($origin_pw, PASSWORD_BCRYPT);
//암호가 원래 암호와 같은지 확인
$match = password_verify($origin_pw, $hash_pw);
//암호가 원래 암호와 다른지 확
$not_match = password_verify($origin_pw . "zxcv", $hash_pw);
var_dump($origin_pw);
echo "<br />";
var_dump($hash_pw);
echo "<br />";
var_dump($match);
echo "<br />";
var_dump($not_match);
echo "<br />";
password_hash 함수 : 암호화 함수, PASSWORD_BCRYPT 옵션은 암호화에 Bcrypt 알고리즘을 사용한다는 의미<?php
$data = "hi";
file_put_contents("data.txt", $data);
$load_data = file_get_contents('data.txt');
echo $load_data;
file_put_contents 함수 사용file_get_contects 함수 사용data.txt 파일을 읽어서 내용 출력<?php
$data = array(1, 2, 3, 4);
$serial_data = serialize($data);
file_put_contents("data.txt", $serial_data);
$load_data = file_get_contents('data.txt');
$unserial_data = unserialize($load_data);
var_dump($load_data);
echo "<br />";
var_dump($unserial_data);
$_load_data 로 확인 가능serialize 함수 사용unserialize 함수 사용<?php
require("before.php");
echo "this is main page : ";
echo $var;
echo "<br />";
require_once("after.php");
before.php 파일을 불러온 후, 이후 메인 페이지의 메세지를 출력하고, 마지막으로 after.php 파일을 불러온다.include , include_once , require , require_once 가 있다.include 는 파일이 없어도 경고만 나올 뿐 PHP는 계속 동작함. 파일 하나가 여러 번 호출되면 되는 횟수만큼 파일을 포함.include_once 는 파일이 없어도 경고만 나올 뿐 PHP는 계속 동작함. 파일 하나가 여러 번 호출되어도 처음 한 번만 파일 불러옴.require 는 파일이 없으면 오류가 나며, PHP의 실행이 완전히 멈춤. 파일 하나가 여러 번 호출되는 횟수만큼 파일을 포함.require_once 는 파일이 없으면 오류가 나며, PHP의 실행이 완전히 멈춤. 파일 하나가 여러 번 호출되어도 처음 한 번만 파일 불러옴.require 은 단순히 다른 파일을 내 파일의 일부처럼 가지고 온다는 뜻으로, 불러오는 순간 전역변수와 함수, 클래스 등 모든 것이 현재 스택이 존재하는 스코프 안에서 동작함.설치 후 세팅 중에 에러가 발생해 해결방법을 작성해봄
MySQL start 버튼을 눌러도 Attemptin to start MySQL service 문구가 뜬 후 응답이 뜨지 않아서 검색을 해보았다.
그리고 저는 시작 유형을 사용 안 함으로 설정했는데
이 과정에서 에러가 났지만 무시하고 진행하니 실행되었습니다.
그리고 이전에 관리자 권한으로 cmd 창에서 sc mysql delete 도 하고,
포트 번호를 3306에서 3307으로 변경해줬습니다!
