2015-01-29 26 views
0

PHP 응용 프로그램 중 하나에 문제가 있습니다.PHP opendir()이 GET을 사용할 때 경고를 표시합니다.

// Opening the directory where the functions are located and reading the contents 
    if (is_dir(__FDIR__)){ 
     if ($dh = opendir(__FDIR__)){ 
      while (($file = readdir($dh)) !== false){ 

       if ($file != "." && $file != "..") { 

        //include all files found in the functions directory 
        include_once(__FDIR__.$file); 

       } 

      } 
      closedir($dh); 
     } 
    } 

잘 일반적으로하지만 곧 나는 다음과 같은 경고 얻을 URL에서 $ _GET, 매개 변수와 함께 URL로드로 작동 :

을 나는 응용 프로그램에 내 기능을 포함하는 다음 코드 블록을 사용
Warning: readdir(): 11 is not a valid Directory resource in C:\xampp\htdocs\portcms\functions.php on line 6 
    Warning: closedir(): 11 is not a valid Directory resource in C:\xampp\htdocs\portcms\functions.php on line 16 

이상한 점은 $ _GET 매개 변수가 위의 코드를 대상으로하지 않는다는 것입니다. 다른 콘텐츠 블록을로드하기 위해 다른 코드 블록으로 전달됩니다. 또한이 설정을 사용하는 다른 응용 프로그램에서는 경고를 던지지 않고 완벽하게 작동합니다.

편집 : 다음과 같이 휴무 예는 다음과 같습니다의 index.php에서 내가 follwing을 코드가 내 정의 파일 (filelocater)로 aswell 내 설정 파일을 포함

<?php 

//starting the session; 
session_start(); 

//getting required files; 
require_once('fileloc.php');       //file locater 
require_once(__CONFIG__);      //config file; 
require_once(__FUNCTIONS__);    //function loader-file; 
require_once(__CDIR__."class.db.php");  //database class for database manipulation (replace with class-loader?); 

//verifying the logged on user; 
$ver = login($_SESSION['username'], $_SESSION['pass']); 
if (!isset($ver) || $ver != 1) { 

    //could not verify user, destroying session and return to login screen; 
    session_destroy(); 
    header('location: login.php'); 

} 
    //building the page; 
require_once(__MDIR__. "header.php"); 
if ($ver == 1) { 
    require_once(__MDIR__."main.php"); 
} 
echo __FDIR__.'overview.php'; 
require_once(__MDIR__. "footer.php"); 

?> 

합니다. 그 다음 코드를 가지고 또한 포함 main.php :

내가 index.php에 로그인하는 경우
<div class="container"> 
<div class="bar"> 
    <p>welcome: <b><?php echo $_SESSION['username']; ?> | <a href="logout.php">logout</a></b></p> 
</div> 

<div class="nav"> 
    <ul> 
     <li><a href="?mod=overview">overview</a></li> 
     <!--<li><a href="">settings*</a></li>--> 
     <li><a href="">pages</a></li> 
     <li><a href="">portfolio management</a></li> 
     <!--<li><a href="">themes*</a></li> 
     <li><a href="">users*</a></li> 
     <li><a href="">plugins*</a></li>--> 
    </ul> 
</div> 

<div class="main"> 
<?php 
    if (isset($_GET) && !empty($_GET['mod'])) { 
     clean_input($_GET['mod']); 

     include_once(__MDIR__.$mod.'.php'); 
    } 
?> 
</div> 
</div> 

전혀없이로드 모드 = 개요 및 모든 peacy이다. 바로 개요 링크를 눌러 개요 "mod"(지금은 "test"라는 단어가 들어있는 빈 파일)를로드하면 경고가 표시됩니다.

내 상수에 아무런 문제가 없다는 것을 확인하기 위해 나는 FDIR을 functions.php에서 하드 코딩 된 파일 경로 문자열로 바꾸었다. 이것은 경고를 해결하지 못했습니다. 또 다른 이상한 것은 경고가 발생하더라도 함수가로드되는 것처럼 보입니다. 예를 들어 로그인이 유효한지 확인하는 함수는이 함수를 통해로드됩니다. 그것은 문제없이로드하는 것 같습니다

희망 나는 충분한 정보를 제공했습니다. 그렇지 않으면 더 많은 코드를 추가 할 수 있도록 알려주십시오.

또한 내가 Stackoverflow를 처음 사용한다고해서 모든 것이 올바르게 완료되지 않았을 수 있습니다. 나는 해결책을 찾기 위해 여기와 인터넷의 여러 다른 비슷한 문제들을 연구했다.

미리 감사드립니다.

+0

약간의 디버깅을하는 동안 작동하지 않는 예제 ($ _GET 포함)와 변수에서 찾은 값을 제공해야합니다. –

+0

아마도 여기에 대한 답변을 얻을 수 있습니다 http : // stackoverflow.com/questions/4572241/php-readdir-3-is-not-valid-directory-resource –

+0

라핌, 나는 이미 그 감사를 보았습니다. 불행히도 이것은 closedir이 while 루프 안에 있지 않은 내 문제는 아닙니다. 또한 그 순간에 내가 dir을 열려고 시도 할 때 경고를 던진다. 나는 작동하지 않는 예제를 포함하도록 질문을 편집 할 것이다. – misterp

답변

0

문제점을 일으키는 원인을 발견했습니다. 내 함수 폴더에 나는 mainloader.php라는 스크립트가있다. 이것은 함수 선언 외부에 함수를 재 작성한 후 제거하는 것을 잊어 버렸다.

admittingly 나는 div가 적절한 위치에 있지만 인덱스 문서의 시작 부분에로드되지 않은 다른 문제를 해결하려고 할 때만이 사실을 알게되었습니다. 남은 코드를 제거했을 때 div가 제자리로 돌아 왔고 함수 로더가 오류를 멈추었습니다.

감사합니다. - MisterP