2010-08-03 6 views
1

Je suis nouveau à php. avoir une tâche de ftp seulement des fichiers d'aujourd'hui du serveur contenant des fichiers pendant plus d'une semaine. comment puis-je sélectionner ou filtrer les fichiers en fonction de la date et ftp dans mon dossier local. L'aide est très appréciée !!ftping seulement les fichiers d'aujourd'hui seulement

Soloman

Répondre

0

Si vous avez déjà les noms de fichiers pour vérifier, utiliser filemtime

Renvoie le temps le fichier a été modifié pour la dernière, en cas d'échec. L'heure est renvoyée sous la forme d'un horodatage Unix, qui convient à la fonction date().

Pour comparer aujourd'hui, vous pouvez utiliser date('Y-m-d') pour obtenir aujourd'hui comparer à date('Y-m-d', filemtime($filename))

Pour obtenir les noms de fichiers, vous pouvez utiliser readdir pour lire chacun à son tour.

<?php 
if ($handle = opendir('/path/to/files')) { 
    echo "Directory handle: $handle\n"; 
    echo "Files:\n"; 

    while (false !== ($filename = readdir($handle))) { 
     echo "$filename\n"; 
    } 

    closedir($handle); 
} 
?> 

Le manuel a également un FTP example qui devrait vous montrer comment ftp le fichier une fois trouvé.

Ainsi, en combinant tout cela, vous pourriez obtenir quelque chose comme:

<?php 
    // set up basic connection 
    $conn_id = ftp_connect($ftp_server); 

    // login with username and password 
    $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 

    // check connection 
    if ((!$conn_id) || (!$login_result)) { 
     echo "FTP connection has failed!"; 
     echo "Attempted to connect to $ftp_server for user $ftp_user_name"; 
     exit; 
    } else { 
     echo "Connected to $ftp_server, for user $ftp_user_name"; 
    } 

    if ($handle = opendir('/path/to/files')) { 

    while (false !== ($filename = readdir($handle))) { 
     if (date('Y-m-d') == date('Y-m-d', filemtime($filename))) { 
     // upload the file 
     $upload = ftp_put($conn_id, $destination_file, $filename, FTP_BINARY); 

     // check upload status 
     if (!$upload) { 
      echo "FTP upload has failed!"; 
     } else { 
      echo "Uploaded $source_file to $ftp_server as $destination_file"; 
     } 
     } 
    } 

    closedir($handle); 

    // close the FTP stream 
    ftp_close($conn_id); 
?> 

Bien sûr, vous devrez remplir les valeurs fictives, selon le cas.

Clause de non-responsabilité: J'ai tapé ceci dans le bloc-notes ++ et il n'a pas été testé pour des erreurs!

+0

Je pense que j'ai mal interprété votre question. Si oui, voir la réponse de haim. http://stackoverflow.com/questions/3396685/ftping-only-todays-files-only/3396742#3396742 –

0

lien: http://www.php.net/manual/en/function.ftp-rawlist.php

vous connecter au serveur, obtenir la liste des fichiers avec ftp_rawlist()

et obtenir le fichier que vous voulez via ftp_fget()

exemple

<?php 

// set up basic connection 
$conn_id = ftp_connect($ftp_server); 

// login with username and password 
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 

// get the file list for/
$rawfiles = ftp_rawlist($conn_id, '/'); 

foreach ($rawfiles as $rawfile) { 
# parse the raw data to array 
if(!empty($rawfile)) { 
    $info = preg_split("/[\s]+/", $rawfile, 9);  
    $arraypointer[] = array(
     'text' => $info[8], 
     'isDir' => $info[0]{0} == 'd', 
     'size' => byteconvert($info[4]), 
     'chmod' => chmodnum($info[0]), 
     'date' => strtotime($info[6] . ' ' . $info[5] . ' ' . $info[7]), 
     'raw' => $info 
     // the 'children' attribut is automatically added if the folder contains at least one file 
    ); 
// pseudo code check the date 
if($arraypointer['date'] is today) 
    ftp_fget(file); 
} 

// close the connection 
ftp_close($conn_id); 

// output the buffer 
var_dump($buff); 
?>