Hypertext Preprocessor의 약자로, 주로 웹 개발에 사용되는 서버 측 스크립트 언어이다. PHP는 HTML과 함께 사용되며, 데이터베이스와 상호 작용하여 다양한 웹 응용 프로그램을 만들 수 있다.
XAMPP을 설치하고 Control Panel에서 Apache, MySQL을 start 해 주면 된다.
이때 Apache(아파치)는 사용자의 요청을 받아들이는 웹 서버로, 요청이 있을 경우 php를 실행시키는 역할을 한다.

VSCode에서 PHP를 실행하기 위해서는 settings.json 파일을 편집하여

아래 사진과 같이 php.validate.executablePath에 C:\\xampp\\php\\php.exe를 설정해 주면 된다.

xamppp설치경로/htdocs 디렉터리 안에 아래 코드를 hello.php 파일로 저장한다.
<?php //php 실행을 시작하는 기호
echo "Hello PHP"; //출력 담당 명령어
?> //php 실행을 끝내는 기호
브라우저에서 http://localhost/hello.php 를 입력하면 아래와 같은 결과가 출력되는 걸 볼 수 있다.

<?php
// 실행되지 않는 한 줄 주석
>
/*
실행되지 않는
여러 줄 주석
*/
echo "this page is comment";
?>
$변수이름 = 변수에 들어갈 값
타입 선언을 하지 않고, 자동으로 결정된다.
var_dump는 데이터의 정보를 보여 주는 내장 함수이다.
<?php
$a = 1; // 정수 int
$b = 3.14; // 실수 float
$c = "hi"; // 문자열 string
$d = array(1,2,3,4); // 배열 array
$e = array('a'=>1, 'b'=> 2); // 연관배열 associative array
>
var_dump($a);echo "<br />";
var_dump($b);echo "<br />";
var_dump($c);echo "<br />";
var_dump($d);echo "<br />";
var_dump($e);echo "<br />";
실행 결과
int(1)
float(3.14)
string(2) "hi"
array(4) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) }
array(2) { ["a"]=> int(1) ["b"]=> int(2) }
일반 배열
배열의 선언, 생성하면서 초기값을 넣어도 무관하다.
$a1 = array(); $a2 = [1, 2, 3, 4];항목을 추가할 때는
array_push(배열, 넣을 값)을 사용한다.array_push($a, 5);항목을 삭제할 때는
unset을 사용한다. 이때 남은 배열의 항목들의 인덱스가 재배치되지 않는다.unset($a[0]);
연관 배열
연관 배열은
키:값쌍으로 이루어진다.$b = array('a' => 10);항목을 추가할 때는
$변수명[키] = 값을 사용한다.$b['b'] = 20;항목을 삭제할 때는
unset을 사용한다.unset($b['a']);
php는 일반 배열과 연관 배열을 혼합하여 사용 가능하다.
$c = [1,2,3]; $c['age'] = 999; var_dump($c);실행 결과
array(4) { [0]=> int(1) [1]=> int(2) [2]=> int(3) ["age"]=> int(999) }
산술 연산자
| 종류 | 설명 |
|---|---|
| + | 숫자 두 개를 더함 |
| - | 앞 숫자에서 뒤 숫자를 뺌 |
| * | 숫자 두 개를 곱함 |
| / | 앞 숫자에서 뒤 숫자를 나눔 |
| % | 앞 숫자에서 뒤 숫자를 나눈 나머지를 구함 |
| . | 문자열 두 개를 이어붙임 |
비교 연산자
| 종류 | 설명 |
|---|---|
| == | 값이 같은지 비교 |
| === | 값과 타입이 같은지 비교 |
| != | 값이 다른지 비교 |
| <> | 값이 다른지 비교, !=과 같음 |
| !== | 값과 타입이 다른지 비교 |
| > | 앞 숫자가 뒤 숫자보다 큰지 비교 |
| < | 앞 숫자가 뒤 숫자보다 작은지 비교 |
| >= | 앞 숫자가 뒤 숫자보다 크거나 같은지 비교 |
| <= | 앞 숫자가 뒤 숫자보다 작거나 같은지 비교 |
결과는
bool(true),bool(false)로 출력된다.
논리 연산자
| 종류 | 설명 |
|---|---|
| && | and, 둘 다 참이어야 참이다 |
| || | or, 둘 중 하나라도 참이면 참이다 |
| ! | not, 참이면 거짓을, 거짓이면 참을 반환한다 |
<?php
$a = true;
$b = false;
$c = $a && $b;
$d = $a || $b;
$e = !$a;
var_dump($c);echo "<br />";
var_dump($d);echo "<br />";
var_dump($e);echo "<br />";
실행 결과
bool(false)
bool(true)
bool(false)
<?php
$second = date('s'); //현재 시간을 가져오는 내장 객체
echo $second;
if ($second % 3 == 0){
echo " : 나머지가 0임";
}
elseif ($second % 3 == 1) {
echo " : 나머지가 1임";
}
else{
echo " : 나머지가 2임";
}
거의 대부분 foreach 반복문을 사용한다.
foreach(배열 as 배열항목)
foreach($a as $item){
echo $item;
echo "<br />";
}
function 함수이름(파라미터1, 파라미터2..) {
함수 내용
}
쿼리스트링(Query String): 브라우저에서 주소창으로 전달하는 GET 파라미터는 ?로 시작하며, 각 항목은 키:값 형태로 구성하고, 항목간의 연결에는 &로 표시한다.
get.php 파일에 아래 코드를 저장한 후,
<?php
$name = $_GET['name'];
$age = $_GET['age'];
echo "name is $name, age is $age";
http://localhost/get.php?name=syj&age=22 브라우저에 접속하면 아래와 같은 결과를 얻을 수 있다.

post.php 파일에 아래 코드를 저장한 후,
<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') {
// HTTP 메소드가 POST일 때 실행되는 부분
$name = $_POST['name'];
$age = $_POST['age'];
echo "name is $name, age is $age";
}
?>
http://localhost/post.php 브라우저에 접속하면 아래와 같은 화면을 볼 수 있다.

aaa, 222를 입력한 후 제출하면 입력값이 하단에 출력된다.

다른 페이지로 이동하는 것을 뜻한다.
redirect.php 파일에 아래 코드를 저장한 후,
<?php
header("Location: /target_url");
exit(); // php 실행을 끝내는 표시, 리다이렉트가 아닌 다른 상태로 바꿀 가능성을 차단하기 위해 사용함
?>
http://localhost/redirect.php 에 접속하면 http://localhost/target_url 로 이동한다.
세션: 서버에 저장되는 접속 클라이언트별 사용자의 정보이다.
<?php
function redirect($url){
header('Location: ' . $url);
exit();
}
>
session_start(); // php에서 세션을 사용하기 위해 반드시 써야 함
$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"); // 세션 삭제 후 주소로 이동
}
실행 결과
1. 세션이 없을 때를 확인하기 위해 http://localhost/session.php?action=get 로 접속한다.

2. 세션 세팅을 위해 http://localhost/session.php?action=set 로 접속한다면 이후 http://localhost/session.php?action=get 로 이동한다.

3. 세션 삭제를 위해 http://localhost/session.php?action=remove 로 접속한다면 삭제 이후 http://localhost/session.php?action=get 로 이동한다.

$date1 = date("Y-m-d H:i:s");
Y년도 4자리y년도 2자리m월d일H24시간 표기 시간h12시간 표기 시간i분s초
// 날짜 타입, 날짜를 더하거나 빼고 비교 가능 $date2 = new DateTime(); // DateTime 타입을 문자열로 바꾸고 싶다면 `->fromat(날짜포메터)` 를 사용 $date2->format("Y-m-d H:i:s") // 날짜를 더하고 싶다면 add 사용, "P1D" 는 Period 1 Day, 하루 간격이라는 뜻 $date2->add(new DateInterval("P1D"));
// 문자열을 사용해 하루를 추가하려면 date("Y-m-d", strtotime($date1.'+ 1 days')) //위 한문장을 아래처럼 적을 수 있음 $date = "2021-02-24"; $tomorrow_expression = $date . " + 1 days"; // 2021-02-24 + 1 days $tomorrow_time = strtotime($tomorrow_expression); // 1614207600 $tomorrow_date = date("Y-m-d", $tomorrow_time); // 2021-02-25