반응형

XAMPP Access Forbidden 오류 해결

XAMPP에서 가상 호스트를 추가하려는데 해당 오류가 발생하여 아래와 <Directory></Directory> 를 추가하여 해결하였다.

Listen 포트번호
<VirtualHost *:포트번호>
    DocumentRoot "디렉토리 경로"
</VirtualHost>


## 이 부분을 추가하니까 해결
<Directory "디렉토리 경로">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride all
        Order Deny,Allow
        Allow from all
        Require all granted
</Directory>


## 예시
Listen 8020
<VirtualHost *:8020>
    DocumentRoot "C:/project"
</VirtualHost>

<Directory "C:/project">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride all
        Order Deny,Allow
        Allow from all
        Require all granted
</Directory>
반응형

'Programming > PHP' 카테고리의 다른 글

[PHP] 접근 제어자 private  (0) 2021.06.01
[PHP] 세션을 이용한 로그인 기능 구현  (0) 2021.05.31
[PHP] 줄바꿈 처리  (0) 2021.05.26
[PHP] 게시물 조회  (0) 2021.05.24
[PHP] 데이터베이스 연동  (0) 2021.05.24
반응형

PHP 접근 제어자 private

private는 같은 객체에서만 접근 가능하도록 설정하는 접근 제어자이다.

<?php


class MyfileObject {
	
    // private로 객체 밖에서 접근하지 못하도록 설정한다.
	private $filename;
    
    function __construct($file) {
    
    	// file_exists -> 파일의 존재 유무를 boolean형으로 리턴하는 함수
    	if (!file_exists($this->filename)) {
        	die($this->filename . '존재하지 않는 파일입니다.');
        }
    }
	
    function isFile() {
    	return is_file($this->filename);
    }
}

// 위에서 정의한 클래스 객체를 생성
$file = new MyFileObject('data.txt');

// 위에서 생성된 객체 내의 filename이라는 변수에 접근
$file->filename = 'abcd.txt';

?>

위 코드의 클래스에서 정의된 $filename 은 접근 제어자가 private로 설정되어 클래스 외부에서는 접근을 못하도록 한다.

클래스 밖에서 객체를 생성하고 생성자를 통해 $filename 을 초기화하는 것은 가능하지만 마지막 줄에 적힌 것처럼 filename 을 클래스 외부에서 접근하려고 하면 오류가 발생한다.

반응형
반응형

PHP 세션 시작

PHP에서 세션을 사용하기 위해서는 아래 코드와 같이 필수적으로 session_start()라는 메소드를 실행해줘야 한다.

<?php

// php가 세션을 사용하기 위해 필수적으로 실행해야 하는 메소드
session_start();


// 따로 빼 놓은 db 연결 php
require_once("../util/dao.php");


// 이전 페이지에서 POST 방식으로 아이디와 비밀번호를 가져옴
$userId = $_POST['userId'];
$userPass = $_POST['userPass'];


// 로그인 결과 저장 변수
$loginCk = 0;


// 아이디 존재 유무 확인 쿼리문
$idCk = "select userId from user where userId = '$userId'";

// 윗 줄 쿼리를 실행
$idCkResult = mysqli_query($dbConn, $idCk);


// 아이디가 있을 경우
if ($idCkResult) {

    // 비밀번호 확인
    $passCk = "select * from user where userId = '$userId'";
    $rs = mysqli_query($dbConn, $passCk);
    $result = mysqli_fetch_assoc($rs);
    if ($result['userPass'] == $userPass) {
        $loginCk = 1;

        // 'userId'라는 이름으로 세션을 생성하고 DB에서 가져온 userId컬럼의 값을 넣어줌
        $_SESSION['userId'] = $result['userId'];
    
    }

}

?>


<script>

    <?php if ($loginCk == 1) {?>
        alert("로그인되었습니다.");
        location.href="../article/list.php";
    <?php }else {?>
        alert("아이디 또는 비밀번호가 일치하지 않습니다.");
        history.back();
    <?php }?>
</script>

 

세션에 따른 메뉴 설정

로그인을 한 사용자와 하지 않은 사용자에게는 보이는 메뉴가 달라야 한다. 로그인 중인 사용자에게는 '정보수정', '로그아웃' 메뉴를 보여주고 로그인 하지 않은 사용자에게는 '로그인', '회원가입' 메뉴를 세션 유무에 따라 판별한다.

위에서 'userId'라는 세션을 만들어줬기 때문에 해당 세션의 유무에 따라 메뉴가 다르게 나온다.

<ul>
    <?php if (isset($_SESSION['userId'])) { ?>
    <li>
        <a href="../user/doLogout.php">로그아웃</a>
    </li>
    <li>
        <a href="../user/modify.php">정보수정</a>
    </li>
    <?php }else {?>
    <li>
        <a href="../user/login.php">로그인</a>
    </li>
    <li>
        <a href="../user/join.php">회원가입</a>
    </li>
    <?php }?>

</ul>
반응형
반응형

PHP 줄바꿈 처리 방법

데이터를 입력 받을 때 엔터 버튼을 치면 DB에는 '\n'으로 저장된다. 따라서 페이지에 출력 시 '<br>' 태그로 치환하여야 엔터를 입력한 만큼 정상적으로 출력할 수 있다.

<?php

$data = "안녕하세요

안녕하세요

안녕하세요.";

?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <?=$data?>
</body>
</html>

엔터가 입력되지 않을 것을 볼 수 있다.

nl2br 메소드

자바에서는 replaceAll()을 통해 '\n'을 '<br>'로 교체하는데 PHP에서는 nl2br에 변경할 변수를 넣어주면 알아서 줄바꿈 처리를 한다.

<?php

$data = "안녕하세요

안녕하세요

안녕하세요.";


$data2 = nl2br($data);

?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <?=$data2?>
</body>
</html>

정상적으로 줄바꿈 출력

반응형

'Programming > PHP' 카테고리의 다른 글

[PHP] 접근 제어자 private  (0) 2021.06.01
[PHP] 세션을 이용한 로그인 기능 구현  (0) 2021.05.31
[PHP] 게시물 조회  (0) 2021.05.24
[PHP] 데이터베이스 연동  (0) 2021.05.24
[PHP] 반복문(for, while, foreach)  (0) 2021.05.24

+ Recent posts