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

PHP实现从FTP获取以add.zip结尾的最新文件

PHP FTP筛选指定后缀的最新文件修改方案

要实现只筛选以add.zip结尾的最新文件,同时排除del.zip文件,只需在遍历文件的循环中增加后缀判断逻辑,不符合条件的文件直接跳过,不参与时间比较。

修改要点:

  • 对每个遍历到的文件,先判断是否以add.zip结尾,同时排除以del.zip结尾的文件
  • 符合条件的文件才进行最后修改时间的比较,更新最新文件记录

完整修改后代码:

// 建立FTP连接
$conn = ftp_connect('ftp.website.com');
ftp_login($conn, 'username', 'password');

// 获取指定路径下的文件列表
$files = ftp_nlist($conn, '/data');

$mostRecent = array(
    'time' => 0,
    'file' => null
);

foreach ($files as $file) {
    // 跳过目录(如果ftp_nlist返回了目录的话)
    if (ftp_size($conn, $file) == -1) {
        continue;
    }
    
    // 筛选条件:只保留以add.zip结尾的文件,排除del.zip文件
    $fileName = basename($file);
    // 方式1:兼容所有PHP版本
    if (substr($fileName, -7) !== 'add.zip' || substr($fileName, -7) === 'del.zip') {
        continue;
    }
    // 方式2:PHP 8.0及以上版本可使用更简洁的写法
    // if (!str_ends_with($fileName, 'add.zip') || str_ends_with($fileName, 'del.zip')) {
    //     continue;
    // }

    // 获取文件最后修改时间
    $time = ftp_mdtm($conn, $file);

    if ($time > $mostRecent['time']) {
        $mostRecent['time'] = $time;
        $mostRecent['file'] = $file;
    }
}

// 确认找到目标文件后再执行下载和删除操作
if ($mostRecent['file'] !== null) {
    ftp_get($conn, "/home/mywebsite/public_html/wp-content/uploads/data-zipped/target.zip", $mostRecent['file'], FTP_BINARY);
    ftp_delete($conn, $mostRecent['file']);
}

ftp_close($conn);

额外优化说明:

  1. 增加了跳过目录的判断(ftp_size($conn, $file) == -1表示该路径是目录),避免误处理目录
  2. 增加了目标文件存在性判断,防止未找到符合条件文件时执行ftp_get和ftp_delete报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:10:27