budtree
나를 조금만 더 완성해보는 날
budtree
전체 방문자
오늘
어제
  • 분류 전체보기 (77)
    • 💝 Computer Science (5)
      • OS (1)
      • Network (1)
      • Database (3)
    • 🐤 study (21)
      • kubernetes🕸️ (0)
      • Spring Boot🍃 (1)
      • JPA (2)
      • Infra (2)
      • HTML | CSS (3)
      • Java (6)
      • Kotlin (3)
      • etc (4)
    • 💻 Project (3)
      • memoir & diary 📚 (1)
      • class (0)
      • project (2)
    • 🔥 Problem Solving (38)
      • programmers (30)
      • SQL (8)
      • BOJ (0)
    • ✨ daily (10)
      • diary (5)
      • exercise (5)
      • travel (0)
      • review (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 헬스장
  • 월간 코드 챌린지
  • 서울대입구 헬스장
  • 피티
  • 프린이
  • 월간코드챌린지
  • 2018 KAKAO BLIND RECRUITMENT
  • pt
  • HashMap
  • 카카오코테
  • 카카오
  • 개린이
  • 코테
  • 프로그래머스
  • 취업
  • 코딩테스트
  • java
  • Summer/Winter Coding
  • programmers
  • 블랙멀티짐
  • 카카오코딩테스트
  • 일기
  • 자바
  • ArrayList
  • 헬린이
  • 취업준비
  • 코린이
  • 코틀린
  • css
  • kotlin

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
budtree

나를 조금만 더 완성해보는 날

[0906] 인프라 / centOS php파일저장 / centOS mariaDB 연동 / php db연동 / 파일저장 방법 / 웹서버에서 파일 저장
🐤 study/Infra

[0906] 인프라 / centOS php파일저장 / centOS mariaDB 연동 / php db연동 / 파일저장 방법 / 웹서버에서 파일 저장

2022. 9. 6. 09:55
현재까지의 단계

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
    '🐤 study/Infra' 카테고리의 다른 글
    • [인프라] 포트포워딩 | CentOS9 포트포워딩 | 인프라 세팅방법 (1)
    budtree
    budtree
    개발, 운동, 일상등의 글을 올립니다.

    티스토리툴바