2014-12-12 4 views
0

FTP 서버에 연결하고 디렉토리의 각 항목을 파일로 루프하는 다음 PHP 코드가 있습니다. 문제는 이러한 항목 중 일부는 디렉터리이며 디렉터리와 파일을 구별 할 수 있기를 바랍니다. 디렉토리라면 아이콘 파일을 변경해야합니다.PHP - FTP에서 디렉토리를 식별하는 파일

어떻게하면이 아이디어를 얻을 수 있습니까?

감사

$icon = "<img src=\"/icons/file.png\" border="\0\">"; 

$conn = ftp_connect($ftp_server); 
$login = ftp_login($conn, $ftp_username, $ftp_password); 
$files = ftp_nlist($conn, "."); 
ftp_close($conn); 

foreach ($files as $file) { 
    echo $icon." - ".$file."<br />"; 
} 
+2

달리 php.net에이 댓글이 도움이 될 수 있습니다 - 그것은이 디렉토리> http://php.net/manual/en/function.ftp-nlist.php#54307 –

+2

만약 당신이 할 수있는'ftp_chdir()'그것으로 . 이 서버 측을 결정할 다른 방법은 없습니다. 중복을 참조하십시오. – CodeCaster

답변

0

이 기능은 단순히 string array를 반환합니다.

ftp_rawlist 기능을 사용할 수 있습니다. 당신이 아래와 같이 TYPE 얻을 수있는이에서 Documnetation

:

$children = ftp_rawlist($connetion, $directory); 

foreach ($children as $child) { 
    $chunks = preg_split("/\s+/", $child); 
    $type=($chunks[0]{0} === 'd' ? 'directory' : 'file'); 
    $name=implode(' ', array_splice($chunks, 0, 8)); 
    //do whatever you want with $name & $type || if($type=='file') echo $icon." - ".$name."<br />"; 
} 

2 옵션 : 그리고 당신은 ftp_server하는 기능 ftp_chdir를 호출 할 수 있습니다 질문 코멘트에서 언급 한 바와 같이. link_for_this_method | 그러나 모든 목록에 대해 매번 FTP 서버를 요청하는 데는 시간이 걸릴 것입니다.

+0

감사합니다. 그러나 파일 이름을 얻으려면 ($ chunk, 0, 8)을 수정하여 0, 9를 읽은 다음 $ name [8]을 수행 한 이름을 반향시켜야했습니다. 이 올바른지? – John

+0

'ftp_rawlist()'는 서버가 결정한 형식으로 디렉토리 목록을 반환합니다. FTP 서버 에디션별로 다르게 파싱해야합니다. – CodeCaster

+0

@John 파일 이름에 공백이 없으면 올바른 결과를 제공합니다. 따라서 8 번째 색인 이후에 모든 요소를 ​​배열에 저장해야합니다. 그런 다음'implode'에 의해 이들을 결합하십시오. 편집 된 답변을 참조하십시오. 필요한 경우 CodeCaster에 대한 회신은 다음 댓글을 참조하십시오. –