[英]Delete files on a FTP server with the word “ub” in their filenames
我通過ftp_connect
和ftp_login
連接到FTP服務器。 連接后,我進入ftp_chdir
目錄。 在目錄中,我必須使用ftp_delete
刪除文件名中帶有單詞“ ub”的所有文件。 因此,我必須以某種方式讀取每個文件名,並僅刪除文件名中包含“ ub”的文件。 我不知道該怎么做。 請幫忙。 謝謝。
如果使用交互式ftp命令行工具,則可以發出命令
mdel *ub*
但是底層協議不支持通配符操作; 如您所說,這是必須在客戶端中實現的,方法是獲取所有名稱,與模式進行比較並一一刪除。 您可能要考慮使用命令行ftp而不是php編寫腳本?
@Pekka的評論有一種可能的解決方案。 另一種是使用glob
。
$files = glob('*ub*');
foreach (glob("*ub*") as $file) {
ftp_delete('YOUR_CONNECTION', $file);
}
問候
由於此問題沒有真正的答案,因此我將使用允許通過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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.