通过 FTP 从 FTP 服务器获取当前日期的文件
Get File from FTP server only for current date via FTP
我正在尝试从 FTP 获取最后修改日期为今天的文件。如果我知道文件名,这将非常有效。
在我的 FTP 服务器中,文件名是动态的。我只知道.csv 的文件扩展名,并且有一个 CSV 文件和许多其他不同的文件。
如何只获取最后修改日期为当前日期的 .csv 文件?一旦我得到它,我将从 FTP.
下载该文件
这是我尝试过的,只有在我知道文件名的情况下才能正常工作。
// connect and login to FTP server
$ftp_server = "ftp server details";
$ftp_username = 'ftp user';
$ftp_userpass = 'ftp pass';
$ftp_conn = ftp_connect($ftp_server) or die("Could not connect to $ftp_server");
$login = ftp_login($ftp_conn, $ftp_username, $ftp_userpass);
//hard coded file name. I want to get only .csv file (It is just one file)
$file = "/MYDATA/2020_10_27_15_00.csv";
date_default_timezone_set('Asia/Kolkata');
$currenttime = date( 'F d Y', strtotime( 'now' ) );
$lastchanged = ftp_mdtm($ftp_conn, $file);
if ($lastchanged != -1)
{
$lastmodifieddate = date("F d Y", $lastchanged);
if (strcmp($currenttime, $lastmodifieddate) == 0)
{
echo "$file was last modified on : " . date("F d Y", $lastchanged);
//download the file
}
else
{
echo "No file for current date";
//nothing to download
}
}
else
{
echo "Could not get last modified";
}
// close connection
ftp_close($ftp_conn);
?>
如何仅获取 .csv 扩展名的文件名,最后修改日期为当前日期并从 FTP 下载文件?
谢谢!
列出文件并循环它们,获取每个文件的修改日期并与今天的日期进行比较(未测试):
$files = ftp_nlist($ftp_conn, "/MYDATA/*.csv");
$today = date("Ymd");
foreach($files as $file) {
$mtime = date("Ymd", ftp_mdtm($ftp_conn, $file));
if($mtime == $today) {
$found = $file;
break; // if there is only one or you only want one
}
}
if(isset($found)) {
echo "$found is today's date $today!";
// download $found
} else {
echo "No file found for today's date $today!";
}
如果可能有多个文件具有今天的日期,则分配给一个数组并对它们执行其他操作:
if($mtime == $today) {
$found[] = $file;
}
注意:这个解决方案会很慢,尤其是对于很多文件。您可以查看 ftp_rawlist or issue a ls
or similar command with sorting using ftp_raw 然后解析出日期。
感谢 Martin Prikryl 的评论,您也许可以做这样的事情,将文件信息放入多维数组并检查:
$files = ftp_mlsd($conn_id, "/MYDATA/*.csv");
$today = date("Ymd");
$found = array_filter($files, function($v) use($today) {
return substr($v["modify"], 0, 8) == $today;
});
然后你可以得到名字:
$found = array_column($found, "name");
如果 ftp_mlsd 不接受通配符,那么您需要在过滤器代码中添加检查 $v["name"]
以获取 .csv
扩展名。
我正在尝试从 FTP 获取最后修改日期为今天的文件。如果我知道文件名,这将非常有效。
在我的 FTP 服务器中,文件名是动态的。我只知道.csv 的文件扩展名,并且有一个 CSV 文件和许多其他不同的文件。
如何只获取最后修改日期为当前日期的 .csv 文件?一旦我得到它,我将从 FTP.
下载该文件这是我尝试过的,只有在我知道文件名的情况下才能正常工作。
// connect and login to FTP server
$ftp_server = "ftp server details";
$ftp_username = 'ftp user';
$ftp_userpass = 'ftp pass';
$ftp_conn = ftp_connect($ftp_server) or die("Could not connect to $ftp_server");
$login = ftp_login($ftp_conn, $ftp_username, $ftp_userpass);
//hard coded file name. I want to get only .csv file (It is just one file)
$file = "/MYDATA/2020_10_27_15_00.csv";
date_default_timezone_set('Asia/Kolkata');
$currenttime = date( 'F d Y', strtotime( 'now' ) );
$lastchanged = ftp_mdtm($ftp_conn, $file);
if ($lastchanged != -1)
{
$lastmodifieddate = date("F d Y", $lastchanged);
if (strcmp($currenttime, $lastmodifieddate) == 0)
{
echo "$file was last modified on : " . date("F d Y", $lastchanged);
//download the file
}
else
{
echo "No file for current date";
//nothing to download
}
}
else
{
echo "Could not get last modified";
}
// close connection
ftp_close($ftp_conn);
?>
如何仅获取 .csv 扩展名的文件名,最后修改日期为当前日期并从 FTP 下载文件?
谢谢!
列出文件并循环它们,获取每个文件的修改日期并与今天的日期进行比较(未测试):
$files = ftp_nlist($ftp_conn, "/MYDATA/*.csv");
$today = date("Ymd");
foreach($files as $file) {
$mtime = date("Ymd", ftp_mdtm($ftp_conn, $file));
if($mtime == $today) {
$found = $file;
break; // if there is only one or you only want one
}
}
if(isset($found)) {
echo "$found is today's date $today!";
// download $found
} else {
echo "No file found for today's date $today!";
}
如果可能有多个文件具有今天的日期,则分配给一个数组并对它们执行其他操作:
if($mtime == $today) {
$found[] = $file;
}
注意:这个解决方案会很慢,尤其是对于很多文件。您可以查看 ftp_rawlist or issue a ls
or similar command with sorting using ftp_raw 然后解析出日期。
感谢 Martin Prikryl 的评论,您也许可以做这样的事情,将文件信息放入多维数组并检查:
$files = ftp_mlsd($conn_id, "/MYDATA/*.csv");
$today = date("Ymd");
$found = array_filter($files, function($v) use($today) {
return substr($v["modify"], 0, 8) == $today;
});
然后你可以得到名字:
$found = array_column($found, "name");
如果 ftp_mlsd 不接受通配符,那么您需要在过滤器代码中添加检查 $v["name"]
以获取 .csv
扩展名。