2009-12-01 2 views
2

자, 여기 php include() 지시어에 대해 많은 불만을 겪었습니다. 이것이 나를 위해 슬픔의 원인이 된 것 같습니다.IIS로 이동 한 후 상대적인 작업이 더 이상 포함되지 않습니까?

public_html\index.php 
public_html\includes\content.inc.php 
public_html\language\en\language.inc.php 
public_html\classes\db.inc.php 

사이트의 실행은 문제없이 아파치에 팽창 :

내 사이트의 구조는 다음과 같은 것입니다. 그러나 IIS에서는 작동하지 않습니다 (grr ... # @ !!! %).

설명해 드리죠 : 를 의 index.php하는 것은 항상 웹 브라우저에 의해 호출하고 요청에 따라, 그것은 content.inc.php이 포함되어 있다는 것입니다 이루어집니다 무엇 (이 콘텐츠 파일과 인덱스의 많은이 있습니다 .PHP는 논리에 따라 적절한 일)

// -- index.php -- 
include(includes/content.inc.php); 

는 지금까지 아파치와 IIS 모두에서 잘 작동이 포함되어 있습니다. 차례로

이제 content.inc.phplang.inc.phpdb.inc.php이 포함되어 있습니다. 이 라인은 아파치에 잘 작동

// -- content.inc.php -- 
include(language/en/language.inc.php) 
include(classes/db.inc.php) 

하지만 IIS는 포함 할 파일 파일 캔트 불평 : 같은

는 것 같습니다.

왜? 아파치가 현재 폴더를 유지하기 때문에 "." 스크립트 실행이 처음 시작된 public_html\입니다. 반면에 IIS는 "."의 의미를 변경합니다. 현재 처리중인 파일이됩니다. 즉, content.inc.php를 포함시킨 후 IIS는 "." 있는 그대로 public_html\includes\

이제 모든 방법이 절대 경로가되도록 변경하는 것이 좋습니다. 하지만 내 질문은,이 아파치/IIS 문제는 내가 이해할 수 있는가? 코드에서 제대로 작동하지 않는 IIS 또는 PHP 설정이 있습니까?

BTW php.ini 파일은

include_path=".;C:\PHP\PEAR" 

답변

2

당신의 파일이 완전히으로 public_html 트리 외부해야한다 등이있다.

의 include_path =

 
// Your setup should resemble: 

/public_html/index.php 
/includes/ 
/include/languages 
/include/classes 

// If on your phsical drives, they equate to; 

c:/wwwroot/public_html/index.php 
c:/wwwroot/includes/ 
c:/wwwroot/includes/languages 
c:/wwwroot/includes/classes 

그런 다음 php.ini 파일의 설정을 변경해야합니다 : 내가

을 ";.; C \ PHP \ PEAR C \ wwwroot에 \ 포함" wwwroot와 같은 것을 추측하는 것은 HTML을 넣은 디렉토리입니다. 필요에 따라 변경하십시오.

IIS 서비스를 다시 시작하여 새 ini 설정을 선택하십시오.

 
echo ini_get('include_path') ; 

...

이제 PHP는 항상 포함 파일에 대해 wwwroot/includes를 검색하므로/language와 같은 것을 포함 할 수 있습니다.

 
include 'language/eng/language.inc.php' ; 

원하는 것은 무엇입니까?

+0

감사합니다. 나는 이것이 해결책이라고 생각하고 있었다. 그러나 나는 include 파일이 public_html 밖에 있어야하는 이유를 알지 못한다. 나는 보안을 위해 누군가가 웹을 통해 그들을 호출하지 못하도록하는 것이라고 생각한다. – Ali

+0

귀하의 웹 사이트 주소를 알고 있다면 yoursite.com/classes/db.inc.php를 입력하여 public_html \ classes \ db.inc.php에 액세스 할 수 있습니다. . – Cups

0

일반적으로 include '/includes/language.inc.php'과 같이 서버 루트에서 포함하는 것이 좋습니다. 이렇게하면 사이트 구조 내의 모든 폴더에서 작동합니다. 이 방법으로 모든 CSS와 JavaScript를 링크 할 수 있습니다. 다른 폴더 구조의 파일을 호출 할 때 include 파일에 항목을 넣기가 더 쉽습니다.

+0

하지만 모든 PHP/javascript/CSS 폴더가 도메인의 루트에 배치 된 경우에만 작동합니다. 전체 PHP 응용 프로그램이 루트의 하위 폴더에 있다면 문제를 망칠 것입니다. – Ali

+0

그런 다음 .../phpapp/includes/whatever ... –

관련 문제