테스트 사이트 - 개발 중인 베타 버전입니다

왜 is_file($file) 이 false값을 가지죠? 채택완료

프로그래머7 8년 전 조회 7,802

$dirlist = scandir($dir); 

foreach ($dirlist as $file){ 

//분명 여기시점에서 $file 값이 test.php 이 들어있거든요

if(is_file($file)){  //<= 그런데 왜 여기(if문)안으로 안들어올까요? 

// $file 값은 여기에서 분명히 test.php입니다

어쩌구 저쩌구... 

}

}


참고) 위에서 $dir에 들어있는 directory와 그 이하의 파일은 모두 707 입니다

댓글을 작성하려면 로그인이 필요합니다.

답변 6개

채택된 답변
+20 포인트
8년 전

$dir = './';

if ($dirlist = scandir($dir)) {

foreach ($dirlist as $file){ 

if (is_dir($file)) { 

echo '<br>dir => ' . $file . '<br>';

continue;

} else if (is_file($file)) { 

echo $file . '<br>';

} else 

echo 'not file => ' . $file . '<br>';

}

} else

echo 'not dir';

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

프로그래머7
8년 전
우선 시간내어 주셔서 감사합니다

내용)

저는 원래 아래처럼 짰습니다
슈와이님과는 다른 방법으로 짰고요
문제는 if_file($file)이 왜 false로 인식이 되는지...이해가 안갑니다.-_-
분명 $file값은 some_file.php 파일로 들어있거든요


수정) 댓글에 소스를 달아드렸더니...단락 구분이 안되어서
답변 글 형식으로 새로 올려드렸습니다
프로그래머7
8년 전
슈와이님^^ 보기 좋게..새로 답변글 형식으로 올려드렸어요^^
프로그래머7
8년 전
정말 감사합니다 ^^
즐거운 한주 맞이하세요^^

댓글을 작성하려면 로그인이 필요합니다.

P
8년 전

슈와이님께 ^^

 

댓글이 단락 구분이 안지어져서

여기에 새로 글 써드립니다

 

$dir = './main';

if(is_dir($dir)) {

recursive_file_list($dir);

}else{

echo "not a directory";

exit;

}

 

function recursive_file_list($dir){

$dirlist = scandir($dir);

foreach ($dirlist as $file){

if(($file==".")||($file=="..")){

continue;

}

if(is_dir($file)) {

recursive_file_list($file);

}

if(is_file($file)){ 

$temp = new SplFileInfo($file);

if($temp->getExtension()=="php"){

my_process();

}

}else{

echo $file."is not a file<br>";

}

}

}

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

슈와이
8년 전
function recursive_file_list($dir){
$dirlist = scandir($dir);
foreach ($dirlist as $file){
if ($file== '.' || $file == '..') continue;

if (is_dir($dir . '/' . $file)) {
recursive_file_list( $dir . '/' . $file);
} else if (is_file($dir . '/' . $file)) {
if (preg_match('/\.php$/', $file))
my_process();
} else
echo $file . " is not a file<br>";
}
}

참고사이트 http://php.net/manual/kr/function.is-file.php#86992
프로그래머7
8년 전
슈와이님 감사합니다.
슈와이님 말씀대로 하니까 됩니다^^

그런데 궁금한게요... php.net 보면...is_file 함수는 패스까지 넣는 예제도없던데
is_file함수에 패스 넣어야 한다는 것은 혹시 어디를 보면 알수 있죠?^^
그리고 매개변수도 filename이라고 되어있던데요

댓글을 작성하려면 로그인이 필요합니다.

8년 전

최종적으로 무엇을 해야 되는지 이해가...

 

if문만 실행되면 되는건지 아니면 

test.php 파일을 if문 안에서 사용해야 되는건가요? 

아래처럼 echo 찍으면 어떻게 나오나요? 

 

//분명 여기시점에서 $file 값이 test.php 이 들어있거든요
echo $file;  <= 폴더내 전체 파일 출력됨
echo "<br>";
        if(is_file($file)){  //<= 그런데 왜 여기(if문)안으로 안들어올까요?
              // $file 값은 여기에서 분명히 test.php입니다

echo $file;  <= 제일 마지막 파일만 출력되네요 

 

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 4개

뽁스
8년 전
아.. 질문을 제대로 못봤네요. if 자체가 안된다는거군요~;;
프로그래머7
8년 전
아뇨 그래도 시간내어주셔서 감사합니다^^
뽁스
8년 전
$dir = "폴더경로";

if(is_file($dir.'/'.$file)){

}

혹시 이렇게 해도 안되나요?
저는 테스트하니 잘나오는데 다른 문제가 있는건지 모르겠네요.
프로그래머7
8년 전
정말 감사합니다 ^^
즐거운 한주 맞이하세요^^

댓글을 작성하려면 로그인이 필요합니다.

8년 전

파일에 test.php가 들어있다고 해도 경로가 같은건 아니죠

만약 처음에 들어가는 $dir이 실행하고 있는 php랑 다르면 경로가 들어가야죠 그 두개가 같다면 모르겠네요

도움이 못되고 댓글만 같네요

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

프로그래머7
8년 전
같은 경로에서 실행한 것 입니다.^^
프로그래머7
8년 전
정말 감사합니다 ^^
즐거운 한주 맞이하세요^^

댓글을 작성하려면 로그인이 필요합니다.

8년 전

http://php.net/manual/kr/function.scandir.php">http://php.net/manual/kr/function.scandir.php 위 매뉴얼 처럼 

현재디렉토리(.)와 상위디렉토리(..)가 포함되어 있어 그렇지 않나요?

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

프로그래머7
8년 전
예 질문드린 글에는 제외하였는데... 원래 소스는 그것을 체크하여 건너뛰게 하였습니다
아래처럼이요
if(($file==".")||($file=="..")){
continue;
}
프로그래머7
8년 전
정말 감사합니다 ^^
즐거운 한주 맞이하세요^^

댓글을 작성하려면 로그인이 필요합니다.

8년 전

혹시 파일이 php 실행하는 곳과 같은 경로에 있는건가요? 

만약 경로가 다르다면 앞에 경로를 붙여주시면 됩니다.

http://blog.habonyphp.com/entry/php-%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%ED%8F%B4%EB%8D%94-%EC%A0%95%EB%B3%B4%EB%A5%BC-%EC%B6%9C%EB%A0%A5%ED%95%98%EB%8A%94-%ED%95%A8%EC%88%98-readdir-scandir-dir-%ED%81%B4%EB%A0%88%EC%8A%A4">http://blog.habonyphp.com/entry/php-%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%ED%8F%B4%EB%8D%94-%EC%A0%95%EB%B3%B4%EB%A5%BC-%EC%B6%9C%EB%A0%A5%ED%95%98%EB%8A%94-%ED%95%A8%EC%88%98-readdir-scandir-dir-%ED%81%B4%EB%A0%88%EC%8A%A4 

보시면 파일 디렉토리 구분해서 저장 한 기본소스도 있으니 혹시나 참고 하시면 편하실거 같아서 올려둡니다.

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

프로그래머7
8년 전
.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인