2012-05-13 5 views
5

PHP 웹 기반 응용 프로그램의 구조에 대해 " 모범 사례"를 구성하는 것에 혼란 스럽습니다. 이 사이트를 읽으면서 많은 제안이 있습니다. 자주 언급되는 구조 중 하나는 "문서 루트 내에 PHP 파일이 없습니다"입니다. 이것은 좋은 습관 인 것처럼 들리지만, 어떻게 작동하는지 볼 수는 없습니다. 웹 서버는 문서 루트 외부에서 어떤 것도 인식하지 못합니다. 나는 그 문서 루트는, 아래 그림과 같이 같은 공공 액세스 디렉토리 여기 가정 : 위의 예에서 "응용 프로그램은"문서 루트입니다DOCUMENT_ROOT 외부의 PHP 클래스 파일에 액세스

app- 
    | 
    - htdocs - document root 
    | | 
    | - index.php 
    | - css/ 
    | - images/ 
    | 
    - PHP classes in here/ 
    - Other PHP classes in here.../ 

하거나, 그리고 htdocs에 dir은 공개적입니다 사이트 구조의 접근 가능한 영역?

그 다음에는 htdocs 이외의 dirs에있는 파일에 대해 공용 액세스를 사용할 수 없도록하려면 어떻게해야합니까?

답변

7

개념은 간단합니다. 특히 프론트 컨트롤러 기반 프레임 워크를 자체 프레임 워크 또는 기존 프레임 워크 (Zend Framework와 같은)로 사용하는 경우에는 개념이 간단합니다. 모든 요청이 중앙 컨트롤러를 통해 들어 오면 요청을 처리하는 데 필요한 파일이 필요에 따라 포함됩니다. 포함 된 파일이 작동하려면 웹 루트에있을 필요는 없습니다. 컨트롤러가 포함되어 실행될 수 있어야합니다. 따라서 컨트롤러 만 웹 루트에 있어야합니다. 다른 모든 것은 그것 밖에있을 수 있습니다.

참고로 비회원 응용 프로그램에서도 작동합니다. 각 페이지에 필요한 파일을 포함하면됩니다.

웹 루트에 있어야하는 것은 브라우저에서 요청한 이미지, 스티셀 시트, 자바 스크립트 파일 등과 같은 것들입니다.

+0

신속한 답변을 보내 주셔서 감사합니다. 내 OOP 앱에 ** include ** 문을 사용하지 않습니다. ** require_once **를 사용합니다. 필요한 경우 각 클래스에는 require_once 문이 있습니다. 이 기능이 필요한 수업에 액세스 할 때 설명하는대로 컨트롤러의 기능에 영향을 줍니까? –

+0

Nope. 그들은 근본적으로 같은 일을합니다. –

+0

고맙습니다. 나는 당신의 해결책을 시험해보고, 그 결과로 돌아 간다. –

5

사실 웹 서버는 HTTP 요청을 통해 USER에 의해 요청 된 파일에만 적용되는 문서 루트 외부의 내용을 인식하지 못합니다.

PHP는 웹 서버 내에서 실행되며 문서 루트 및 URL 개념이 없습니다. 웹 서버의 호스트 운영 체제의 기본 파일 시스템과 특정 표준을 따르는 데이터의 출입 만 볼 수 있습니다. 웹 서버가 chroot jail 내에서 실행되는 경우에만 PHP가 웹 기반 제한에 묶일 수 있습니다.

이와 같이 PHP 파일 ANYWHERE을 파일 시스템에 넣을 수 있으며, 사용 권한이 정확하다고 가정하면 PHP가 파일을 실행하여 실행할 수 있습니다. 이 파일이 문서 루트 외부의 500 레벨의 디렉토리에 묻혀 있는지 여부는 중요하지 않습니다. 도달 할 수 있으면 PHP가 실행할 수 있습니다.

+0

아 예 - 이것은 위에 게시 된 답변의 개념과 유사합니다. 사용자 기반 요청이 문서 루트로 해석되는 한 모든 것이 잘되어야합니다. 추가 정보를 가져 주셔서 감사합니다. 나는 아직이 기회를 갖지 못했지만, 귀하의 의견 (및 위의 의견)을 바탕으로 한 해결책이 어떻게 나오는지 알려 드리겠습니다. –

+0

감사합니다. 위에 나열된대로 솔루션이 잘 작동합니다. –

관련 문제