2011-03-16 12 views
1

GET을 사용하여 URL의 쿼리 부분에 따라 표시된 페이지를 변경하는 PHP 스크립트 (index.php)가 있습니다. 페이지의 모든 링크는 ?page=pageName을 사용하여 다른 "페이지"에 액세스하며 index.php 스크립트는 그에 따라 텍스트 파일에서 HTML을로드합니다 (화면에 표시).다른 PHP 파일에서 PHP 파일의 내용을로드하고 (스크립트를 실행하는 방법)

따라서 사용자가 index.php?page=about으로 이동하면 내 PHP 스크립트가 about.php이라는 파일을로드하고 브라우저의보기 컨테이너에 표시합니다.

그러나 큰 문제가 있습니다. :로드중인 콘텐츠에 PHP 스크립트가 있지만 index.php 스크립트를 사용하여 에코를 실행하면 스크립트가 실행되지 않습니다. 따라서 MySQL 데이터베이스에서 가져온 디렉토리 목록이 들어있는 페이지를로드 할 수 없습니다.

그래서 기본적으로 페이지에 PHP 파일을 반향시킬 수있는 방법이 있는지 알고 싶지만 파일 내부에 PHP 코드도 실행해야합니다.

편집 : 여기 링크의 : 문을 포함 할 경우

enter image description here

답변

2

사용 ('about.php을

는 명확하게하기 위해, 내가 무엇을 의미하는지 설명하는 주석 스크린 샷을 첨부 ')를 index.php에 넣고 echo 문을 about.php 안에 넣으십시오. 그래도 작동하지 않으면 코드 예제를 게시하십시오.

if($_REQUEST['someQuery'] == 'about') 
{ 
    include('about.php'); 
} 
+0

이 주셔서 정말 감사합니다. 그것은 완벽하게 작동합니다! @symcbean이 지적했듯이, 제 질문은 때로는 분명하지 않지만, 여러분은 그것을 알아 냈습니다. :) 명성! – Titus

+1

누군가가 index.php에 액세스하려고 할 때 어떤 일이 발생하는지 알고 있습니까? page = ../../../../../etc/passwd 또는 그와 비슷한 – symcbean

+0

나는이 솔루션을 학습 운동 또는 개인 웹 사이트. 이 방법을 사용하여 SQL 주입 공격을위한 많은 공간이 있습니다! – Ryre

1

include()을 사용하면 다른 PHP 스크립트의 내용이 포함되어 실행됩니다. 그 다른 PHP 스크립트가 출력을 생성하는 함수를 포함하고 있다면 별도로 호출해야합니다.

+0

충분한 포인트가 있다면 도움이됨을 표시합니다. 그러나 더 나은 아이디어를 준 코드 예제를 게시했기 때문에 @Toast의 답변을 수락했습니다. – Titus

0

결석으로 문장을 시작하지 마십시오.

그 대부분의 웹 페이지로 발생하지 않는 URL에 따라 표시되는 페이지를 변경?

액세스 다른 "페이지"페이지 = 된 pageName

를 사용하여 오? - 당신이 URL의 쿼리 부분을 의미하는 - 전면 컨트롤러 패턴 - yeuch!

PHP 파일을 페이지에 표시 할 수 있지만 파일 내에 PHP 코드도 실행할 수 있습니다.

PHP 소스 코드 을 코드 출력으로 보시겠습니까? 아니면 단지 코드의 출력? 프런트 컨트롤러에서

:

<?php 
    if (realpath($_REQUEST['page'])!=$_REQUEST['page']) { 
     header("HTTP/1.1 500 Internal Server Error"); 
     die ("Naughty!"); 
    } 
    $script=SOME_PATH . $_REQUEST['page'] . ".php"; 

    if (!file_exists($script) || !is_readable($script)) { 
     header("HTTP/1.0 404 Not Found"); 
     die ("File not found"); 
    } 
    print "src = <br />"; 
    highlight_file($script); 
    print "<hr />Output:<br />"; 
    include($script); 
+0

그래, 나는이 게시물을 서둘러 (이벤트를 위해 집에서 나와야 만했다.) 품질 검사를하지 않았다. 내가 돌아올 때쯤에 대답을 얻기를 바랬다. 그리고 나는 확실히했다! :) 건설적인 비판에 감사드립니다. 정말 감사. – Titus

관련 문제