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

如何使用PHP复制FTP中所有以指定字符串开头的文件

使用PHP批量复制FTP服务器中指定前缀的文件

要实现批量复制FTP上所有以file_20240520开头的文件,你需要先获取FTP服务器上的文件列表,筛选出符合条件的文件后逐个复制。以下是完整实现代码:

// FTP连接信息
$ftpUser = 'testuser';
$ftpPass = 'pass';
$ftpServer = 'ftpserver';
$targetPrefix = 'file_20240520';

// 连接FTP服务器
$ftpConn = ftp_connect($ftpServer);
if (!$ftpConn) {
    die('无法连接到FTP服务器');
}

// 登录FTP
$loginSuccess = ftp_login($ftpConn, $ftpUser, $ftpPass);
if (!$loginSuccess) {
    die('FTP登录失败');
}

// 获取FTP根目录下的所有文件列表
$fileList = ftp_nlist($ftpConn, '/');
if (!$fileList) {
    die('无法获取文件列表');
}

// 遍历文件列表,筛选并复制符合前缀的文件
foreach ($fileList as $remoteFile) {
    // 获取文件名(去掉路径,假设文件都在根目录)
    $fileName = basename($remoteFile);
    // 判断文件名是否以指定前缀开头
    if (str_starts_with($fileName, $targetPrefix)) {
        // 构造远程文件的FTP路径
        $remotePath = "ftp://{$ftpUser}:{$ftpPass}@{$ftpServer}/{$fileName}";
        // 本地保存路径(这里直接保存在当前目录,文件名和远程一致)
        $localPath = $fileName;
        
        // 执行复制
        if (copy($remotePath, $localPath)) {
            echo "成功复制文件:{$fileName}\n";
        } else {
            echo "复制文件失败:{$fileName}\n";
        }
    }
}

// 关闭FTP连接
ftp_close($ftpConn);

关键说明:

  • ftp_connect和ftp_login:负责建立并登录FTP连接,这是获取文件列表的前提
  • ftp_nlist:获取指定目录下的所有文件和目录名,这里默认获取根目录(/)的内容
  • str_starts_with:PHP 8.0+ 提供的函数,用于判断字符串是否以指定前缀开头;如果你的PHP版本低于8.0,可以用substr($fileName, 0, strlen($targetPrefix)) === $targetPrefix替代
  • 复制逻辑沿用了你原有的copy函数,通过构造完整的FTP URL来访问远程文件

如果目标文件不在FTP根目录,只需修改ftp_nlist的第二个参数为对应目录路径即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 20:22:04