현재까지의 단계
1. vim
2. 파일질라로 업로드
3. sh로 html템플릿 만들기
4. php로 html템플릿
5. nginx의 요청과 php를 연동(php-fpm이 중간다리의 역할을 수행)
6. 쿠키 사용(클라이언트에서 생성, 쿠키를 서버측에서도 바꿀 수 있다는 문제가 있음 - 보안에 약하다)
7. 세션 사용(서버에서생성, 서버사이드언어의 도움없이는 이루어질 수 없음)
--------------오늘 포스팅하는 내용 -----------------------
8. 기억력(웹서버 : 기억력 0) -파일 저장이 귀찮다
9. 디비 사용 - 파일에 데이터를 쉽게 저장/조회할 수 있게 한다.
8. 기억력
- 웹서버 : 기억력이 아예 없다.
- php : 기억력은 없지만, 쿠키 또는 세션을 이용해 약간은 저장할 수 있다.(휘발성이다)
- php안에 있는 모든 변수는 메모리에 저장된다(파일 실행이 끝나면 날아감)
- 영속성을 유지하기 위해서는 파일의 형태를 이용한다.
파일 통해 값 저장하기
//store_by_file.php
<?php
$name=$_GET['name'];
file_put_contents('data/1.txt', $name);
?>
//get_by_file.php
<?php
echo file_get_contents('data/1.txt');
?>
url 파라미터로 name을 받아서 data/1.txt 파일에 저장하는 코드다.
현재는 data 폴더가 없으므로 생성해줘야 하는데, 여기서 중요한 점은
웹 서버는 nginx를 통해 띄워지기 때문에 nginx 구동 계정의 소유이고 쓰기 권한이 있어야 정상적으로 서비스 할 수 있다는 점이다.
따라서 chmod 777 data 명령어를 통해 디렉토리의 소유자 권한을 변경해주어야 정상적으로 값을 쓰고, 받아올 수 있다‼️
(이 부분을 간과해서 문제를 찾는데 시간이 좀 걸렸다.)
그래서 이렇게 site4.com/store_by_file.php?name=이름 을 입력하고 http://site4.com/get_by_file.php 에 접속하면
입력받은 파라미터 값대로 파일이 저장되고 읽어져서 나온다!
파일은 영속적이기 때문에 파일안의 값을 변경하거나 지우지 않는 이상 계속 해당 값이 유지된다.
9. DB를 이용한 값 저장
//store_by_db.php
<?php
$name = $_GET['name'];
// 접속 정보
$dbHost = '127.0.0.1';
$dbId = 'dajung';
$dbPass = 'lion1065';
$dbName = 'site4_name';
// DB 연결
$dbConn = mysqli_connect($dbHost, $dbId, $dbPass, $dbName) or die("DB CONNECTION ERROR");
// SQL INJECTION 방어
$name = mysqli_real_escape_string($dbConn, $name);
$sql = "
INSERT INTO name
SET create_date = NOW(),
`name` = '{$name}'
";
mysqli_query($dbConn, $sql);
$id = mysqli_insert_id($dbConn);
db에 접속한 후 database, table 생성하기!
mysql -u [유저이름] -p
MariaDB [(none)]> DROP DATABASE IF EXISTS site4_name;
MariaDB [(none)]> CREATE DATABASE site4_name;
MariaDB [(none)]> USE site4_name;
MariaDB [(none)]> CREATE TABLE name (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
create_date DATETIME NOT NULL,
name VARCHAR(100) NOT NULL
);
php에서 database에 접속할 수 있는 패키지매니저(php-mysqli) 설치
sudo yum install php-mysqli
sudo systemctl restart php-fpm
이제 주소를 입력하면
이렇게 값이 잘 쌓인다
+)한글 깨짐을 해결하는 방법
(링크첨부)
DB에서 값 받아오기(get_by_db.php)
<?php
// 접속 정보
$dbHost = '127.0.0.1';
$dbId = 'dajung';
$dbPass = 'lion1065';
$dbName = 'site4_name';
// DB 연결
$dbConn = mysqli_connect($dbHost, $dbId, $dbPass, $dbName) or die("DB CONNECTION ERROR");
$sql = "
SELECT *
FROM `name`
ORDER BY id DESC
LIMIT 100
";
$rs = mysqli_query($dbConn, $sql);
$rows = [];
while ( $row = mysqli_fetch_assoc($rs) ) {
$rows[] = $row;
}
?>
<h1>명단</h1>
<table border="1">
<thead>
<tr>
<th>ID</th>
<th>날짜</th>
<th>이름</th>
</tr>
</thead>
<tbody>
<?php foreach ( $rows as $row ) { ?>
<tr>
<td><?=$row['id']?></td>
<td><?=$row['create_date']?></td>
<td><?=$row['name']?></td>
</tr>
<?php } ?>
</tbody>
</table>
설명 : mysql 쿼리의 fetch 결과를 rows에 배열의 형태로 저장한다.
배열의 값을 foreach 문을 통해 하나씩 꺼내와서 id, create_date, name의 값을 각각 테이블의 컬럼에 담고, 출력한다.
결과!
'🐤 study > Infra' 카테고리의 다른 글
[인프라] 포트포워딩 | CentOS9 포트포워딩 | 인프라 세팅방법 (1) (0) | 2022.08.19 |
---|