2011-09-18 177 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);