2010-06-08 5 views
2

저는 $ _SERVER [ "DOCUMENT_ROOT"] 환경 변수를 사용하여 내 응용 프로그램의 공개 루트를 참조했습니다. 이제는 그다지 신뢰할 수 없다는 것을 깨닫고 있습니다. 나는 magic constant에 기반한 index.php에서 상수를 정의하는 접근법을 생각하고있다. 뭔가 그런 :PHP의 공개 루트 참조 - 모범 사례

define("PUBILC", __DIR__."/"); 

나는 그것에 대해 잘 모르겠다.

어떤 접근 방식을 권하고 싶습니까?

답변

2

모든 요청이 index.php를 통해 진행되는 경우 상수를 정의하면 좋고 자주 사용되는 아이디어가됩니다. 또한 (가상) 호스트 구성 또는 .htaccess로 환경 변수를 정의하는 설정을 보았습니다.하지만 투명성이 떨어지고 이식성이 떨어지는 것으로 생각합니다. 설정 변수의 하드 코딩 경로는 자주 사용되지만 '자동 변경'이 적 으면 희망적입니다. 결국 나는 당신의 아이디어에 동의합니다.

+0

고맙습니다. 내가 할 수있는 한 가지 더 질문한다. 공개 루트를 언급하는 상수에 대한 정확하고 짧은 이름은 무엇이라고 생각하십니까? "PUBLIC"에 대해 잘 모르겠습니다. –

+0

예, 모든 요청이 내 index.php를 통과합니다. –

+0

YOURAPPNAME_ROOT이 가장 적합하며 다른 패키지에 정의 된 다른 상수를 치는 것이 가장 적은 변경 사항이 적용됩니다. 프로젝트에 상대적으로 고유 한 이름이 있다고 가정합니다. – Wrikken

2

확실히 응용 프로그램 전체에 $_SERVER['DOCUMENT_ROOT']이 흩어져 있지 않습니다. Apache는 VirtualDocumentRoot을 사용하여 문서 루트를 해당 디렉토리로 설정하지만 이 아닐 경우은 깨진 사이트로 이어질 수있는 DOCUMENT_ROOT 환경 변수를 변경합니다.

귀하의 접근 방식에 맞춰 DOC_ROOT을 내 앱 상단에 정의하고 어디에서든지 문서 루트를 참조해야합니다.

0

비슷한 일을 할 수 있지만 모든 페이지에 포함되는 일부 일반적인 포함 파일에 넣으십시오. 이는 기본 색인 페이지를 거치지 않고 사이트의 페이지로 직접 방문하는 방문자에게 효과적입니다. 내가 만든 내 프로젝트를 하나의 운영 체제에서

<?php 
function GetDocumentRoot() 
{ 
    return dirname(dirname(__FILE__)); 
} 

function WriteHeader() 
{ 
    //... 
} 

// more utility functions... 
?> 
0

: 그것은 다음과 같이 보일 수있는 예를 들어

, 당신이 당신의 doc_root/inc 폴더에 utilities.php있어, 그리고이 사이트의 모든 페이지에 포함됩니다 경우, 다음 줄 (그리고 몇 가지 추가 사람)와 설정 :

: 다음이 포함

// set the root directory for the files 
define('ROOT_DIR', "/path/to/my/htdocs/project_name/"); 
// set the root path for URLs 
define('ROOT_PATH', "http://".$_SERVER['HTTP_HOST']."/project_name/"); 

모든 PHP 파일 내에서이 줄을 사용하여 config.php를

설정 파일의 접두사를 사용하여 알 수 있듯이 모든 파일을 루트 디렉토리에 넣을 수 있으며 다른 PC 나 서버에서 동일한 프로젝트를 수행 할 수있을만큼 유연합니다.