2010-08-06 5 views
1

저는 궁금해했습니다. 서버의 디렉토리/파일을 외부 세계로부터 보호 할 수 있습니까? 그렇지만 PHP에서 액세스 할 수있게 만드시겠습니까?서버의 디렉토리/파일을 외부 세계로부터 보호 할 수는 있지만 PHP에서 액세스 할 수있게 할 수 있습니까?

상당히 간단합니다. 특정 디렉토리에 PHP가 포함 된 서버의 웹 페이지를 캐싱하고 있지만 웹 사용자가이 파일이나이 디렉토리를 직접 보는 것을 원하지는 않습니다. 반면에 PHP는 (사용자에게 서비스를 제공하기 위해) 이러한 파일에 액세스 할 수 있어야합니다. 논리적이지는 않지만 사용자가 특정 페이지를 제한하고 웹 서버에 정통한 형식으로 캐시 할 수 있습니다.

바람직하게는 .htaccess 또는 chmod를 사용합니다.

감사합니다.

답변

6

물론 - 사실, .htaccess를 사용할 필요가 없습니다. 단순히 보호 된 디렉토리를 문서 루트 위에 두십시오 (즉, PHP 스크립트가 저장되어있는 폴더 (일반적으로 "htdocs", "httpdocs"또는 때때로 "www") 옆에 저장하십시오)

웹 파일 /my/folders/httpdocs/에있을 것입니다, 당신의 "보호"파일은 여기에서 아이디어는 PHP가 서버에있는 모든 폴더에 액세스 할 수 있지만, 아파치는 루트 디렉토리 "위의"사용자 탐색을 할 수 없다는 것입니다 /my/folders/protected_folder/

에있을 것입니다.

디렉토리에 액세스하려면 다음을 사용할 수 있습니다.

(덧붙여 말하자면, 페이지를 캐시하기 위해이 작업을 수행했음을 언급 했으므로 템플릿을 미리 컴파일하고 실제로 스마트 캐싱을 지원하는 PHP 템플릿 엔진 인 Smarty을 볼 수 있습니다. 실제로 Smarty "Best Practice"중 하나는 템플릿과 캐시 파일이 document_root 폴더 또는 그 아래에 있지 않도록 구조를 구성하는 것이므로 Apache에서 들어오는 사용자는 절대 액세스 할 수 없지만 Smarty PHP 코드는 쉽게 그곳에서 필요한 것을 잡으십시오.)

+0

우수! 고마워, 그것의 아주 똑똑한 해결책. –

+1

내 기쁨 ... 프로젝트에 행운이 있기를. – Eric

2

확실히, 파일을 웹 루트 외부의 디렉토리에 두십시오. 예를 들어 웹 루트가 /usr/local/apache/htdocs/ 인 경우 PHP에서 액세스해야하는 /usr/local/apache/private_cache/ 디렉토리를 만들 수 있지만 웹 요청을 통해 액세스 할 수있는 방법은 없습니다.

의 파일을 .htaccess이라는 파일을 보호하려는 디렉토리에 둘 수 있습니다. 그러면 아파치 (PHP는 아님)가 파일을 제공하지 못하게된다.

관련 문제