2012-06-07 3 views
10

절대 경로를 얻기 위해 $_SERVER["DOCUMENT_ROOT"]에 많이 의존합니다. 그러나 URL이 루트를 가리 키지 않는 사이트에서는이 기능이 작동하지 않습니다.PHP는 서버의 웹 사이트 루트 절대 URL을 가져 옵니까?

  • 사이트 개발
  • 모든 직접 루트 내부

사이트 2 :

나는 같은 폴더에 저장된 사이트가 있습니다. 현재 사이트 루트가있는 서버에서 경로를 가져 오는 방법이 있습니까?

그것은 반환해야합니다 :

/var/chroot/home/content/02/6945202/html/site1 // If the site is stored in folder 'site1' 
    /var/chroot/home/content/02/6945202/html // If the site is stored in the root 
+0

도메인의 루트에서 문서의 루트를 가져 오시겠습니까? Coz, 당신이하는 일은 실제로 옳습니다! –

+0

각 사이트가 호스팅되는 서버의 절대 경로를 가져 오려고합니다. – lisovaccaro

+0

좋아요,'$ _SERVER [ "DOCUMENT_ROOT"]'실제로 그것을합니다, 그러나 당신은 무엇을 얻고 있습니까? 당신이 원하는 것을 주셨습니다. Apache만이 Virtual Host와 그 주소를 알고 있기 때문에 Apache의 도움이 필요합니다. 알 겠어? –

답변

11

당신은 단순히 $_SERVER['DOCUMENT_ROOT']dirname($_SERVER['SCRIPT_NAME'])을 추가 할 수 있습니다.

업데이트

웹 사이트는 해당 폴더에, 그래서 SCRIPT_NAME 분명히 / 될 것 "마운트"디렉토리가 될 것으로 보인다.

따라서이 작업을 수행하려면 파일 시스템에서 스크립트의 위치를 ​​찾으려면 __DIR__ 또는 dirname(__FILE__)을 사용해야합니다.

업데이트 그 중 하나가 작동하지 않도록 전체 사이트에 대한 단일 index.php 컨트롤러가 없습니다 2

.

다음 표현식은 "빼기"라는 문자열을 사용하여 공통 경로를 찾습니다. 알려진 접두사 (문서 루트), 알 수없는 (루트 폴더) 및 알려진 접미어 (스크립트 경로)가 있으므로 첫 번째 두 개를 찾으려면 전체 절대 경로 (__FILE__)를 가져와 알려진 접미어 인 :

을 뺍니다
substr(__FILE__, 0, -strlen($_SERVER['SCRIPT_NAME'])); 

포함 된 파일에이 값이 필요한 경우이를 종속 스크립트를 포함하기 전에 상수에 먼저 저장해야합니다. . 나를

substr(substr(__FILE__, strlen(realpath($_SERVER['DOCUMENT_ROOT']))), 0, - strlen(basename(__FILE__))); 
+0

나는 그것을 site2 index.php에서 실행하려고 시도하고 리턴한다 :'/'. 내 사이트의 루트 인'/ var/chroot/home/content/02/6945202/html/site1'을 가리킬 필요가 있습니다. – lisovaccaro

+0

귀하의 서버가 chroot로 보입니다. 이것은 PHP에 전달되는 변수에 영향을 줄 수 있습니다. 이 경로는 서버 계정의 루트 디렉토리입니까? – Sp4cecat

+0

당신은이 사이트가'http : // www.example.org/index.php'라고 언급되는 것을 잊어 버렸습니다. 이 경우'__DIR__' 또는'dirname (__ FILE __)'을 사용해야하며 포함 된 스크립트에서도 사용할 수 있도록 상수를 사용해야합니다. –

1

,이 또한 작동합니다.

당신은 상단에 상수를 정의 할 수 있습니다 귀하의 웹 사이트의 나머지 부분은 그 경로에 의존 할 수 있습니다.

define('MY_SERVER_PATH', getcwd()); 
+3

솔루션은 플랫폼에 종속적 인 것으로 입증 된'$ _SERVER [ 'DOCUMENT_ROOT']'를 기반으로합니다 : 어떤 경우에는 서버 루트에 대한 경로로 컴파일되고, 다른 경우에는 사이트 루트에 대한 경로로 컴파일됩니다 , 그래서 그것은 안전하지 않습니다. 최선의 방법은'$ _SERVER [ 'SCRIPT_NAME']'과'$ _SERVER [ 'SCRIPT_FILENAME']'에 의존하는 것이라고 생각합니다. –

1

그냥 현재 스크립트가있는 폴더의 현재 절대 서버 경로를 getcwd()를 사용하기위한 향후 Google 직원

0

는 서버 설정

str_replace($_SERVER['DOCUMENT_ROOT']."/",$_SERVER['PHPRC'],$_SERVER['REAL_DOCUMENT_ROOT']) 

또는 getcwd()를 사용에서 절대 루트 URL을 얻기 위해 다음과 같은 방법을 사용합니다. 응용 프로그램의 현재 작업 디렉토리를 가져옵니다.

+0

다소 오히려 PHP 7 (Fedora 25) 설치시'PHPRC' 나'REAL_DOCUMENT_ROOT'도 존재하지 않습니다. – carefulnow1

관련 문제