Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    654

    Rinominare più file con la funzione rename

    Nella cartella "file" ho una serie di file da rinominare tutti come in questo esempio:
    "12_03_08 - file.txt" sarà tramutato in "2008_03_12 - file.txt"
    La variabile $stringa contiene alla fine il nome del file cambiato, ed è esatta. Il problema sta invece nella funzione rename(): per qualche motivo che non capisco, mi rinomina il file più di una volta, ovvero reitera il procedimento per quattro volte invece di una sola (con il risultato che il file risulta rinominato in modo sbagliato).
    Ho provato a commentare la funzione rename() e a stampare $stringa, e non ho avuto nessun problema: mi mostra i file rinominati una sola volta.

    Cosa sbaglio nella funzione rename()?

    Codice PHP:
    if ($handle opendir('file')) {

       
    //Parte da aggiungere all'anno se lo si desidera a 4 cifre. Se si desidera mantenerlo com'è all'origine, lasciarlo vuoto, ovvero ""
       
    $esteso="20";
       
       while (
    false != ($file readdir($handle))) {

           if(!
    is_dir($file)){
               
    $stringa="";
               
    $parti=substr($file,8);
               
    $parti2=substr($file,0,8);
               
               
    $data=explode("_",$parti2);
               
    $stringa.=$esteso.$data[2]."_".$data[1]."_".$data[0];
               
               
    $stringa.=$parti;
               
    rename("file/$file""file/$stringa");
               echo 
    $file." <span class=\"testo10px\">rinominato in</span> ".$stringa."
    "
    ;
          }
       }

       
    closedir($handle);


  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Più semplicemente io farei così

    codice:
    $files = glob('./file/*.*');
    foreach($files as $file) {
      $name = basename($file);
      $parts = explode('-',$name);
      $pref = trim($parts[0]);
      rename($file,'./file/'.'20'.preg_replace('#(\d{2})_(\d{2})_(\d{2})#','\3_\2_\1',$pref).' -'.$parts[1]);
    }
    edit. Ho provato il tuo codice ma non riscontro il problema di cui parli. Sicuro che l'errore non sia altrove?

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    654
    L'errore dovrebbe essere nel rename, perchè non mi si presenta se lo commento...
    Comunque la tua versione di codice funziona a meraviglia, penso che la userò e la adatterò
    grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.