귀하의 예는 잘 작동합니다 (I 파일이 현재 작업 디렉토리에있는 경우 EDIT 2에 따라 이전 파일을 다시 읽지 않습니다.이 파일을 cwd로 줄임).
죄송 편집, 내가 무엇을 생각했다.
file_exists()
에 파일의 전체 경로가 제공되어야하므로 예제가 제대로 작동하지 않습니다. 따라서 디렉토리에서 파일을 가져 오려는 디렉토리 앞에 파일을 추가하십시오. 그럼에도 불구하고 sanatizing과 whitelisting에 대한 나의 경고 등은 여전히 중요합니다.
최종 편집
편집 2
와우, 미안 해요, 내가 엉망있어 일류. file_exists()
은 상대 경로로 잘 작동합니다. Looking at the documentation 그러나 안전 모드 제한에 대해 경고합니다. 어쩌면 이것들이 당신의 상황에 적용될 지 모르겠습니다.
당신은 getcwd()
와 CWD가 무엇인지 테스트 할 수 있습니다 2
END 편집. 정상적인 상황에서 cwd는 응용 프로그램의 진입 점과 같습니다. 따라서 예를 들어 /usr/www/your_site_root/index.php
이 엔트리 포인트 인 경우 /usr/www/your_site_root/
이 cwd입니다.
예를 들어 포함시키려는 파일은이 디렉토리에 있어야합니다.
조언의 말 :
당신은 이미 알고 있을지도 모르지만 당신의 예는 안전하지 않습니다. 어떤 식 으로든 사용자의 입력을 위생하지 않습니다 (이 경우 $_GET[ 'file' ]
). 이 방법은 방문자가 원하지 않는 결과를 가진 모든 종류의 PHP 파일을 포함 할 수 있습니다.
그래서 가져올 수있는 파일의 화이트리스트를 유지하도록 조언했습니다.같은 뭔가 :
<?php
$whiteList = array(
'dude',
'chick',
'mom'
);
// and just to be safe, you should probably strip stuff like ../ etc. here too.
$requestedFileBaseName = $_GET[ 'file' ];
if(!in_array($requestedFileBaseName, $whileList))
{
include('404.php');
}
else
{
include($requestedFileBaseName . '.php');
}
은 "$의 file.php을"가정이의 include_path에서 사용할 수 또는 실행중인 스크립트와 같은 디렉토리에 존재하는 코드가 작동합니다. – Kevin