본문 바로가기
Language/php

inc 파일 ... 대신에?

by 잘먹는 개발자 에단 2024. 9. 12.

inc 파일

- 헤더 정보를 참조하기 위해 소프트웨어 프로그램의 소스코드에서 사용하는 포함 파일이다.

- .h 파일 형식과 유사하다. 

- 여러파일에 똑같은 소스가 들어가 있을 경우에 소스의 중복을 줄이기 위해서 만든 파일이다.

- 소스의 최적화, 유지보수 효율 증대 등의 효과가 있음.

- 주로 DB연결 / 호출 부분에서 가장 많이 쓰인다.

 

php에서 사용될 경우 INC 파일 사용의 단점도 존재한다.

- php 파일이 inc 파일을 참조하고 서버가 .inc 파일을 구문분석하도록 구성되지 않은 경우가 일반적이다.

- 이 경우에 사용자는 URL 디렉토리를 방문하여, .inc 파일에서 php 소스코드를 볼 수 있다.

- 따라서 php에서 inc파일을 포함 파일로 사용할 때 주의해야 한다. 

- 사용자들이 URL을 직접 만문해서 .inc 파일에서 php 소스코드를 볼 수 있다. 

- 이 경우에 데이터베이스 연결 문자열 프로퍼티들이 전부 노출될 수 있는 위험이 존재!(!!!)

 

- 때문에 .php 확장자를 부여하고 include 폴더에 넣어서 쓰는게 같은 효과를 내면서 위에서 언급한 보안 위험 없이 쓸 수 있으니 그렇게 쓰는게 낫다.

     ㄴ 실제로 php에 php data objects 연결을 하고 pdo 를 반환하도록 했더니 이상없이 실행 잘 실행된다. 

 

<?php
function connectDB(): PDO
{

    try{
        $PDO = new PDO("mysql:host=localhost:3306;dbname=ACCOUNTS", "root", "비밀");
        $PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        echo "PDO 연결 성공 :)";
        return $PDO;

    }catch (PDOException $exception){
        throw new Exception("PDO 연결 실패 :(".$exception->getMessage());
    }
}

?>

 

 

<?php

include ("./db_connect.php");

$sql = "SELECT service_name, userid FROM ACCOUNTS.accounts WHERE service_name = :service_name; ";

$pdoInstance = connectDB();

// -- prepared statesments
$prepared_statements = $pdoInstance->prepare($sql);

$service_name = "업비트";
// -- query-variants > data binding
$prepared_statements -> bindParam(":service_name", $service_name);

$prepared_statements->execute();

while($row = $prepared_statements -> fetch(PDO::FETCH_ASSOC)){
    $name = $row['service_name'];
    $userid = $row['userid'];

    echo "\n{$name} - {$userid}";
}