2013-01-11 3 views
1

누구든지이 코드의 문제점을 알 수 있습니까? ../files/에 모든 폴더를 표시하도록되어 있지만 빈 목록이 반환됩니다.드롭 다운 상자의 하위 디렉토리 나열

<?php 
    $upload_dir = chdir("./files/" . $userid); 
    $dirs = glob($upload_dir, GLOB_ONLYDIR); 
    foreach($dirs as $val){ 
     echo '<option value="'.$val.'">'.$val."</option>\n"; 
    }  
?> 
+0

당신은 "모든 폴더를'../ files /'"로 표시해야하지만 코드는'chdir ("./ files /". $ userid)'라고 말합니다. 어느 것이 좋습니까? 그들은 완전히 다른 것들입니다. – glomad

+0

디렉토리 경로를 다시 호출하십시오. 디렉토리에 대한 절대 시스템 경로를 사용하십시오. 디렉터리 사용 권한을 확인하십시오 – SaidbakR

+0

@itchy/files/$ userid sry에 foders를 표시합니다. – Brian

답변

0

당신은 TRUE 또는 FALSE가 될 것 chdir의 반환에 $upload_dir 세트를 가지고, 그리고 :

하면이처럼 시도 $ dirs.

glob의 첫 번째 인수는 패턴을 나타내는 문자열이어야합니다. 귀하의 경우에, 당신은 * 모든 내용을 목록으로 표시하고 싶을 것입니다 (당신이 통과하는 TRUE 또는 FALSE 대신에). glob에 대한 첫 번째 인수는 Windows의 경우 dir, Linux의 경우 ls으로 생각하십시오. 따라서이 경우 /files/userid/* 또는 비슷한 이름을 사용하십시오.

나는이 대신 같은 것을 할 것 :

<?php 
    $pattern = "./files/" . $userid . '/*'; 
    $dirs = glob($pattern, GLOB_ONLYDIR); 
    foreach($dirs as $val){ 
     echo '<option value="'.$val.'">'.$val."</option>\n"; 
    }  
?> 

이 현재 작업 디렉토리를 변경하지 않는 장점이 있습니다. 이상적으로는 상대 경로 대신 절대 경로를 사용합니다.

+0

안녕하세요. 감사! 또한 드롭 다운에서 './files/'을 제거하는 방법이 있습니까? – Brian

+0

물론 많은 방법이 있습니다. 마음에 오는 첫 번째 생각은 [substr] (http://php.net/manual/en/function.substr.php), [str_replace] (http://php.net/manual/en/function)입니다. str-replace.php) 또는 [explode] (http://us2.php.net/explode) – ernie

+0

감사합니다! 사용 된 substr! – Brian

2

chdir() 반환 디렉토리를 변경하면 근무 여부에 따라 true 또는 false :이 코드입니다. 따라서 기본적으로 1 또는 0이라는 파일을 찾으십시오. 이것에 대해 명확하게 정의 된 동작이있는 경우 당신의 인수 때 설정을 glob에 같은 것을 사용하려고 다음

<?php 
    if (chdir("./files/" . $userid)) { 
     $dirs = glob('*', GLOB_ONLYDIR); 
     foreach($dirs as $val){ 
      echo '<option value="'.$val.'">'.$val."</option>\n"; 
     }   
    } else { 
     echo 'Changing directory failed.'; 
    } 
?> 
+0

나는 glob ('*', GLOB_ONLYDIR)이어야한다고 생각합니다. – ernie

+0

@ernie 오오. 권리. 감사. –

+0

@ernie glob ('*', GLOB_ONLYDIR)은 빈 드롭 다운 메뉴 만 반환합니다. – Brian