2009-07-24 5 views
7

좋아요, 저는 url/admin에서 내 맞춤 블로그를위한 관리 인터페이스를 만들고 있습니다.PHP가 하위 디렉토리에 작업을 포함하도록 만들기

동일한 포함 (자동로드 포함)을 루트 디렉토리로 사용할 수 있습니까?

가능하면/admin에서 액세스 할 때 index.php의 /index.php로 이동하도록 탐색에서 링크를 자동으로 수정할 수 있기를 바랍니다.

감사합니다, 니코

답변

18

이를위한 가장 좋은 방법은 모든 것이 아래에있는 디렉토리를 포함하는 'ABSOLUTE_PATH'상수를 정의하는 것입니다. 그런 다음 디렉토리에서 디렉토리로 변경되지 않는 '전체'경로를 정의하기 때문에 모든 것을 복사하여 붙여 넣기 만하면됩니다. 예

define("ABS_PATH", $_SERVER['DOCUMENT_ROOT']); 

or 

define("ABS_PATH", dirname(__FILE__)); 
// This defines the path as the directory the file is in. 

그런 다음 어떤 시점에서 당신은 단순히 파일

include(ABS_PATH . "/path/to/file"); 
+0

아,하지만이 경로가 무엇인지 알아 보려면 어떻게해야합니까? –

+1

아마도 서버 변수에 PHP Info를 보거나 직접 정의하고 싶을 것입니다. 직접 정의한 경우 모든 파일이 들어있는 디렉토리인지 확인하십시오. –

3

에게 절대하는 Pathes/URL을 사용하는 것이 가장 쉬운 방법을 포함하는이 작업을 수행 할 수 있습니다. URL에 대한

, 같은 응용 프로그램의 루트를 가리키는 곳 상수/변수, 정의

define('ROOT_URL', 'http://www.example.com'); 

또는

$root_url = 'http://www.example.com'; 

을 그리고처럼, 모든 링크에서 사용 :

<a href="{$root_url}/my-page.php">blah</a> 

이렇게하면 항상 OK입니다 (프로젝트를 다른 서버 나 서브 디렉터에 설치 한 날). y, 하나의 상수/변수 만 수정하면됩니다.)

includes/requires의 경우 항상 절대 pathes도 사용하십시오. 하나 개의 솔루션은 다음과 같이, dirname을 사용하는 것입니다 :이 라인을 작성하는 경우

include dirname(__FILE__) . '/my_file.php'; 
include dirname(__FILE__) . '/../my-other-file.php'; 

__FILE__는, 현재의 파일입니다; dirname은 해당 파일이 들어있는 디렉토리의 경로 (전체 경로)를 가져옵니다.

이렇게하면 파일의 상대 경로에 대해 걱정할 필요가 없습니다.

+0

절대 경로 +1 +1 –

+0

abs 경로는 속도가 느려 집니까? 링크를 직선으로 유지하는 것이 아니라 프로그램 흐름을 방해한다고 가정 해보십시오. – Smandoli

0

또 다른 대답은 처음 두 제안을 결합하는 것과 유사합니다. 다음은이를 위해 다음과 같은 문장을 사용할 수 있습니다 config.php 요구 사항이 사이트의 많은 파일에 포함되는 것으로 가정, 그리고

define('ABSPATH', dirname(__FILE__).'/'); 

: 당신은 상수를 정의 할 수이 도움이

include(ABSPATH.'config.php'); 

희망을.

0

과거 functional.php에 사용한 또 다른 옵션은 클래스 자동 로더입니다.

//Class Autoloader 
spl_autoload_register(function ($className) { 

    $className = strtolower($className); 
    $path = "includes/{$className}.php"; 

    if (file_exists($path)) { 

     require_once($path); 

    } else { 

     die("The file {$className}.php could not be found."); 

    } 
}); 

이것은 특정 상황에서 작동하며 절대 $ root URL을 정의하고 싶지 않은 과거에는 유용했습니다.

관련 문제