DAY32
DAY32

로그 확인 시스템 만들기


미션 
테이블명 log
idx(숫자),ip(문자),page(문자),regdate(날짜)
1  192.168.0.1 news>index.php 2025-02-01
2  192.168.0.1 news>delete.php 2025-02-01
클래스명 : Logs
함수명 : index,create,edit,delete
routes>
매서드 : getLog()
ci4.st.kr/log/
ci4.st.kr/log/create 저장 완료 후 ci4.st.kr/log/success로 이동
ci4.st.kr/log/edit/1
ci4.st.kr/log/delete/1

-----------------------------------------------------------------------

CREATE TABLE logs (
    idx int(11) NOT NULL AUTO_INCREMENT,
    ip varchar(128) NOT NULL,
    page text NOT NULL, 
    reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (idx)
);

-----------------------------------------------------------------------
***필터기능 = 플라스크 에노테이션 기능
,['$filter=>'auth']

로그인이 필요한 부분에 사용

app > filters
	AuthFilters.php 생성(chmod644)
< ?php
namespace App\Filters;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Filters\FilterInterface;

class AuthFilter implements FilterInterface
{
    public function before(RequestInterface $request, $arguments = null)
    {
        // 세션에서 로그인 여부 확인
        if (!session()->get('isLoggedIn')) {
            return redirect()->to('/login')->with('error', '로그인이 필요합니다.');
        }
    }

    public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
    {
        // 로그인 후에는 추가 조치를 하지 않음
    }
}



app > config > filters.php
	public array $aliases = []; 내에 추가 가능
	'auth'			=> \App\Filters\AuthFilter::class,추가



=> 로그인 전 페이지 확인 불가능하게 바뀜

------------------------------------------------------------------------------
------------------------------------------------------------------------------
프레임워크?
#
Board로 만들어주기 (log랑 같음)

CREATE TABLE board (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    upfile VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
------------------------------------------------------------------------------
***파일업로드 사이트 만들기
Boards.php

  public function create(): string
    {
		$file=$this->request->getFile('upfile');
		if ($this->request->getMethod() === 'POST' && $file )
		{
			if($file->isValid() && !$file->hasMoved()) {
				$newflame = $file->getRandomName(); //랜덤한 파일명 생성
				echo $newflame;
				$file->move('uploads', $newflame); // 파일 이동
				return "파일 업로드 성공: " . base_url("uploads/$newflame");
			}
		} else {
			echo "GET";
			echo "파일을 선택해주세요";
		}

      return view('templates/header')
         .view('boards/create')
         .view('templates/footer');
   }

/public/uploads 만들기
디렉토리 내 랜덤 이름으로 변경된 파일 업로드 되었는지 확인하기
------------------------------------------------------------------------------
***확장자 제한하기

if($file->isValid() && !$file->hasMoved()) {
$allowedExtensions = ['jpg', 'png', 'gif', 'pdf'];

            if (!in_array($file->getExtension(), $allowedExtensions)) {
               return "허용되지 않는 파일 형식입니다!";
            }
}