带有部分文件名的ftp_get()文件(不是通配符)

时间:2018-08-20 00:55:56

标签: php ftp

我需要使用PHP根据文件名的后半部分获取文件

文件名的结构将始终为NAME_123456789.dat,其中数字为tracking_id(unique)

名称为John, Mel, Bronson, etc。数字是tracking_id

仅用于理解的过程将是一个人将输入其tracking_id。它将从搜索栏中提取出来,并将其植入特定目录的ftp搜索中。因为tracking_id是唯一的,所以它应该只返回一个结果,因此ftp_get()对吗?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

考虑到相对较小的目录大小(以上评论为100+),应该首先使用ftp_nlist()列出所有文件,然后搜索并下载所需文件

$search = '_' . $trackingId . '.dat';
$searchLen = strlen($search);
$dir = '.'; // example directory
$files = ftp_nlist($connection, $dir); 
foreach ($files as $file) {
    // check if $file ends with $search
    if (strrpos($file, $search) === strlen($file) - $searchLen) {
        // found it, download it
        ftp_get($connection, 'some/local/file/path', $dir . '/' . $file);
    }
}

可以在Michael Berkowski's comment above ...中找到更好,更适合未来的选择...

  

您希望在任何给定时间在目录中运行多少个文件?如果数量较少,则通过ftp列出内容可能会正常工作。如果有成千上万个文件,则可能要存储某种文本清单文件以供读取或在数据库中建立索引。

这些确实取决于文件上传到FTP服务器的方式和时间,因此,鉴于我们对此一无所知,我无法提供任何解决方案。