2009-07-20 4 views
0

MVC에 익숙하지 않아 코드를 다시 작성하고 있습니다.templating에 대한 require_once 문제

<?php require_once("header.php"); ?> 

모두 master.phpheader.php 아직 같은 폴더에 나는 다음과 같은 오류가 발생합니다 : :

Warning: require_once(1) [function.require-once]: failed to open stream: No such file or directory in /Users/MyName/Sites/MySite/Views/master.php on line 15

Fatal error: require_once() [function.require]: Failed opening required '1' (include_path='.:') in /Users/MyName/Sites/MySite/Views/master.php on line 15

이 전에 일어나지 않았다

나는이 master.php (인덱스)를 가지고있다. (파일은 모두 루트 폴더에 있음). 동일한 폴더에 있기 때문에 문제가 무엇인지 알 수는 없습니다. 다시 돌아가거나 '../' 또는 다른 폴더를 참조 할 필요가 없습니다. 내가 여기서 무엇을 놓치고 있니?

감사합니다.

+1

,이 도움이

(("header.php") or die()) = (TRUE or die()) (TRUE or die()) = TRUE (string) TRUE = '1'; 

희망 :

그래서 위의 코드

여기
require_once("1") 

으로 해석됩니다 그것은 단계별로 해석됩니다 방법 "header.php"를 요구하려고 시도하는 것처럼 보입니다. "1"을 요구하는 것처럼 보입니다. 실제로 보여줄 라인이 15 번 라인에 있습니까? 코드를 더 게시하면 도움이 될 것입니다. – Cfreak

+0

예, 15 행의 정확한 코드입니다 : asdfasdfasdfasdf

답변

5

을 당신이 당신의 코드가 말한다 :

<?php require_once("header.php") or die; ?> 

"밖으로 떠나 보시기 바랍니다 PHP는 다음 당신이해야 치명적이다 요구를 찾을 수 없습니다 또는 die "-> ist는 필요하지 않습니다. 파일을 찾을 수없는 경우 require_once가 치명적인 오류를 발생시키기 때문입니다.

편집 : 나는 그것을 테스트하고 "죽는다"는 것을 제외하면 효과가 있습니다.

편집 2 : 위의 코드는 다음과 같이 쓸 수있다 : 이런 일이 왜 설명

require_once (("header.php") or die()); 

require_once를 함수가 아니기 때문에,하지만 PHP에서 문, 괄호는 선택, PHP는 해석이다 문자열을 "header.php"가 부울 "true"로 평가되는 부울 표현식으로 위의 표현식을 사용합니다. True는 문자열에 캐스트 ("1"이됩니다)를 가져 오며,이 문자열은 require를 한 번 전달합니다. 그렇지 않은 오류에서)

+0

죽지 않고 페이지가로드되지만 머리글 및 바닥 글이 없습니다. – asdfasdfasdfasdf

+0

흠, 머리글과 바닥 글에 실제로 내용이 있습니까? 페이지가 어떤 PHP 경고를 보여? – smoove

+0

header.php와 footer.php를 직접 살펴 봤는데 둘 다 내용을 잘 보여줍니다. – asdfasdfasdfasdf

1

PHP는 루트 폴더에서 'header.php'를 찾기 시작하고 찾을 수 없습니다. 는 현재 스크립트와 같은 디렉토리에있는 경우, 당신은 오히려 마법 일정 __DIR__을 사용해야합니다

<?php require_once __DIR__ . '/header.php'; ?> 
+0

header.php와 master.php는 모두 같은 디렉토리에 있고 include 경로에 '.'이 있습니다. 그 때 이것은 요구되어서는 안된다. – MitMaro

+0

현재 디렉토리 (include_path =.)는 디렉토리가 아니라 스크립트가 호출되는 경로이며, 스크립트는 상주합니다. – soulmerge

+0

동일한 오류가 발생합니다. – asdfasdfasdfasdf

1

master.php 포함 또는 같은 디렉토리에없는 다른 스크립트 파일에 필요한되고 있기 때문에 그것은있을 수 있습니다header.php입니다. 즉, 인덱스를 방문하면 어떤 파일이 호출/파싱되는지 알 수 있습니까?

또한 require() 적용 include()에 대한 documentation를 살펴 보자 : 주석의 일부를 해결하기 위해

Files for including are first looked for in each include_path entry relative to the current working directory, and then in the directory of current script. E.g. if your include_path is libraries, current working directory is /www/, you included include/a.php and there is include "b.php" in that file, b.php is first looked in /www/libraries/ and then in /www/include/

업데이트

을 : 나는 (포함하는 것이 말하지 않았다) 것 CWD를 변경하십시오. CWD가 master/header.php가있는 곳이 아니라면 문제가 될 수 있습니다.

예를 들어 master.phpheader.php이 아닌 다른 폴더에 index.php이 있다고 가정 해 보겠습니다. 적절한 경로를 사용하거나 포함해야합니다 (master.php). CWD가 index.php의이기 때문에

<?php require_once("header.php"); ?> 

그러나,이 시점에서 CWD header.php 포함되어 있지 않습니다 이제 master.php는 문이있다.

이 문제를 해결하려면 master.php 경로가 아닌 header.php으로 현재 스크립트의 CWD에서 적절한 경로로 require_once을 호출해야합니다.

+0

getcwd(), http://php.net/getcwd를 사용하여 현재 작업 디렉토리를 가져 오거나 확인하거나 표시 할 수 있습니다. include()/require()는 chdir()과 같은 것만 cwd를 변경하지 않습니다. – VolkerK

+0

getcwd()를 사용했습니다. 그리고 그것은/Users/MyName/Sites/MySite를 주었다. 그러므로 require_once ("Views/header.php"); 작동해야하지만 작동하지 않습니다. 그것은 나에게 같은 오류를 준다! – asdfasdfasdfasdf

+0

또한, Peter는 master.php에 대한 위의 좋은 점을 가져 왔으며/동일한 디렉토리에없는 다른 스크립트에 포함 시켰습니다. 그래서 나는 http : //localhost/~MyName/MySite/Views/master.php에 갔다. 그리고 나는 똑같은 오류를 얻는다! – asdfasdfasdfasdf

0

는이 같은 선 (15)이 필요합니다 :

<?php (require_once("header.php")) or die(); ?> 

그러나 헤더 언제부터.귀하의 코멘트에서

<?php (include_once("header.php")) or die(); ?> 

또는

<?php require_once("header.php"); ?> 
관련 문제