2012-07-06 3 views
-2

동적 인 PHP 인클루드는 어떻게 만들 수 있습니까? 예를 들어, 내가 그 안에 포함 header.php와 footer.php과 index.php 파일이 그래서 배열과 케이스를 사용하는 것은 동적 필요가 가능한 경우안전한 동적 PHP가 포함되어 있습니까?

index.php?page=about 

를 사용 inbetween 다른 페이지를 잡아 시간이 많이 걸리고 수정이 필요합니다.

또한 어떤 페이지가 포함되어 있는지에 따라 웹 사이트의 제목도 변경할 수 있기를 원합니다.

나는 현재이 자리에 있습니다

<?php 
require_once 'includes/config.php'; 
//Set values for page 
$page_title = 'home page'; 
$current_page = 'home'; 

require_once 'includes/header.php'; 
?> 


CONTENT 


<?php 
require_once 'includes/footer.php'; 
?> 

감사

이 내 페이지를 포함 할 수있는 안전한 방법이 될 것인가?

if(isset($_GET[ 'page' ])) 
{ 
    if(strpos($_GET[ 'page' ], "/")) 
    { 
     $dir = substr(str_replace(’’, ”, $_GET[ 'page' ]), 0, strpos($_GET[ 'page' ], "/")) . "/"; 

     $file = substr(strrchr($_GET['page' ], "/"), 1); 
     if(file_exists($dir.$file.".php")) 
     { 
     include($dir.$file.".php"); 
     } else { 
     include("home.php"); 
     } 
    } else { 
     if(file_exists(basename($_GET[ 'page' ]).".php")) 
     { 
     include(basename($_GET[ 'page' ]).".php"); 
     } else { 
     include("404.php"); 
     } 
    } 
} else { 
    include("home.php"); 
} 
+0

http://stackoverflow.com/questions/11354484/how-to-include-page-with-get-function-htaccess-linking/11354526#11354526 – Austin

+0

romo의 답변을 언급하는 경우이 내 질문에 대답. 그것은 제 질문의 두 번째 부분과 관련이 있습니다. 그러나 나는 파일 이름을 제외하고 그 방법을 사용하여 제목이 말할 내용에 대해 아무런 통제권이 없다. – Sygon

+0

예, 스위치 내에서 $ page_title 변수를 설정하기 만하면됩니다. 나는 위의 링크에 게시 된 답변을 언급하고 있습니다. – Austin

답변

4

이 추가.

마침표를 확인하여 $ _GET [ 'page']을 (를) 확인하십시오. 마침표는 파일 이름에서 유효 할 수 있지만 값에서 파일 이름을 구성하는 것처럼 보입니다. 마침표는 루트 디렉토리에 대한 액세스를 얻으려는 시도를 나타낼 수 있습니다.

거기에서 나는 include를위한 filepath를 만들고 나서 file_exists를 사용하여 그것을 포함하기 전에 존재하는지 확인했다. 페이지의 변화 제목으로

내가 같은 것을 할 것 같습니다

<?php 
$page_title = 'Default Title'; 
$page_to_include = 'default'; 

if(strpos($_GET['page'], '.') !== false){ 
    //throw/display error - could be a breakout attempt 
} 
if(!file_exists(sprintf('page_includes/%s.php', $_GET['page']))){ 
    //requested page does not exists, throw or display error 
}else{ 
    $page_to_include = sprintf('page_includes/%s.php', $_GET['page']); 
} 

//do page validation here with file_exists 
ob_start(); 
include $page_to_include; 
$included_page = ob_get_clean(); //gets contents and cleans the buffer and closes it 

require_once 'includes/header.php'; 
echo $included_page; 
require_once 'includes/footer.php'; 
?> 

페이지가 처음으로 포함하고 출력하는 대신 버퍼에 저장되어있는이 방법. 그것은 당신이 포함 된 페이지가 $ page_title을 수정할 수있게하고, 수정 된 $ page_title은 header.php 스크립트가 태그 내에서 출력하도록 사용 가능합니다.

+0

의 보안 버전 당신이 감사는 페이지 제목을 변경 나를 수있게했다 동적 :). 파일을 index.php에 포함시키는 안전한 방법이 이렇게 되겠습니까? (원래의 질문 게시글에 코드를 추가했습니다.) – Sygon

+0

예, 확실히 작동 할 수 있습니다. 디렉토리 검사에서도 basename을 사용할 수 있지만, 거기에서 브레이크 아웃 시도를 확인하지는 않습니다. /). 또한 내가 올바르게 읽으면 중첩 된 디렉토리 (dir1/dir2/dir3/file이 dir1/file이됩니다)가 손실되는 것처럼 보입니다. – Chris

0

제목을 변경하면 되나요? 웹 디렉토리 또는 다음을 수행해야합니다 잘못된 페이지 이외의 오류 및 페이지에 승인되지 않은 파일 액세스 (보안)을 방지하기 위해 header.php

<title> 
<?php 
if(isset($_GET['page']) { 
    echo $_GET['page']; 
} else { 
    echo 'My Site'; 
} 
?> 
</title> 
+0

나는 가난하게 설명했다. 내가 의미하는 것은 about.php 파일에 index.php에 포함될 변수가 있다면 예를 들어 다음과 같습니다 : '$ page_title = '이 사이트 정보'; – Sygon

+0

[isset 함수] (http : //php.net/manual/en/function.isset.php),'echo isset ($ page_title)? $ page_title : '제목 없음'; ' – Stano

+0

헤더 앞에 페이지를 포함시킬 수 없기 때문에 별도의'title.php' 파일을 만들어야 할 것입니다. 그런 다음 'case/switch'문을 한 번만 만들어야합니다. 당신은 또한 자바 스크립트를 사용할 수 있습니다. – romo

관련 문제