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를 처음 사용한다고해서 모든 것이 올바르게 완료되지 않았을 수 있습니다. 나는 해결책을 찾기 위해 여기와 인터넷의 여러 다른 비슷한 문제들을 연구했다.
미리 감사드립니다.
약간의 디버깅을하는 동안 작동하지 않는 예제 ($ _GET 포함)와 변수에서 찾은 값을 제공해야합니다. –
아마도 여기에 대한 답변을 얻을 수 있습니다 http : // stackoverflow.com/questions/4572241/php-readdir-3-is-not-valid-directory-resource –
라핌, 나는 이미 그 감사를 보았습니다. 불행히도 이것은 closedir이 while 루프 안에 있지 않은 내 문제는 아닙니다. 또한 그 순간에 내가 dir을 열려고 시도 할 때 경고를 던진다. 나는 작동하지 않는 예제를 포함하도록 질문을 편집 할 것이다. – misterp