PHP 파일 기반 엔진
URL에 따라 다양한 콘텐츠가 연결되는 템플릿 파일을 만들 수 있는 사이트 엔진을 구현하겠습니다.
우리 페이지의 구조가 다음과 같다고 가정해 보겠습니다:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
content
</main>
<header>
footer
</header>
</body>
</html>
콘텐츠가 삽입되어야 하는 위치에 우리가 만든 어떤 삽입 명령어를,
예를 들어 {{ content }}와 같이 삽입해 보겠습니다.
사이트 템플릿을 다음과 같이 변경합니다:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
{{ content }}
</main>
<header>
footer
</header>
</body>
</html>
이제 콘텐츠 파일을 배치할 view 폴더를 만듭니다.
이 폴더 내부나 하위 폴더에 바로 배치합니다.
첫 번째 파일은 다음과 같습니다:
<div>
content 1
</div>
두 번째 파일은 다음과 같습니다:
<div>
content 2
</div>
세 번째 파일은 다음과 같습니다:
<div>
content 3
</div>
이제 주소 표시줄의 URL에 따라 해당 파일이 불러와지도록 해보겠습니다.
우리의 경우 URL /page1에서는 첫 번째 파일,
URL /dir/page2에서는 두 번째 파일,
그리고 URL /dir/sub/page3에서는 세 번째 파일이 불러와집니다.
구현을 시작해 보겠습니다. 먼저 .htaccess 파일에서
리소스 파일을 제외한 모든 요청된 주소가
index.php 페이지로 리디렉션되도록 합니다:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !\.(js|css|ico|jpg|png|gif)$
RewriteRule .+ index.php
index.php 페이지에서 변수에 요청된 URL을 가져옵니다:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
그런 다음 템플릿 파일의 텍스트를 가져옵니다:
<?php
$layout = file_get_contents('layout.php');
?>
이제 URL을 기반으로 view 폴더에서
해당 콘텐츠 파일을 가져옵니다:
<?php
$content = file_get_contents('view' . $url . '.php');
?>
템플릿 텍스트에서 우리가 만든 명령어를 파일에서 가져온 콘텐츠로 바꿉니다:
<?php
$layout = str_replace('{{ content }}', $content, $layout);
?>
템플릿이 삽입된 템플릿 파일을 브라우저에 출력합니다:
<?php
echo $layout;
?>
모든 것을 합쳐서 다음과 같은 코드를 얻습니다:
<?php
$url = $_SERVER['REQUEST_URI'];
$layout = file_get_contents('layout.php');
$content = file_get_contents('view' . $url . '.php');
$layout = str_replace('{{ content }}', $content, $layout);
echo $layout;
?>
설명된 파일 기반 엔진을 구현하세요.