PHP höchsten Dateinamen in Verzeichnis auslesen

Pfandfinder

Lieutenant
Registriert
Nov. 2020
Beiträge
621
ich lade immer in ein Verzeichnis Fotos, Videos und Dateien mit aufsteigender ID hoch (1.jpg, 2.jpg, 3.zip, 4.mp4, ...). Mit PHP möchte ich jetzt angezeigt bekommen, was die neueste ID ist bzw. wie ich halt das neue Foto / Video / Datei nennen muss. wie kann ich das machen ? die neuste Datei vom Datei her lieber nicht , vielleicht ändere ich manche Fotos mal.
 
  • Gefällt mir
Reaktionen: Drexel
Dateinamen listen, ggf. Endung entfernen, sortieren und dann den ersten oder letzten Eintrag nehmen, je nachdem ob du absteigend oder aufsteigend sortiert hast.

Das ist jetzt allgemein, ich nutze PHP nicht.
 
Ja wat denn nu? Die neuste ID ist dann auch zeitgleich die höchste?
Kann man hier auf Metadaten wie Zeitstempel gehen? Möchtest du lieber die Filenamen haben? Es gibt viele Wege, für einen musst du dich entscheiden.
 
  • Gefällt mir
Reaktionen: Pfandfinder
Alternativ einfach keine fortlaufenden Dateinamen nehmen, sondern z.B. UUIDs. Aber kommt halt auf den konkreten Anwendungsfall an.
 
$files muss ein Array mit SplFileInfo Objekten sein... das hier hatte ich mal irgendwann geschrieben, schau dir das Prinzip an. Keine Garantie :-)
PHP:
       usort($files, function (SplFileInfo $a, SplFileInfo $b) {
            // normalize filenames for sorting
            $a = new SplFileInfo($a->getRealPath());
            $b = new SplFileInfo($b->getRealPath());
          
        
            // if path is equal, compare filenames
            if ($a->getPath() === $b->getPath()) {
                return strnatcmp($a->getBasename(), $b->getBasename());
            }

            // sort by path
            $aParts = explode(DIRECTORY_SEPARATOR, $a);
            $bParts = explode(DIRECTORY_SEPARATOR, $b);
            foreach ($aParts as $index => $part) {
                if(!isset($bParts[$index])) {
                    break;
                }
              
                if ($aParts[$index] !== $bParts[$index]) {
                    return strnatcmp($aParts[$index], $bParts[$index]);
                }
            }
          
            $aCount = count($aParts);
            $bCount = count($bParts);
            // count is not equal, but parts are, so return shortest path
            if ($aCount != $bCount) {
                return $aCount - $bCount;
            }

            // compare full path if nothing else matched
            return strnatcmp($a, $b);
        });
 
  • Gefällt mir
Reaktionen: Pfandfinder
Pfandfinder schrieb:
die neueste ID ist bzw. wie ich halt das neue Foto / Video / Datei nennen muss. wie kann ich das machen ? die neuste Datei vom Datei her lieber nicht , vielleicht ändere ich manche Fotos mal
Vielleicht so?
PHP:
<?php

 function get_highest_numbered_file($dir)
{
 $Names = [];
 if (is_dir($dir)) {
     if ($dh = opendir($dir)) {
         while (($file = readdir($dh)) !== false) {
             if (preg_match("/^\d+/", $file))
                 $Names[] = $file;
         }
         closedir($dh);
     }
 }
 rsort($Names, SORT_NUMERIC);
 return sizeof($Names) > 0 ? $Names[0] : false;
}

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

$dir  = 'C:/Users/Pfandfinder/Pictures';
echo get_highest_numbered_file($dir);

?>
Das setzt natürlich voraus, dass die Dateinamen wirklich mit einer Zahl anfangen - ansonsten müßte man die Sortierfunktion ändern (user defined, usrt)

EDIT: nach dem wertvollen Hinweis von @tollertyp vereinfacht sich die ganze Geschichte noch etwas!
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Pfandfinder
@blöderidiot: Es setzt glaube ich aber vor allem voraus, dass die Dateien die gleiche Erweiterung haben. Aber warum sollte man auch den Text lesen

Pfandfinder schrieb:
ich lade immer in ein Verzeichnis Fotos, Videos und Dateien mit aufsteigender ID hoch (1.jpg, 2.jpg, 3.zip, 4.mp4, ...).

Klar, man kann das Script anpassen.
 
  • Gefällt mir
Reaktionen: blöderidiot
tollertyp schrieb:
@blöderidiot: Es setzt glaube ich aber vor allem voraus, dass die Dateien die gleiche Erweiterung haben. Aber warum sollte man auch den Text lesen
OOPS, tatsächlich. Vielleicht dann beim nächsten mal gleich komplett lesen.
 
  • Gefällt mir
Reaktionen: tollertyp
Ja, steht bestimmt in irgendeiner Erwerbsregel, dass man das machen sollte ;-)
 
Zurück
Oben