2010-05-20 6 views
4

php를 사용하여 디렉토리의 모든 파일을 가져 와서 로컬에 저장하는 중 ... 이름을 계속 지정해야하는 것처럼 보입니까? 그게 맞습니까?php - ftp 디렉토리의 모든 파일?

function grabFiles() { 
     $conn = ftp_connect(REMOTE); 
      @ftp_login($conn, REMOTEUSER, REMOTEPASS); 
      ftp_get($conn, '*', FTP_BINARY); 
     } 

답변

-1

예, 정확한 내용이지만 foreach 루프에서 glob을 사용하고 디렉토리의 모든 파일을 가져 오는 것이 매우 쉽습니다.

+0

웁 ...이 ... 나에게 분명하지 글로브는 무엇입니까? – PoppySeedsAndAppleJuice

+0

glob가 원격으로 (즉, ftp를 통해) 작동하지 않습니다. –

1

난 그냥 또한 내가 같은 ftp_glob 기능을 썼다 그것을 프로젝트에서 필요로했다. glob()과 동일하게 작동하지만 옵션은 제공되지 않습니다.

사용 예

$ftp = ftp_connect($server, $port, 90); 
ftp_login($ftp, $login, $password); 
ftp_pasv($ftp, true); 

$list = ftp_glob($ftp, "/sample/*.csv"); 

코드

function ftp_glob($resource, $pattern) 
{ 
    $dir_patterns = explode('/', ltrim($pattern, '/')); 
    if (count($dir_patterns) == 0) 
    { 
     return array(); 
    } 
    $paths_to_check = array (ftp_pwd($resource)); 
    return ftp_glob_rec($resource, $dir_patterns, $paths_to_check); 
} 

function ftp_glob_rec($resource, $dir_patterns, $paths_to_check) 
{ 
    $matching_paths = array(); 
    $pattern = array_shift($dir_patterns); 
    foreach ($paths_to_check as $path) 
    { 
     $list = ftp_nlist($resource, $path); 
     if ($list === false) 
     { 
     continue ; 
     } 
     foreach ($list as $file) 
     { 
     if (in_array($file, array('.', '..'))) 
     { 
      continue ; 
     } 
     if (match($file, $pattern) > 0) 
     { 
      $matching_paths[] = rtrim($path, '/') . '/' . $file; 
     } 
     } 
    } 
    if (count($dir_patterns) == 0) 
    { 
     return $matching_paths; 
    } 
    return ftp_glob_rec($resource, $dir_patterns, $matching_paths); 
} 

function match($string, $pattern, $a = 0, $b = 0, $options = '') 
{ 
    if ((!isset($string[$a])) && (!isset($pattern[$b]))) 
    { 
     return 1; 
    } 
    if (strpos($options, 'x') !== false) 
    { 
     if (($string[$a] == "\n") || ($string[$a] == "\t") || ($string[$a] == "\r") || ($string[$a] == " ")) 
     { 
     return (match($string, $pattern, ($a + 1), $b, $options)); 
     } 
     if (($pattern[$b] == "\n") || ($pattern[$b] == "\t") || ($pattern[$b] == "\r") || ($pattern[$b] == " ")) 
     { 
     return (match($string, $pattern, $a, ($b + 1), $options)); 
     } 
    } 
    if ((isset($pattern[$b])) && ($pattern[$b] == '*')) 
    { 
     if (isset($string[$a])) 
     { 
     return (match($string, $pattern, ($a + 1), $b, $options) + match($string, $pattern, $a, ($b + 1), $options)); 
     } 
     else 
     { 
     return (match($string, $pattern, $a, ($b + 1), $options)); 
     } 
    } 
    if ((isset($string[$a])) && (isset($pattern[$b])) && ($pattern[$b] == '?')) 
    { 
     return (match($string, $pattern, ($a + 1), ($b + 1), $options)); 
    } 
    if ((isset($string[$a])) && (isset($pattern[$b])) && ($pattern[$b] == '\\')) 
    { 
     if ((isset($pattern[($b + 1)])) && ($string[$a] == $pattern[($b + 1)])) 
     { 
     return (match($string, $pattern, ($a + 1), ($b + 2), $options)); 
     } 
    } 
    if ((isset($string[$a])) && (isset($pattern[$b])) && ($string[$a] == $pattern[$b])) 
    { 
     return (match($string, $pattern, ($a + 1), ($b + 1), $options)); 
    } 
    return 0; 
} 
관련 문제