我坚持在日期或今天下载最后修改的文本文件的进程的雾化。这是我的代码。
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
$contents = ftp_nlist($conn_id, '-rt .');
reset($contents);
function is_txt($file) {
return preg_match('/.*\.txt/', $file) > 0;
}
$filtered = array_filter($contents, is_txt);
// download all files in downloaded directory
while (list($key, $value) = each($filtered )) {
if (ftp_get($conn_id, $dir.'\\downloaded\\'.$value, $value, FTP_BINARY)) {
echo "Successfully written to $value\n";
} else {
echo "There was a problem\n";
}
}
我在获取文本文件方面取得了成功,但没有选择最后修改过的文件,filemtime
没有帮助我,也没有卷曲。
从PHP 7.2开始,您可以使用ftp_mlsd
function来检索文件列表,包括它们的时间戳。检查"modify"
条目。然后,您可以轻松识别最新文件。
对于旧版本的PHP,您需要使用ftp_mdtm
function来检索文件的修改时间。
但是你必须为每个文件单独调用它,这是非常低效的。
您还可以在MLSD
命令的用户注释中尝试执行ftp_rawlist
:
https://www.php.net/manual/en/function.ftp-rawlist.php#101071
在采用这种方法之前,首先检查您的FTP服务器是否支持MLSD
,因为并非所有FTP服务器都这样做(特别是IIS and vsftpd don't)。
唯一的另一种方法是使用ftp_rawlist
function。但它为每个没有预定义格式的文件返回类似ls
的行。如果连接到一个特定的服务器,则可以使用它;并根据服务器的细节对代码进行硬编码。但是,如果您需要连接到任意服务器,它就不可靠。
谢谢@Martin在你的帮助下,我能够解决上述问题
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
$contents = ftp_nlist($conn_id, '-rt .');
reset($contents);
function is_txt($file) {
return preg_match('/.*\.txt/', $file) > 0;
}
$filtered = array_filter($contents, is_txt);
$array = array();
//download all files in downloaded directory
while (list($key, $value) = each($filtered )) {
$buff = ftp_mdtm($conn_id, $value);
if ($buff != -1) {
array_push($array,date("F d Y", $buff));
}
}
$lmdate = array_pop($array);
$key="";
$value="";
reset($filtered);
while (list($key, $value) = each($filtered ))
{
$buff1 = ftp_mdtm($conn_id, $value);
$cdate=date("F d Y", $buff1);
if (($buff1 != -1) and ($cdate == $lmdate)){
if (ftp_get($conn_id, $dir.'\\downloaded\\'.$value, $value, FTP_BINARY)) {
echo "Successfully written to $value\n";
} else {
echo "There was a problem\n";
}
}
}