You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何删除FTP目录及子目录下文件名含指定字符串的文件

问题排查与修复方案

原有代码核心问题

  • 误用本地文件操作类:RecursiveDirectoryIterator是操作运行代码的服务器本地文件的,无法读取FTP服务器的目录结构,你建立的FTP连接完全没有用到遍历、删除环节
  • 文件名匹配逻辑错误:reset(explode('.', $file))只会取文件名点分隔的第一段做完全匹配,无法实现「文件名包含2019」的需求,示例里的201902_QSA4_CA.pdf根本匹配不上
  • 误用本地删除函数:unlink用于删除本地文件,FTP服务器上的文件需要用ftp_delete函数走已建立的FTP连接删除

修复后可运行代码

<?php
$web = 'mipage.com';
$user = 'xxxx';
$pass = 'xxxx';
// FTP根目录下要遍历的目标文件夹,按需修改
$targetRootDir = 'pdfs/archivo/';

// 建立FTP连接
$conn_id = ftp_connect($web);
if (!$conn_id) {
    die('FTP连接失败');
}
// 登录FTP
$login_result = ftp_login($conn_id, $user, $pass);
if (!$login_result) {
    die('FTP登录失败');
}
// 开启FTP被动模式,大部分FTP服务器需要这个配置
ftp_pasv($conn_id, true);

// 递归遍历FTP目录的自定义函数
function scanFtpDir($conn, $dir) {
    $files = [];
    // 获取当前目录下所有文件/文件夹
    $items = ftp_nlist($conn, $dir);
    if ($items === false) {
        return $files;
    }
    foreach ($items as $item) {
        // 跳过.和..目录
        if (basename($item) == '.' || basename($item) == '..') {
            continue;
        }
        // 判断是不是目录
        if (@ftp_chdir($conn, $item)) {
            // 切回上级目录
            ftp_chdir($conn, '..');
            // 递归遍历子目录
            $subFiles = scanFtpDir($conn, $item);
            $files = array_merge($files, $subFiles);
        } else {
            $files[] = $item;
        }
    }
    return $files;
}

// 获取目标目录下所有文件的全路径
$allFiles = scanFtpDir($conn_id, $targetRootDir);

foreach ($allFiles as $ftpFilePath) {
    $fileName = basename($ftpFilePath);
    // 判断文件名是否包含2019
    if (strpos($fileName, '2019') !== false) {
        // 删除FTP上的对应文件
        if (ftp_delete($conn_id, $ftpFilePath)) {
            echo "已删除:{$ftpFilePath}\n";
        } else {
            echo "删除失败:{$ftpFilePath}\n";
        }
    }
}

// 关闭FTP连接
ftp_close($conn_id);
?>

注意事项

  • 运行前建议先注释掉ftp_delete部分,先打印匹配到的文件确认没问题再执行删除,避免误删
  • 如果FTP服务器是主动模式,去掉ftp_pasv($conn_id, true)这行即可
  • 确保FTP账号对目标目录有删除权限

内容的提问来源于stack exchange,提问作者alfredo49

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:15:03