[PHP] 파일 하나로 여러 개의 페이지 사용하기

Lpla

·

2021. 6. 14. 22:11

반응형

(그누보드 관련 포스팅을 할 계획이었는데, 막상 그누보드는 하나도 사용하지 않아서 php로 수정했다.)

 

 

일반적으로 웹사이트에서 한 페이지를 제작하기 위해 최소 파일 하나가 필요하다.

가령 index.html 페이지를 화면에 띄우기 위해서는 index.html 파일이 필요하다.

하지만 php와 파라미터를 이용한다면 파일 하나로 여러 페이지를 만들 수 있다.

 

 

간단한 예시를 살펴보자.

<section>
  <?php if ($_GET['mn01'] == '1_1') { ?>
    <div>1번</div>
  <?php } ?>

  <?php if ($_GET['mn01'] == '1_2') { ?>
    <div>2번</div>
  <?php } ?>

  <?php if ($_GET['mn01'] == '1_3') { ?>
    <div>3번</div>
  <?php } ?>
</section>

sub.php 파일을 만들고 위 코드를 입력했다.

그리고 http://도메인/sub.php 페이지로 접속하면 흰 화면만 출력된다.

 

 

하지만 내용이 하나도 없는 것은 아니다.

개발자도구를 확인해보면 section 태그가 확인된다.

1번, 2번, 3번 텍스트는 어디로 간 것일까?

 

나는 위에서 $_GET 을 사용하여 조건문을 만들었다.

URL 파라미터 mn01값이 1_1이면 1번이 보이고, 1_2면 2번, 1_3이면 3번이 보이도록 한 것이다.

따라서 http://도메인/sub.php?mn01=1_1 로 접속해야 1번이 정상적으로 보인다.

나는 mn01=1_1 이 포함되는 파일을 만들지 않았다.

하지만 파라미터를 이용하여 마치 고유한 페이지가 존재하는 것처럼 작동하는 것이다.

 

(좌) http://도메인/sub.php?mn01=1_1, (우) http://도메인/sub.php?mn01=1_3

 

그 결과 sub.php 파일 한 개, mn01 파라미터 한 개, 1_1, 1_2, 1_3 파라미터 값 세 개로 다른 페이지를 3개 보여주고 있다.

예시로 든 1번, 2번, 3번 텍스트 대신에 더 방대한 코드를 작성한다면 아예 독립적인 페이지로 느껴지도록 할 수 있다.

 

 

하나만 더 살펴보자.

<section>
  <?php if ($_GET['mn01'] == '1_1') { ?>
    <div>1번</div>
  <?php } ?>

  <?php if ($_GET['mn01'] == '1_2') { ?>
    <div>2번</div>
  <?php } ?>

  <?php if ($_GET['mn01'] == '1_3') { ?>
    <div>3번</div>
  <?php } ?>

  <?php if ($_GET['mn02'] == 'a') { ?>
    <div>a번</div>
  <?php } ?>

  <?php if ($_GET['mn02'] == 'b') { ?>
    <div>b번</div>
  <?php } ?>

  <?php if ($_GET['mn02'] == 'c') { ?>
    <div>c번</div>
  <?php } ?>
</section>

이번엔 mn01, mn02 두 개의 파라미터와 각각 파라미터 값 3개씩 총 6개의 파라미터 값이 있다.

그런데 mn01 파라미터에만 공통적으로 코드를 적용하고, mn02 파라미터에만 공통적으로 코드를 적용하고 싶은 경우엔 어떻게 해야 할까?

즉 파라미터명을 구하고 싶은 것이다.

여러 가지 방법이 있겠지만 나는 두 가지를 사용한다.

 

<script>
  console.log("<?= substr($_SERVER['QUERY_STRING'], 0, 4); ?>");
  // mn01 or mn02
</script>

<?= $_SERVER['QUERY_STRING']; ?>는 쿼리 스트링을 가져 온다. 쉽게 말해 파일명 뒷부분을 가져 온다.

http://도메인/sub.php?mn02=1_1 이라면 mn02=1_1에 해당한다.

그리고 substr() 함수로 정해진 문자를 특정 위치에서부터 자른다.

위 코드는 mn02=1_1을 0번째 위치에서부터 4글자 만큼 자르기 때문에 결국 mn02을 얻을 수 있다.

 

또 다른 방식은 URL을 보면 = 을 기준으로 좌측은 파라미터명, 우측은 파라미터 값이기 때문에 =을 기준으로 문자열을 나누는 것이다.

 

// URL이 http://도메인/sub.php?mn02=1_1 이라면
<?php $array = explode("=", $_SERVER['QUERY_STRING']); ?>
<script>console.log("<?= $array[0]; ?>");</script>
// mn02
<script>console.log("<?= $array[1]; ?>");</script>
// 1_1

이 방식처럼 explode() 함수를 사용하여 =을 기준으로 문자열을 나누게 되면 $array[0]은 파라미터명, $array[1]은 파라미터값이 나온다.

 

 

 

파라미터를 잘 사용하면 30개가 넘는 페이지도 하나의 파일로 만들 수 있다.

이 방법을 사용하는 가장 큰 이유는 유지보수를 쉽게 하기 위함이다.

컨텐츠를 수정할 경우 해당 파일을 찾으러 헤멜 일도 없고, 한군데를 수정하기 위해 비슷한 파일 여러 개를 함께 수정해야 하는 일도 적어 진다.

다만, 파일 하나에 내용을 모두 넣어 버리게 되면 코드가 복잡해지는 문제가 생긴다.

코드의 가독성도 아주 중요한 요소이기 때문에 이 경우엔 파일을 몇 개 더 분산하여 만들거나 한 페이지에 복잡한 내용들로 가득하다면 이 방법은 사용하지 않는 것이 차라리 낫다.

 

 

관련 포스팅

 

[PHP] URL 가져오기, 문자열 자르기, 자릿수 맞추기

관련 포스팅 [PHP] 파일 하나로 여러 개의 페이지 사용하기 (그누보드 관련 포스팅을 할 계획이었는데, 막상 그누보드는 하나도 사용하지 않아서 php로 수정했다.) 일반적으로 웹사이트에서 한 페

lpla.tistory.com

 

 

반응형