2010-12-27 2 views
2

나는이 모든 내 로컬 서버에서 잘 작동 라인PHP가 파일 경로가 아닌 URL 경로를 기준으로 포함시키는 이유는 무엇입니까?

require("../config.inc.php"); 

이 connect.php에서 라인

require("../connect.php"); 

으로 PHP 파일을 /a/b/file.php 있습니다. connect.php를 사용하는 파일들이 많으며 모두 잘 작동합니다. 그러나 호스팅 사이트 /a/b/file.php에

오류 발생 : 나는 connect.php 다른 폴더에있는 경우에도, 그것은 친척 /을을 찾고 있다고 의심

Fatal error: require() [function.require]: Failed opening required 
'../config.inc.php' (include_path='.:/usr/local/php5/lib/php') in 
/******/connect.php on line 3 

를/비. 이것을 바꾸기위한 php.ini 설정이 있습니까?

require(dirname(__FILE__).DIRECTORY_SEPARATOR."..".DIRECTORY_SEPARATOR."connect.php"); 

당신이 유닉스 시스템에 응용 프로그램을 개발하고 Windows 시스템, 또는 viceversa에 그것을 배포 할 때 같은 문제가 발생하지 않도록 할이 방법 :

+2

?을 위해 쓸 수 전자 경로는? –

+0

config.inc.php는 내 루트 htdocs 폴더에 있습니다. include_path = '. :/usr/local/php5/lib/php. – bcoughlan

+1

게으른 해결책은 루트 htdocs 폴더를 포함 경로에 추가하는 것입니다. – mario

답변

2

는 왜 같은 것을 사용하지 말아.

+1

우수합니다. 감사합니다. 그래도 ".."앞에 다른 DIRECTORY_SOPARATOR가 필요합니다. – bcoughlan

+0

@waitinforatrain 감사합니다. 이미 편집했습니다. – guiman

1

php.ini 설정이 있는지 알 수 없지만 일반적으로 포함 된 파일에는 $_SERVER['DOCUMENT_ROOT']을 사용합니다.

require $_SERVER['DOCUMENT_ROOT']."/path/relative/to/document_root/file.php";

은 같은 디렉토리에 남아있을 것입니다 포함 할 파일이 상대 경로가 더 나은 경우도 있지만, 대부분의 시간.

1

보통 나는 개인적으로 define() 상수, libs 등을 포함하여 global.php (프로젝트의 root 디렉토리에 있음) 파일을 만듭니다. 이후

<?php 
// ... 
define('APP_INCLUDE_DIR', dirname(__FILE__) .'/'); 
// ... 
?> 

나는 require('global.php')으로 (예를 들어 index.php에 같은 디렉토리에있는 다른 모든 파일에서 해당 파일을 포함합니다. 이제 모든 것이 당신이 포함됩니다 모든 파일에 상수 APP_INCLUDE_DIR를 사용할 수있는 디렉토리 수준에서 실행됩니다 .

<?php 
require('global.php'); 

// ... 
require_once(APP_INCLUDE_DIR .'a/b/c/connect.php'); 
?> 

그리고 a/b/c/connect.php에 당신은 당신의 지역을 포함하여을 무엇 config.php에 위치한 예를

<?php 
// ... 
require_once(APP_INCLUDE_DIR .'a/b/config.inc.php'); 
?> 
관련 문제