왜 is_file($file) 이 false값을 가지죠?

왜 is_file($file) 이 false값을 가지죠?

QA

왜 is_file($file) 이 false값을 가지죠?

본문

$dirlist = scandir($dir); 

foreach ($dirlist as $file){ 

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

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

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

어쩌구 저쩌구... 

}

}


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

이 질문에 댓글 쓰기 :

답변 6

$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';

우선 시간내어 주셔서 감사합니다

내용)

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


수정) 댓글에 소스를 달아드렸더니...단락 구분이 안되어서
답변 글 형식으로 새로 올려드렸습니다

혹시 파일이 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 

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

 

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

 

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

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

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

 

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

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

 

 

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

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

예 질문드린 글에는 제외하였는데... 원래 소스는 그것을 체크하여 건너뛰게 하였습니다
아래처럼이요
if(($file==".")||($file=="..")){
continue;
}

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

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

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

슈와이님께 ^^

 

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

여기에 새로 글 써드립니다

 

$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>";

}

}

}

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

슈와이님 감사합니다.
슈와이님 말씀대로 하니까 됩니다^^

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

답변을 작성하시기 전에 로그인 해주세요.
전체 2,701
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT