Ankündigung

Einklappen
Keine Ankündigung bisher.

Dateien in Verzeichnis umbenennen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Dateien in Verzeichnis umbenennen

    Ich habe eine Flash Galerie die Bilder in einem Verzeichnis nur im format 1.jpg,2.jpg usw annimmt. Ich möchte aber einfach all meine Fotos .jpg hochladen und ein Script soll sie in die richtige form bringen. Nun habe ich mir ein script geschrieben, welches alle dateien im Verzeichnis durchlaufend nummeriert. die funktioniert auch beim ersten durchlauf. bei jedem weiteren wird jeweils eine datei gelöscht. Wo habe ich da einen Denkfehler gemacht ?

    Code:
    <?php
    
    // ordner frühling
    
    $dirname=('fruehling/');
    $handle=opendir ($dirname);
    $zaehler = 1;
    while ( $file = readdir ( $handle ) ) {
    if( $file == "." or $file == "..") {
        }else{
         if ( rename( "$dirname".$file, "$dirname".$zaehler.".jpg" ) ) {
             $zaehler++;
    	   echo "Datei $file nicht gefunden <br>";
             } else {
               echo "Datei $file gefunden <br>";
               }
       }
       
    } closedir( $handle );  
    
    ?>


  • #2
    nachdem da kein unlink oder so steht, kann ich mir das nicht erklären, versuch dir mal die Dateinamen auszugeben ... und schau was dir da so ausgegben wird
    folgendens kommt mir echt total eigenartig/sinnlos vor :
    PHP-Code:
    "$dirname".$file"$dirname".$zaehler.".jpg" 
    warum schreibst du die Variablen in "" obwohl du da keine Strings anhängst ...
    PHP-Code:
    if ( $humans >= ) {
       
    war ();

    Kommentar


    • #3
      script dahingehend geändert

      Code:
      <?php
      
      // ordner sommer
      
      $dirname=('sommer/');
      $handle=opendir ($dirname);
      $zaehler = 1;
      while ( $file = readdir ( $handle ) ) {
      if( $file == "." or $file == "..") {
          }else{
           if ( rename($dirname.$file,$dirname.$zaehler.".jpg" ) ) {
               $zaehler++;
      	   echo "Datei $file nicht gefunden <br>";
               } else {
                 echo "Datei $file gefunden <br>";
                 }
         }
         
      } closedir( $handle );  
      
      ?>
      Beim ersten Durchlauf macht es auch was es soll - verstehe nur nicht warum dieses Script bei geänderten ordnern d.h. schon in der folge nummeriert :
      1.jpg
      2.jpg
      3.jpg
      4.jpg

      beim zweiten durchlauf das erste bild löscht anstatt dann einfach gar nichts zu tun.

      Ich brauche eine Lösung für das Problem, sitze hier und komm nicht drauf

      Ergebnis 2.Durchlauf:

      2.jpg
      3.jpg
      4.jpg
      ->1.jpg weg

      Ergebnis 3.Durchlauf:

      1.jpg
      2.jpg
      3.jpg

      Ergebnis 4.Durchlauf:

      2.jpg
      3.jpg

      Ergebnis 5.Durchlauf

      1.jpg
      2.jpg

      Ergebnis 6. Durchlauf

      2.jpg

      Ergebnis 7.Durchlauf

      1.jpg

      Ergebnis 8.Durchlauf

      Alle Dateien weg

      Kommentar


      • #4
        also wenn das der vollständige code ist, können die dateien gar nicht verschwinden, da eben kein unlink()-Aufrut stattfindet.
        ganz allgemein würde ich das etwas anders machen
        PHP-Code:
        <?php
        $dirname
        ='fruehling/';
        $handle=opendir($dirname);
        $zaehler 1;
        while ( 
        $file readdir $handle ) ) {
            if( 
        $file != "." && $file != "..") {
                if ( 
        rename($dirname.$file$dirname.$zaehler.".jpg" ) ) {
                    
        $zaehler++;
                    echo 
        "Datei $file nicht gefunden <br>";
                } else {
                    echo 
        "Datei $file gefunden <br>";
                }
            }
        }
        closedir$handle );  
        ?>
        mfg Tobby

        Kommentar


        • #5
          Ursache ist dieses:

          pcdinh at phpvietnam dot net
          30-Jul-2009 04:10 For those who are still confused about the behavior of rename() in Linux and Windows (Windows XP) when target destination exists:

          I have tested rename($oldName, $targetName) in PHP 5.3.0 and PHP 5.2.9 on both OS and find that if a file named $targetName does exist before, it will be overwritten with the content of $oldName
          Aus den Kommentaren von PHP.net/rename

          Lösungsansatz:
          file_exist check
          oder
          Dateien vorher einlesen und nur die umbenennen, welche nicht nach deinem Schema benannt sind.

          Kommentar


          • #6
            Zitat von Papst Beitrag anzeigen
            Lösungsansatz:
            file_exist check
            oder
            Dateien vorher einlesen und nur die umbenennen, welche nicht nach deinem Schema benannt sind.
            Ich würde das erste nehmen
            PHP-Code:
            while(file_exists($dirname.$zaehler.".jpg")) {
                
            $zaehler++;

            Kommentar


            • #7
              jetzt versteh ich gar nix mehr, wo muss ich das dann einbauen ?

              Zitat von Tobby Beitrag anzeigen
              Ich würde das erste nehmen
              PHP-Code:
              while(file_exists($dirname.$zaehler.".jpg")) {
                  
              $zaehler++;

              Kommentar


              • #8
                hier:
                PHP-Code:
                <?php
                $dirname
                ='fruehling/';
                $handle=opendir($dirname);
                $zaehler 1;
                while ( 
                $file readdir $handle ) ) {
                    if( 
                $file != "." && $file != "..") {
                        while(
                file_exists($dirname.$zaehler.".jpg")) {
                            
                $zaehler++;
                        }
                        if ( 
                rename($dirname.$file$dirname.$zaehler.".jpg" ) ) {
                            
                $zaehler++;
                            echo 
                "Datei $file nicht gefunden <br>";
                        } else {
                            echo 
                "Datei $file gefunden <br>";
                        }
                    }
                }
                closedir$handle );  
                ?>
                Wenn die Datei dann schon existiert, wird sie nicht ersetzt, sondern der Zähler wird einfach raufgeschraubt.
                Wenn die Dateien von 1-.... nummeriert werden sollen, solltest du aber noch eine abfrage reinbauen, dass die Dateien, die schon im richtigen Format sind nicht umbenannt werden.

                EDIT: etwas so
                PHP-Code:
                if (ereg("#^[0-9]+\.jpg$#"$file)) continue; 

                mfg Tobby

                Kommentar


                • #9
                  jetzt fängt er nicht mehr von 1 an umzubenennen

                  hatte
                  3.jpg
                  schönheit.jpg
                  und f5231.jpg

                  im verzeichnis

                  er machte beim ersten durchlauf

                  1.jpg
                  2.jpg
                  4.jpg

                  und beim zweiten

                  3.jpg
                  5.jpg
                  6.jpg


                  Code:
                  <?php
                  $dirname='fruehling/';
                  $handle=opendir($dirname);
                  $zaehler = 1;
                  while ( $file = readdir ( $handle ) ) {
                      if( $file != "." && $file != "..") {
                          while(file_exists($dirname.$zaehler.".jpg")) {
                              $zaehler++;
                          }
                          if ( rename($dirname.$file, $dirname.$zaehler.".jpg" ) ) {
                              $zaehler++;
                              echo "Datei $file nicht gefunden <br>";
                          } else {
                              echo "Datei $file gefunden <br>";
                          }
                      }
                  }
                  closedir( $handle );  
                  ?>
                  Ich blick da grad gar nicht mehr durch

                  Kommentar


                  • #10
                    Hier stellt sich mir unweigerlich die Frage was es bringt, bei jedem Scriptaufruf alle Dateien neu zu benennen.
                    Wenn die meisten (ausser die neuen) ja schon nach dem entsprechendem Prinzip benannt sind.

                    Kommentar


                    • #11
                      Zitat von Papst Beitrag anzeigen
                      Hier stellt sich mir unweigerlich die Frage was es bringt, bei jedem Scriptaufruf alle Dateien neu zu benennen.
                      Wenn die meisten (ausser die neuen) ja schon nach dem entsprechendem Prinzip benannt sind.
                      Ich habe ja oben schon durch einen Edit meine verbesserung gepostet (vor euren beiden Posts)
                      Hier nochmal zum mitschreiben:
                      PHP-Code:
                      if (ereg("#^[0-9]+\.jpg$#"$file)) continue; 
                      Das heißt, wenn die aktuelle Datei schon das richtige Format hat, wird sie einfach übersprungen.

                      mfg Tobby

                      Kommentar


                      • #12
                        Zitat von Papst Beitrag anzeigen
                        Hier stellt sich mir unweigerlich die Frage was es bringt, bei jedem Scriptaufruf alle Dateien neu zu benennen.
                        Wenn die meisten (ausser die neuen) ja schon nach dem entsprechendem Prinzip benannt sind.
                        Wenn ich einen plan hätte wie ich auffüllen muss, wäre das ja kein problem.

                        Ich dacht nur ich lass das script dann per cron eben jede nacht durchlaufen

                        Kommentar


                        • #13
                          vom Prinzip ganz einfach...

                          lies dein Verzeichnis ein, speicher dir die Dateien, welche nicht nach dem Schema benannt sind in ein Array und speicher dir die freien Zahlen in ein Array.

                          Jetzt durchläufst du das Array mit den "falsch" benannten Dateien und bennennst sie entweder nach einer freien Nummer oder ++maximale Nummer.

                          Kommentar


                          • #14
                            also, da mir ja anscheinend keine zuhört hir nochmal das Script mit Verbesserung im ganzen:
                            PHP-Code:
                            <?php
                            $dirname
                            ='fruehling/';
                            $handle=opendir($dirname);
                            $zaehler 1;
                            while ( 
                            $file readdir $handle ) ) {
                                if (
                            ereg("#^[0-9]+\.jpg$#"$file)) continue;  
                                if( 
                            $file != "." && $file != "..") {
                                    while(
                            file_exists($dirname.$zaehler.".jpg")) {
                                        
                            $zaehler++;
                                    }
                                    if ( 
                            rename($dirname.$file$dirname.$zaehler.".jpg" ) ) {
                                        
                            $zaehler++;
                                        echo 
                            "Datei $file nicht gefunden <br>";
                                    } else {
                                        echo 
                            "Datei $file gefunden <br>";
                                    }
                                }
                            }
                            closedir$handle );  
                            ?>

                            Kommentar


                            • #15
                              Du stellst mich vor eine fast unlösbare aufgabe

                              Ich hatte schon 3 Tage zu tun um rauszufinden wie ich die .txt für die Galerie per PHP als UTF8 mit Sonderzeichen generiere.
                              Dann hab ich mir die PHP Hilfe durchgelesen und kam zum Schluss mein erster versuch wäre ja nicht so schlecht. bis ich ihn halt zum zweiten mal ausführte

                              Kommentar

                              Lädt...
                              X