2011-09-18 176 views
0

我通過ftp_connectftp_login連接到FTP服務器。一旦連接,我就去ftp_chdir的目錄。在目錄中,我必須用ftp_delete刪除文件名中包含單詞「ub」的所有文件。所以我必須以某種方式讀取每個文件名,並且只刪除那些文件名爲「ub」的文件。我不知道如何做到這一點。請幫忙。謝謝。刪除FTP服務器上文件名爲「ub」的文件

+0

你幾乎在那裏:)參見'ftp_nlist':http://php.net/manual/en/function.ftp-nlist.php –

+0

謝謝!一旦我有目錄中包含的文件列表,我如何刪除文件名中包含單詞「ub」的文件? – Gabriele

+0

使用'strpos'或'preg_match'或任何其他對此類事物有用的函數。 – ceejayoz

回答

0

如果你使用一個交互式的FTP命令行工具,你可以發出命令

mdel *ub* 

但低級別的協議不支持通配符操作;這是必須在客戶端通過獲取所有名稱,與模式進行比較以及逐個刪除來實現的,正如您所說的那樣。你可能想考慮使用命令行ftp來編寫腳本,而不是使用php?

0

@ Pekka的評論有一個可能的解決方案。另一種是使用glob

$files = glob('*ub*'); 
+0

只有當ftp服務器OP試圖連接的機器與php腳本運行在同一臺機器上時,情況纔是正確的 –

0
foreach (glob("*ub*") as $file) { 
    ftp_delete('YOUR_CONNECTION', $file); 
} 

問候

0

由於沒有真正回答這個問題,我會用我的功能回答,允許通過ftp刪除多個文件:

/** 
* Delete multiple files on FTP server. Allowed wildcards are * and ?. 
* @param resource $ftp_connection 
* @param string $delete_pattern 
* @param bool $case_sensitive Case sensitivity is by default 
* @return bool|int Number of deleted files, FALSE on failure 
*/ 
function ftp_mdelete($ftp_connection, $delete_pattern = "", $case_sensitive = TRUE){ 
    if(!is_resource($ftp_connection) || strtolower(get_resource_type($ftp_connection)) !== "ftp buffer"){ 
     trigger_error("First parameter for ftp_mdelete should be a valid FTP connection", E_USER_WARNING); 
     return FALSE; 
    }elseif(!is_string($delete_pattern) || !strlen($delete_pattern)){ 
     trigger_error("Second parameter for ftp_mdelete should be a non-empty string", E_USER_WARNING); 
     return FALSE; 
    } 
    $raw_list = ftp_rawlist($ftp_connection, '.'); 
    if(!is_array($raw_list)){ 
     return FALSE; 
    } 
    $matched_count = 0; 
    $deleted_count = 0; 
    if($raw_list){ 
     $delete_pattern = preg_quote($delete_pattern); 
     $delete_pattern = '/^'.str_replace(array('\*', '\?'), array('.*', '.'), $delete_pattern).'/S'.($case_sensitive?'':'i'); 
     foreach($raw_list as $entry){ 
      if($entry{0} === '-'){ 
       $entry = preg_split("/[\s]+/S", $entry, 9); 
       $entry = $entry[8]; 
       if(preg_match($delete_pattern, $entry)){ 
        ++$matched_count; 
        if(ftp_delete($ftp_connection, $entry)){ 
         ++$deleted_count; 
        } 
       } 
      } 
     } 
     unset($raw_list, $entry); 
    } 
    if($matched_count != $deleted_count && $deleted_count){ 
     trigger_error("Only {$deleted_count} out of {$matched_count} files deleted.", E_USER_NOTICE); 
    }elseif($matched_count && !$deleted_count){ 
     trigger_error("No files were deleted ({$matched_count} files matched given pattern).", E_USER_WARNING); 
     return FALSE; 
    } 
    return $deleted_count; 
} 

用法示例:

$ftp = ftp_connect('127.0.0.1'); 
ftp_login($ftp, 'user', 'pass'); 
ftp_chdir($ftp, 'dir'); 
$deleted = ftp_mdelete($ftp, '*ub*'); 
ftp_close($ftp); 

echo "Number of deleted files: ".intval($deleted);