#20250118

프레임워크(Framework)
그동안 만들었던 일반 웹 페이지(모던 PHP)는 경로가 /도메인/디렉터리/파일명으로 이루어져 있지만,
프레임워크는 /도메인/컨트롤러/메서드/파라미터로 이루어져 있다.

ci3.st.kr


페이지는 views/welcome_message.php이고, 이 페이지를 뜨게끔 만들어주는 곳이 controllers/welcome.php에 있다.

/application/views/welcome_message.php 수정


같은 경로에 test.php 생성.

원래는 test.php를 접속할 때 url에 경로를 치고 (ci3.st.kr/application/views/test.php) 접속하면 되지만,
프레임워크에서는 직접적으로 접근 할 수 없게 막아놓았다.

nikto로 찾아보아도 직접 만든 logs 디렉터리를 제외하고는 탐지되지 않는다.



/application/controllers/Welcome.php를 살펴보면 Welcome은 클래스(컨트롤러)라고 정의되어있다.

test.php를 실행시키기 위해서는 기존 index 함수에서 연결되는 페이지를 welcome_message -> test로 변경하거나,
함수를 하나 더 생성해서 test로 연결시키고, 웹에서 ci3.st.kr/index.php/welcome/test로 접속한다.


---

ci3.st.kr/index.php/Auth/login
ci3.st.kr/index.php/Auth/logout
ci3.st.kr/index.php/Auth/mypage
ci3.st.kr/index.php/Auth/signup
접속하기.

/controllers에 Auth.php 생성.


/views에 auth 디렉터리 생성 후 login.php, logout.php, mypage.php, signup.php 생성.


웹으로 접속해보면 정상적으로 뜨는 것을 확인할 수 있다.




ci4.st.kr
ci3.st.kr를 처음 만들면 index.php가 있어서 페이지가 바로 뜨지만, ci4는 index.php가 public 디렉터리 안에 존재하기 때문에, 페이지가 바로 작동되지 않는다.

세팅
1. nano /etc/apache2/sites-available/hosting.conf
ci4.st.kr의 기본 경로를 /home/ci4/public_html/public으로 수정,
<Directory "/home/ci4/public_html/public">
   AllowOverride All
   Require all granted
   Options None
</Directory>
추가해준다.


2. writeable 권한 777로 변경
> su ci4
> cd /home/ci4/public_html
ci4 > chmod -R 777 writable

3. a2enmod rewrite
> systemctl restart apache2


---- 여기까지 하면 사이트 정상적으로 작동되지만, 그래도 안된다면

4. env 파일
> su ci4
> pwd
/home/ci4/public_html
> ls -al
env 파일 확인
> cp env .env
> nano .env
주석 해제:
CI_ENVIRONMENT=development


editplus

ci4/public_html/app/Config/App.php
19행 public string $baseURL='http://ci4.st.kr/';
localhost에서 ci4.st.kr로 url 수정.

같은 경로의 Routes.php
$routes->get('/', 'Home::index');
$routes->get('/auth/', 'Auth::index');
$routes->post('/auth/login', 'Auth::login');
$routes->get('/auth/logout', 'Auth::logout');
$routes->get('/auth/mypage', 'Auth::mypage');

/app/Controllers
Auth.php 생성


/app/view에 auth 디렉터리와 templates 디렉터리 생성.
auth에 login.php, logout.php, mypage.php
templates에 header.php, footer.php 생성.

웹에서 ci4.st.kr/auth 로 접속하면 정상적으로 페이지가 접속이 된다.
하지만 bootstrap js, css 파일이 없어서 코드가 완전히 적용되지 않는다.


해결
header.php에 bootstrap 파일을 불러오는 코드를 수정해준다.
<link rel="stylesheet" href="<?=base_url('static/bootstrap.min.css');?>">
<script src="<?=base_url('static/bootstrap.bundle.min.js');?>"></script>


그러면 static 디렉터리를 만들어야 하는 위치는 어디일까?
모든 디렉터리와 파일은 외부에서 접근이 막혀있는데, 유일하게 접근 할 수 있게 오픈된 디렉터리는 public이다. 그러므로 public_html 밑에 있는 public 디렉터리 밑에 static 디렉터리를 생성해서 그 밑에 bootstrap 파일을 넣어준다.




---

login.php
form태그 시작하는 부분 아래에 <?=csrf_field?>를 넣어준다.
이 코드는 토큰을 자동으로 생성해 CSRF 공격을 차단하는 코드이다.
앞으로 form 태그를 사용하는 페이지에는 저 코드를 넣어준다.


우리가 url, 파일 경로로 불러오는 /auth/login, /auth/logout과 같은 형태의 경로는, 이미 Routes.php에 정의해놓았다.
Auth.php에 정의되어있는 login, logout 함수를 불러오라는 뜻이다.

또, Routes.php에 /auth/는 index 함수라고 정의되어있다.
Auth.php에 index 함수는 header, login, footer를 불러오라고 정의해놓았기 때문에,
기본 웹사이트 경로인 ci4/index.php/auth로 접속하면 login.php가 로딩되어서 로그인 페이지가 뜨는 것이다.

화면 > Views
연결 > Controllers
DB > Models



로그인 처리를 위한 DB 생성.

CREATE DATABASE ci4;
CREATE USER 'ci4'@'localhost' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON ci4.* TO 'ci4'@'localhost';
FLUSH PRIVILEGES;

CREATE USER 'ci4'@'192.168.56.104' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON ci4.* TO 'ci4'@'192.168.56.104';
FLUSH PRIVILEGES;

CREATE TABLE users (
idx int(6),
id_param varchar(15),
pw_param varchar(32),
last_login TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
failed_login INT(3),
PRIMARY KEY (idx)
);

admin, 123456 데이터 삽입.