2011-09-25 5 views
0

많은 PHP 파일에서 필자가 필요로하는 하나의 PHP 파일이 있습니다.여러 위치에서 PHP로 파일을 요구하는 문제가 발생했습니다.

PHP 파일은 저장 DB 정보도 something.php라는 다른 파일이 필요는 .... 이제

, 나는 (DB 정보와 함께) PHP 파일을 저장 말은 config라는 폴더에 my_db_info.php을했다.

all_functions이라는 config 폴더 위에있는 두 개의 폴더에 다른 PHP 파일이 저장되어 있습니다. 이제는 db 정보를 가진 파일을 요구할 것입니다. require('folder1/config/my_db_info.php'); 이렇게하면 my_db_info.php가 필요하지만 my_db_info.php (something.php)에 필요한 파일은 포함되지 않으므로 치명적인 오류가 발생합니다.

all_functions 폴더의 PHP를 테스트 할 때 실제 db 파일 (my_db_info.php)에 필요한 파일 (something.php)을 찾을 수 없다는 치명적인 오류가 나타납니다. 나는 my_db_info.php 파일을 변경하고, 그것이 위 또는 아래로 간다 얼마나 많은 폴더를 감소 라인을 필요로 변경 한 후

, 예 :

require('../something.php'); 

작동하는 것 같다

require('../../something.php'); 

에. 하지만 폴더를 위/아래로 변경하여 주 파일 ( all_functions 폴더에있는 파일)을 변경해야합니다. 내가 그 파일에 something.php을 ... 필요로하는 것처럼 그래서 난이 all_functions 폴더에있는 파일에 대한 완전히 다른 위치에 다른 파일에 my_db_info.php (예를 들어 5 개 폴더 위로를 필요로 할 때, 의미

), 내가 제대로 작동하도록 다른 my_db_info.php를 만들어야 할 것입니다 ....

왜 이런 일이 일어나고 어떻게 해결할 수 있습니까?

감사

나에게
+0

내 대답 좀 봐 여기에 게시 : http://stackoverflow.com/questions/7544784/php-path-to-include-files/7544815#7544815 이것은 경로를 포함 처리보다 안정적인 방법입니다 모든 환경에서 사용할 수 있으며 코드를 훨씬 더 휴대 가능하게 만듭니다. – damianb

답변

1

, (당신이 그 (것)들을 포함하고 방법입니다) 당신이 할 수있는 가장 쉬운 일이의 직접 오히려 상대 경로를 제공하는보다 PHP 파일을 포함 것 같다.

사용해보십시오 $ _SERVER [ 'DOCUMENT_ROOT'] (당신에게 집/이름/htdocs에/같은 것을 줄 것이다)

내가 제대로 설정을 이해한다면, 당신은 디렉토리에 다음 두 디렉토리 (아마도에서이 루트) :

/ 
/all_functions 
/config 

대신 include($_SERVER['DOCUMENT_ROOT']."/config/my_db_info.php"); 여러 include("../my_db_info.php"); 변화를 포함하여 다른 디렉토리에있을 필요에 따라 반복의.

이렇게하면 config + all_functions 디렉토리가있는 여러 디렉토리에서 작동합니다.

편집 각 스크립트를 호출 한 후, 상수로 정의, 당신은 항상 수동으로 문서 루트를 쓸 수 $_SERVER['DOCUMENT_ROOT']를 사용할 수없는

경우 (응답은 논평하기).

예 :

define(rootpath, "/home/username/htdocs"); 
include(rootpath."/config/my_db_info.php"); 

그런 다음 같은 rootpath를 사용하여 정의 될 필요 단점은 당신이 모든 스크립트에이를 작성해야 거라고 경우 my_db_info.php (등)에 일정 - 손가락 $_SERVER['DOCUMENT_ROOT'] 당신을 위해 사용할 수 있음을 교차하지만.

+0

'$ _SERVER [ 'DOCUMENT_ROOT']'는 일부 환경에서는 사용할 수 없으며 의존 할 수 없습니다. – damianb

+0

위의 편집을 참조하십시오. 사용 가능하지 않은 경우 ... – MrJ

+0

IIRC, 적어도 IIS가 제공하지 않습니다 (자세한 내용은). 또한 변수에 사용하지 마십시오. 변경해서는 안됩니다. 어떤 악용 가능한 코드가있는 경우, 그 변수는 잘못된'allow_url_fopen' 설정을 남용하기 위해 변경 될 수 있으며, 기본적으로 공격자가 접근 할 수있는 일부 오프 사이트 (및 가능성이있는 타 국가) 서버에 원격 포함을 모두 포함하도록 변경할 수 있습니다. eval()보다 나쁜 것. 대신 상수를 사용하십시오. – damianb

관련 문제