2016-04-27 2 views
1
herunterladen

Ich habe diesen Code, der täglich um 12 Uhr ausgeführt wird. Es kann derzeit nur verwendet werden, um die letzte Datei auf dem Server mit ftp_mdtm (geänderte Zeit) zu erfassen. Das Problem, mit dem ich konfrontiert bin, ist, dass der Server manchmal mehr als eine Datei auf den Server hochlädt. Wie kann ich die neuesten Dateien für diesen Tag herunterladen? Ich verwende derzeit ftp_get.Wie kann ich mehr als 1 Datei mit ftp_get in PHP

<?php 

$conn = ftp_connect('abc.com'); 
ftp_login($conn, 'lalala', '12345'); 

// get list of files on given path 
$files = ftp_nlist($conn, ''); 

$mostRecent = array(
    'time' => 0, 
    'file' => null 
); 

foreach ($files as $file) { 
    // get the last modified time for the file 
    $time = ftp_mdtm($conn, $file); 

    if ($time > $mostRecent['time']) { 
     // this file is the most recent so far 
     $mostRecent['time'] = $time; 
     $mostRecent['file'] = $file; 
    } 
} 

ftp_get($conn, "$file.zip", $mostRecent['file'], FTP_BINARY); 
ftp_close($conn); 

$file_open= $file . ".zip"; 
$path = "./zip/"; 

$zip = new ZipArchive; 
$res = $zip->open($file_open); 
if ($res === true) { 
    // extract it to the path we determined above 
    $zip->extractTo($path); 
    $zip->close(); 
    //echo "$file_open extracted to $path"; 
} else { 
    //echo "I couldn't open $file_open"; 
} 

$servername = "localhost";  //server IP or name 
$uname = "lalala";    //username 
$pword = "";     //password 
$dbname = "lalala";   //database name 

$db = new mysqli($servername, $uname, $pword, $dbname); 
// Check connection 
if ($db->connect_error) { 
    die("Connection failed: " . $db->connect_error); 
} 

//print_r (glob("test/*.txt")); 
//exit(); 

foreach (glob($path . "/*.TXT") as $file) { 
    $file_handle = fopen($file, "r"); 
    while (!feof($file_handle)) { 
     $line = fgets($file_handle); 
     $new_file = substr($file, 7); 
     //echo $line; 

     $query_check = "SELECT filename FROM fos_data WHERE filename = '$new_file'"; 
     $result=mysqli_query($db,$query_check); 
     $row = mysqli_fetch_assoc($result); 
     $exist = $row['filename'] . "<br>"; 
     $rowcount=mysqli_num_rows($result); 

     if ($rowcount > 0) { 
      $update = " UPDATE fos_data 
         SET  value  = '$line' 
         WHERE filename = '$new_file'"; 
      $result=mysqli_query($db,$update); 
      echo "Data " . $new_file . " Updated <br>"; 
     } 
     else{ 
      $insert = "INSERT INTO fos_data 
          (filename, 
           value) 
          VALUES 
          ('$new_file', 
           '$line')"; 
      $result=mysqli_query($db,$insert); 
      echo "Data " . $new_file . " Saved <br>"; 
     } 

     /**/ 
    } 
    fclose($file_handle); 

} 

mysqli_close($db); 

?> 

Antwort

0

Nun, ich es von @Dagon mit einigen Anpassungen zu lösen verwalten hinzufügen 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; 

}

dann Schleife das Array mehrere Daten für diesen Tag ftp_get

mit bekommen
$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); 
    } 
0

könnten Sie die date function verwenden und vergleichen Sie das mit $time

Wenn Sie ein Array erstellen, mit dem Namen etwas wie $todaysModifiedFiles, und dann könnte man das $mostRecent Objekt auf schieben, wenn sie seit 12 geändert worden ist: 00 Uhr, wenn Sie die geänderte Zeit überprüfen, indem Sie sie jetzt mit der Zeit vergleichen.

Dann durchlaufen Sie das Array für jeden Ihrer folgenden Prozesse im Skript.

+0

Dank für respond werde ich es versuchen zuerst –

0
$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 haben alle Dateien weniger als 24 Stunden alt, Schleife, die, zum Download oder einfach den Download innerhalb der if() Klausel

+0

Dank für reagiere ich es –

+0

zuerst versuchen, werde ich versuchen, bereits das Ergebnis geben Sie mir die ganze Datei statt diesem Tag Dateien –

+0

und was macht das Debuggen sagen Sie? –

Verwandte Themen