如何在PHP中使用ftp_get下载多个文件

如何在PHP中使用ftp_get下载多个文件,php,zip,unzip,Php,Zip,Unzip,我有这段代码,每天早上12点运行。它当前只能用于使用(修改时间)获取服务器中的最新文件。我面临的问题是,有时服务器会向服务器上载多个文件。我如何下载当天所有的最新文件?我目前正在使用 您可以使用并将其与$time 如果您创建了一个名为$todaysModifiedFiles的数组,然后您可以将$mostRecent对象推送到该数组上,前提是该对象从12:00AM开始修改,此时您可以通过将其与现在的时间进行比较来检查其修改时间 然后为脚本中的以下每个进程循环数组。您可以使用,并将其与$time $

我有这段代码,每天早上12点运行。它当前只能用于使用(修改时间)获取服务器中的最新文件。我面临的问题是,有时服务器会向服务器上载多个文件。我如何下载当天所有的最新文件?我目前正在使用

您可以使用并将其与
$time

如果您创建了一个名为
$todaysModifiedFiles
的数组,然后您可以将
$mostRecent
对象推送到该数组上,前提是该对象从12:00AM开始修改,此时您可以通过将其与现在的时间进行比较来检查其修改时间

然后为脚本中的以下每个进程循环数组。

您可以使用,并将其与
$time

$list = ftp_rawlist($conn, '.');//rawlist gets the dates, nlist does not 

$results = array();
foreach ($list as $line) {//loop the files
    list($perms, $links, $user, $group, $size, $d1, $d2, $d3, $name) =
        preg_split('/\s+/', $line, 9);//rip apart the returned data to get to the date
    $stamp = strtotime(implode(' ', array($d1, $d2, $d3)));
if($stamp < time() + 86400) {//beware of leap secounds
    $results[] = $name);
}

}
如果您创建了一个名为
$todaysModifiedFiles
的数组,然后您可以将
$mostRecent
对象推送到该数组上,前提是该对象从12:00AM开始修改,此时您可以通过将其与现在的时间进行比较来检查其修改时间

然后为脚本中的以下每个进程循环数组。

$list=ftp\u rawlist($conn')//rawlist获取日期,nlist不获取
$list = ftp_rawlist($conn, '.');//rawlist gets the dates, nlist does not 

$results = array();
foreach ($list as $line) {//loop the files
    list($perms, $links, $user, $group, $size, $d1, $d2, $d3, $name) =
        preg_split('/\s+/', $line, 9);//rip apart the returned data to get to the date
    $stamp = strtotime(implode(' ', array($d1, $d2, $d3)));
if($stamp < time() + 86400) {//beware of leap secounds
    $results[] = $name);
}

}
$results=array(); foreach($list as$line){//循环文件 列表($perms、$links、$user、$group、$size、$d1、$d2、$d3、$name)= preg_split('/\s+/',$line,9);//撕开返回的数据以获取日期 $stamp=strottime(内爆(“”,数组($d1,$d2,$d3)); 如果($stamp
$results
将拥有所有小于24小时的文件,循环下载,或者只在if()子句中添加下载内容

$list=ftp_rawlist($conn,')//rawlist获取日期,nlist不获取
$results=array();
foreach($list as$line){//循环文件
列表($perms、$links、$user、$group、$size、$d1、$d2、$d3、$name)=
preg_split('/\s+/',$line,9);//撕开返回的数据以获取日期
$stamp=strottime(内爆(“”,数组($d1,$d2,$d3));
如果($stamp

$results
将拥有所有小于24小时的文件,循环下载,或者只是将下载添加到if()子句中

$contents = ftp_rawlist($conn, '.');
$results = array();
foreach ($contents as $line) {
    list($perms, $links, $user, $group, $size, $d1, $d2, $d3, $name) =
        preg_split('/\s+/', $line, 9);
    $stamp = strtotime(implode(' ', array($d1, $d2, $d3)));
    $datetime = date('d/m/Y', $stamp);
    $results[] = array('name' => $name, 'timestamp' => $stamp, 'date' => $datetime);
}

usort($results, function($a, $b) { return $a['timestamp'] - $b['timestamp']; });
$today_date = date("d/m/Y");

$new_result = search($results, 'date', $today_date);


function search($array, $key, $value){
$results = array();

if (is_array($array)) {
    if (isset($array[$key]) && $array[$key] == $value) {
        $results[] = $array;
    }

    foreach ($array as $subarray) {
        $results = array_merge($results, search($subarray, $key, $value));
    }
}

return $results;
}

然后使用ftp\u get循环数组以获取当天的多个数据

$array_count = 0;
$temp_array = array();
foreach ($new_result as $new) {
    //todo
    $temp_array["name"] = $new_result["$array_count"]["name"];
    $temp_array["date"] = $new_result["$array_count"]["date"];
    echo "<br>";
    echo "File " . $temp_array["name"];
    echo "<br>";
    echo "Date " . $temp_array["date"];
    echo "<br>";

    // download the latest file using the filename from server
    ftp_get($conn, "$array_count.zip", $temp_array["name"], FTP_BINARY);
    //close connection
    ftp_close($conn);
    }
$array\u count=0;
$temp_array=array();
foreach($new\u结果为$new){
//待办事项
$temp_array[“name”]=$new_result[“$array_count”][“name”];
$temp_数组[“日期”]=$new_结果[“$array_count”][“日期”];
回声“
”; echo“File”。$temp_数组[“name”]; 回声“
”; 回显“日期”。$temp_数组[“日期”]; 回声“
”; //使用服务器上的文件名下载最新文件 ftp_get($conn,$array_count.zip,$temp_array[“name”],ftp_二进制文件); //密切联系 ftp_关闭($conn); }
我通过@Dagon code的一些调整,设法解决了这个问题

$contents = ftp_rawlist($conn, '.');
$results = array();
foreach ($contents as $line) {
    list($perms, $links, $user, $group, $size, $d1, $d2, $d3, $name) =
        preg_split('/\s+/', $line, 9);
    $stamp = strtotime(implode(' ', array($d1, $d2, $d3)));
    $datetime = date('d/m/Y', $stamp);
    $results[] = array('name' => $name, 'timestamp' => $stamp, 'date' => $datetime);
}

usort($results, function($a, $b) { return $a['timestamp'] - $b['timestamp']; });
$today_date = date("d/m/Y");

$new_result = search($results, 'date', $today_date);


function search($array, $key, $value){
$results = array();

if (is_array($array)) {
    if (isset($array[$key]) && $array[$key] == $value) {
        $results[] = $array;
    }

    foreach ($array as $subarray) {
        $results = array_merge($results, search($subarray, $key, $value));
    }
}

return $results;
}

然后使用ftp\u get循环数组以获取当天的多个数据

$array_count = 0;
$temp_array = array();
foreach ($new_result as $new) {
    //todo
    $temp_array["name"] = $new_result["$array_count"]["name"];
    $temp_array["date"] = $new_result["$array_count"]["date"];
    echo "<br>";
    echo "File " . $temp_array["name"];
    echo "<br>";
    echo "Date " . $temp_array["date"];
    echo "<br>";

    // download the latest file using the filename from server
    ftp_get($conn, "$array_count.zip", $temp_array["name"], FTP_BINARY);
    //close connection
    ftp_close($conn);
    }
$array\u count=0;
$temp_array=array();
foreach($new\u结果为$new){
//待办事项
$temp_array[“name”]=$new_result[“$array_count”][“name”];
$temp_数组[“日期”]=$new_结果[“$array_count”][“日期”];
回声“
”; echo“File”。$temp_数组[“name”]; 回声“
”; 回显“日期”。$temp_数组[“日期”]; 回声“
”; //使用服务器上的文件名下载最新文件 ftp_get($conn,$array_count.zip,$temp_array[“name”],ftp_二进制文件); //密切联系 ftp_关闭($conn); }
我已经尝试过结果给我所有文件而不是当天的文件调试告诉你什么?当我运行代码时,结果给我文件列表,其中包括旧文件,而不仅仅是当天的文件我已经尝试过结果给我所有文件而不是当天的文件调试告诉你什么?当我运行代码时结果给了我文件列表,它包括旧文件,而不仅仅是当天的文件