我通过ftp_connect
和ftp_login
连接到FTP服务器。一旦连接,我就去ftp_chdir
的目录。在目录中,我必须用ftp_delete
删除文件名中包含单词“ub”的所有文件。所以我必须以某种方式读取每个文件名,并且只删除那些文件名为“ub”的文件。我不知道如何做到这一点。请帮忙。谢谢。删除FTP服务器上文件名为“ub”的文件
0
A
回答
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);
相关问题
- 1. 通过FTP连接删除服务器上的文件夹
- 2. 从iphone应用程序删除FTP服务器上的文件
- 3. 删除服务器上传的文件
- 4. 无法使用php重命名或删除ftp服务器上的文件
- 5. 删除服务器文件
- 6. 空文件上传到FTP服务器
- 7. 上传文件到FTP服务器
- 8. c#上传文件到FTP服务器
- 9. ASP.Net文件上传到FTP服务器
- 10. 上传文件FTP服务器
- 11. 使用Java在FTP上用文件名删除文件
- 12. 使用Dropzone.js删除服务器上的重命名文件
- 13. 使用Java从FTP服务器删除文件
- 14. Filezilla服务器文件无法FTP。把空白“/ /文件名”
- 15. 如何获取FTP服务器上文件的文件大小?
- 16. 下载文件时从网络服务器上删除文件
- 17. 更改FTP服务器上文件的名称IOS
- 18. 用于删除ftp服务器上x天以前的文件的shell脚本
- 19. 使用iPhone上传FTP服务器上的文本文件
- 20. 在FTP文件服务器上查看超过10,000个文件?
- 21. 使用ftp删除文件
- 22. 与FTP服务器的文件同步
- 23. 更新FTP服务器上的文本文件?
- 24. 从服务器上自动删除SFTP上传的文件
- 25. 了解/删除Azure文件服务上的文件锁
- 26. 服务器上的文件名编码
- 27. 通过Ant FTP任务删除所有文件和文件夹
- 28. 为什么java ftp上传文件损坏到服务器?
- 29. MSBUILD - 直到文件存在于ftp服务器上为止?
- 30. 架构文件托管FTP服务器
你几乎在那里:)参见'ftp_nlist':http://php.net/manual/en/function.ftp-nlist.php –
谢谢!一旦我有目录中包含的文件列表,我如何删除文件名中包含单词“ub”的文件? – Gabriele
使用'strpos'或'preg_match'或任何其他对此类事物有用的函数。 – ceejayoz