如何使用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
相关产品推荐
相关产品推荐

