프롤로그
PHP 개념이랑 데이터베이스 연동, apache2 연동만 알아보고, 바로 이제 게시판 만드는 프로젝트 진행해보자.
PHP
PHP(Hypertext Preprocessor)는 서버 사이드 스크립팅 언어로, 웹 개발에서 동적인 웹 페이지를 생성하는데 사용한다.
PHP는 HTML 코드 안에 삽입되어서 서버에서 실행이 되고, 그 결과를 클라이언트에게 전달한다. 이 PHP가 데이터베이스와의 연동, 세션 관리, 파일 처리 등 다양한 기능을 할 수가 있다.
웹 브라우저에서 PHP 코드가 실행되는 것이 아니라, 서버측에서 PHP 코드가 실행되고 나온 결과를 처리해서 HTML 결과로 클라이언트로 전송한다. 그래서 PHP코드가 사용자에게 노출되지 않도록 하여 보안을 강화할 수 있다.
그리고 동적으로 사용이 가능하다.
PHP 특징
1. 크로스 플랫폼
Windows, Linux, macOS 등 다양한 운영체제에서 실행될 수 있기에 어떤 서버에서든 PHP를 사용할 수 있다.
2. 데이터베이스 연동
MYSQL같은 데이터베이스 시스템과 쉽게 연동이 된다.
3. 오픈소스
기에 무료이다
4. 다양한 기능 제공
이 된다.
구조로는 HTML 코드에다가 중간에, 처리해야할 내용들은 <?php?> 이 구문 내부에다가 내용들을 입력한다 예시를 들자면
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>PHP Example</title>
</head>
<body>
<h1>Welcome to My Website</h1>
<p>Current date: <?php echo date('Y-m-d H:i:s'); ?></p> <!-- PHP로 현재 날짜/시간 출력 -->
</body>
</html>
기존 HTML코드랑 같은데, 중간에 php로 처리하는 코드들 저런 곳에서 이제 사용을 한다.
php 설치하기(로컬 환경)
sudo apt install php
를 입력을 하면 된다.
php언어만을 설치하는 명령어이다. php의 기본 패키지를 설정하는데, 웹 서버와의 통합은 포함되지 않는다.
그렇기 때문에 우리는 아파치 웹 서버에서 PHP를 실행할 수 있게 해주는 모듈(libapache2-mod-php)을 설치하는 명령어이다.
아파치랑 연동할려면 저 모듈을 설치해야한다.
sudo apt install php libapache2-mod-php
이렇게 설치 안 하면, 나중에 따로 웹 서버에서 php를 처리하기 위한 추가 설정이 필요하다.
그 다음에, 이제 파일 index.php를 만들고
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<?php
echo "Hello, World!";
?>
</body>
</html>
이를 입력한 다음에, 터미널에다가
php -S localhost:8000
를 입력해보자.
이렇게 php로 작성한 다음에 내부적으로 열 수 있다. 이렇게 코드를 작성한 것을 가지고 후에 깃허브에 올려서, 나온 결과물을 서버에 아파치를 통해서 올려야 할 것이다. 그 과정은 조금 나중에 하고, 일단은 윈도우에서든 맥에서든 php를 이용해서 개발하는 데에 집중하자.
php의 기본 문법
기본적으로 뭐든, 코딩을 할 때 어떤 언어든간에
1. 변수 선언
2. 입출력
3. 배열
4. if문(조건문)
5. for문, while문 (반복문)
6. 함수
이렇게만 알면 어떻게 해서든 코드는 돌아가게 짤 수 있다고 생각을 한다. 그래서 저 위에 것만 간단하게 알아봐서 해볼 것이다.
1. 변수 선언
얘는 파이썬 처럼 동적 타이핑을 지원한다. 그래서
<?php
$name = "a";
$age = 30;
$height = 171,5;
?>
이렇게 $ 달러 표기 뒤에다가 변수명을 적은 다음에 넣고자 하는 데이터를 집어넣으면 된다.
이때 변수 선언시, 영문자, 숫자, 밑줄로 이루어져야 하며, 처음에 숫자로 시작못하는 건 다른 언어랑 똑같다.
2. 입출력
(1) 출력
출력으로는 print문과 echo 문 이렇게 두 개가 있다.
echo 부터 보면
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<?php
echo "hello", "world";
echo "<h1>안녕 세상아</h1>";
echo "<h2>이제 안 반가워</h2>", "<h3>저리가</h3>";
?>
</body>
</html>
이 echo를 활용해서 실행시켜보면
이렇게 나온다. 여러 문장을 출력할 떄는 , 를 이용해서 출력한다.
print를 이용해본다면
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<?php
print("<h1>안녕</h1>");
print("<h1>하세요</h1>");
print("반갑습니다" . "<p>제 이름은</p>" . "서민재 입니다");
?>
</body>
</html>
이렇게 .을 이용해서 문장들을 연결해서 출력할 수 있다.
이걸 실행해보면
이렇게 나온다. 그리고 print를 쓰면 반환값으로 1을 반환하는데, 이를 토대로 출력이 됐는지 안 됐는지 확인을 할 수가 있다. 이따가 if문때 알아보자.
변수를 출력하고 싶다면, 출력할 부분에 $변수 적기만 하면 된다
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<?php
$firstName = "John";
$lastName = "Doe";
$age = 30;
echo "<h1>My name is ", $firstName, " ", $lastName, " and I am ", $age, " years old.</h1>";
print "<h1>My name is " . $firstName . " " . $lastName . " and I am " . $age . " years old.</h1>";
?>
</body>
</html>
이렇게 하고 실행하면
이렇게 결과가 웹 사이트에서 출력이 된다. 변수를 그대로 사용이 된 것이다.
(2) 입력
어쨌거나 웹 페이지기 때문에, 입력을 받을 시에는 파일, GET, POST, REQUEST 등의 폼으로 입력받아야하는데, 이는 나중에 알아볼 것이다.
3. 배열
php에서 배열은 여러 개의 값을 하나의 변수로 저장할 수 있는 데이터 구조이다. 배열을 사용하면 데이터를 효율적으로 관리하고, 여러 값을 그룹화하여 처리할 수 있다.
인덱스 배열과 연관 배열 두 가지 주요 유형으로 구분이 된다.
배열을 사용할 때는 array()함수를 사용하거나, []을 사용할 수 있다.
(1) 인덱스 배열
파이썬의 리스트 느낌이다.
<?php
$a = array("a", "b", "c");
$b = ["d", "e", "f"];
echo $a[0];
echo $b[0];
?>
이렇게 하면
a배열과 b배열의 0번인덱스를 출력하는 것을 확인할 수 있다.
이게 파이썬 같은 리스트 역할을 하나 서로 각기 다른 값들을 넣어봤는데
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<?php
$a = array("a", "b", "c", 3, 3.5);
echo $a[0], $a[1], $a[2], $a[3], $a[4];
?>
</body>
</html>
진짜 딱 파이썬 리스트 느낌처럼 어떤 값이든 다 들어가지는 것 같다.
이중 리스트 처럼 내부에 배열도 들어가지는지 확인해보자.
배열 전체를 출력하려면
print_r(배열)
을 쓰면 된다.
예제를 보면
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<?php
$mixArray = array(
"Hello",
10,
3.14,
true,
array("apple", "banana"),
null
);
print_r($mixArray);
?>
</body>
</html>
이 코드를 실행시키면
이렇게 출력이 되는 것을 확인할 수 있다.
아, 파이썬에서는 맨 뒤에 값 추가할 때 .append()를 썼다면, 여기서는 그냥 a[] = "값" 해주면 그냥 알아서 맨 뒤에 추가가 된다.
방금 코드에다가
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<?php
$mixArray = array(
"Hello",
10,
3.14,
true,
array("apple", "banana"),
null
);
$mixArray[] = "추가";
print_r($mixArray);
?>
</body>
</html>
print_r 전에 $mixArray[] = "추가";를 적고 출력하면
이렇게 추가가 되는 것을 알 수 있다.
(2) 연관 배열
파이썬으로 따지면 딕셔너리 같은 느낌이다. 각 요소에 대한 고유한 키를 문자열로 지정할 수 있고, 인덱스가 숫자가 아니라 사용자가 지정한 키로 접근한다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<?php
$temp = array("a" => 1, "b" =>2, "c"=>3);
print_r($temp);
?>
</body>
</html>
=> 을 기준으로 키와 값이 나뉘어지고, 각 키는, 을 기준으로 나뉜다.
각 데이터에 접근할때는 인덱스인 [0] 이렇게 접근 하는 게 아닌, [a] 이렇게 키 값으로 딕셔너리 처럼 접근한다.
마찬가지로, 파이썬 딕셔너리 처럼, Array 배열 내부에 없는 값을 키로 입력하고, value 넣어주게 되면 새로운 값이 추가 된다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<?php
$temp = array("a" => 1, "b" =>2, "c"=>3);
$temp["d"] = 4;
$temp["c"] = 5;
print_r($temp);
?>
</body>
</html>
이렇게 기존에 있는 값은 새로운 값을 넣어주면 해당 키 값에 대한 값은 수정이 되고
내부에 없던 키값을 가져오면 새로 추가되는 것을 확인할 수 있다.
(3) 배열 내부 함수들
파이썬에서도 많이 쓰던게 개수 세기, 정렬, 인덱스 구하기 정도인 것 같다.
우선 정렬부터 보자.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<?php
$fruits = array("Banana", "Apple", "Cherry", "Orange");
sort($fruits);
print_r($fruits);
print("<br>");
rsort($fruits);
print_r($fruits);
?>
</body>
</html>
sort()를 쓰면 그냥 오름차순 정렬이 되고, rsort()를 쓰면 내림차순 정렬이 된다.
그다음 길이구하기는 len 이 아닌 count를 사용한다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<?php
$fruits = array("Apple", "Banana", "Cherry");
echo count($fruits);
?>
</body>
</html>
3이 출력되었다.
그 다음 저거 한 줄씩 출력하려면
<?php
$fruits = array("Apple", "Banana", "Cherry");
foreach ($fruits as $fruit) {
echo $fruit . "<br>";
}
?>
이런식으로 foreach (전체 as 변수)
를 이용하여 전체 순회할 수도 있다.
그 외에, 키랑 값 바꾸기 위해, 병합하기 위해
array_flip //키 값 바꾸기
array_merge //배열 합치기
이렇게 있는데, 지금은 넘어가겠다.
4. 조건문
참일때만 돌아가게 하는 것. 다른 언어 했으면 웬만하면 다 알 것이다.
여기서는 if - elseif - else 그분을 사용한다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<?php
$a = 5;
if($a <5){
echo "5보다 작습니다";
}
elseif($a > 5){
echo " 5보다 큽니다";
}
else{
echo "5입니다";
}
?>
</html>
그래서 여기는 넘어가겠다. 아 그리고 혹시나 맨 뒤에 \n 이거 하고 싶으면 맨 뒤에 <br> 이거 붙여주면 된다.
아 그리고 입출력 할 떄, print 문이 반환값이 있다고 했는데
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<?php
$a = print "안녕<br>";
if($a == 1 ) {
echo "잘 출력이 처리되었습니다<br>";
}
else{
echo "안녕 못한대요<br>";
}
?>
</html>
이렇게 작성해보면, print문이 출력이 되었을 때 반환값이 1이 나오게 되고, 그래서 출력이 되었는지 확인할 때 저렇게 확인한다.
조건문을 a==2 이렇게 바꿔버리면 바로 else구문이 실행이 된다.
5. 반복문
<?php
for ($i = 0; $i < 5; $i++) {
echo "Iteration number: $i<br>"; // 0부터 4까지 반복
}
?>
<?php
$i = 0;
while ($i < 5) {
echo "Iteration number: $i<br>"; // 0부터 4까지 반복
$i++; // 반복문 종료 조건을 증가시킴
}
?>
이렇게 for문과 while문이 있고, 얘네도 마찬가지로 break, continue등으로 제어할 수 있다.
파이썬이랑 그냥 기본적인 문법 거의 비슷하니까 넘어간겠다.
6. 함수
기본적으로 구조만 알아보자.
function functionName($parameter1, $parameter2) {
// 함수가 수행할 작업
return $result;
}
구조는 이렇게 되고,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<?php
function sayHello() {
echo "Hello, World!";
}
sayHello();
?>
</html>
함수를 실행하면
이렇게 출력이 된다.
폼 데이터 처리
아까 입출력에서 이제 입력에 관한 내용이다.
index.php에다가 이렇게 입력하고
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h2>이름과 나이를 입력하세요</h2>
<form action="process.php" method="POST">
<label for="name">이름 : </label>
<input type="text" name="names" id="name" required><br><br>
<label for="age">나이 : </label>
<input type="number" name="ages" id="age" required><br><br>
<input type="submit" value="Submit">
</form>
</body>
</html>
process.php 새로운 파일을 만들고 거기에는
<?php
$name = $_POST['names'];
$age = $_POST['ages'];
echo "<h2>Your Input:</h2>";
echo "Name: " . $name . "<br>";
echo "Age: " . $age . "<br>";
?>
이렇게 입력한다.
label - id 이렇게 두 개가 한 세트이고, 저기 있는 name 부분은 _POST와 하나의 세트이다.
이렇게 입력을 하고 Submit을 누르면
이렇게 입력받은 값을 처리하는 것을 확인할 수 있다.
name 부분에다가 넣는것이고, 그것을 $_POST[name값] 으로 처리하는 것이다.
에필로그
바로 이제 php와 apache, MySQL연결하고, 바로 이제 회원가입 로그인 부터 만들어보자.
'KnockOn' 카테고리의 다른 글
[3주차 TIL] KnockOn Bootcamp PHP 게시판 생성 및 조회 (0) | 2024.12.22 |
---|---|
[3주차 TIL] KnockOn Bootcamp PHP와 MySQL 연결, 회원가입과 로그인 (0) | 2024.12.22 |
[3주차 TIL] KnockOn Bootcamp MySQL (1) | 2024.12.20 |
[3주차 TIL] KnockOn Bootcamp Apache (2) | 2024.12.20 |
[1주차 TIL] KnockOn Bootcamp HTML, CSS, JS (0) | 2024.12.09 |