Rolf B: Songs neu nummerieren (php) / Lösungsansatz zur Diskussion

Beitrag lesen

Hallo Jörg,

Gibts daran etwas auszusetzen?

Eine Menge. Aber wenig von Bedeutung. Kritteln kann man viel, muss man aber nicht. Ich krittele einfach mal was ich nur kann, und was Du davon nicht haben willst, schmeiß einfach weg.

  • wähle die Schreibweise deiner Variablen konsistent.

    • underscored: mp3_files
    • camel case : mp3Files
    • pascal case: Mp3Files

    $Song passt da nicht rein. Namen mit Großbuchstaben vorne sind für Klassen gedacht. Schau Dir mal die PSRs an.

    $mp3Files_newNames ist ein Mix aus Underscore und camelCase, sieht aber irgendwie trotzdem "richtig" aus. Tjaaa. Stures Festhalten an Regeln ist auch nicht immer richtig 😉

  • Andererseits - warum gibt's dieses Array überhaupt? Du verwendest die Namen doch später gar nicht mehr. Dann kann's auch eine Variable $newName sein, die pro Durchlauf wiederverwendet wird.

  • Typangaben vor Variablen - machte man mal, ist eher nicht mehr erwünscht. $arr_song möchte vermutlich lieber $nameParts oder ähnlich heißen.

  • wenn Du sprintf nutzt, dann auch konsequent:

$mp3Files_newName[$i] = sprintf("%04d", $i+1)." ".$arr_song[1];

// vs 

$mp3Files_newName[$i] = sprintf("%04d %s", $i+1, $arr_song[1]);
  • Mach deinen Code robuster. Ein Dateiname wie "007Goldeneye.mp3" schießt dich ab. Du solltest prüfen, ob ein Space da ist, bzw. die Länge von $arr_song $nameParts größer als 1 ist. Ist sie 1, war kein Space drin und Du kannst keine Altnummer entfernen. Nimm dann den kompletten alten Namen.

  • Es ist nicht gut, $mp3Files[$i] als Renamequelle zu nutzen. Du machst eine foreach-Schleife, der Schleifenwert steht in $Song, dann solltest Du den auch verwenden. Dass $Song und $mp3Files[$i] identisch sind, ist eine möglicherweise richtige Annahme, aber wenn dein drei Monate älteres Ich diesen Code vorfindet und sieht, dass Du mal $Song und mal $mp3Files[$i] verwendest, wird es sich fragen: Wieso zum grundgütigen Geier nahm ich erst dies und dann das? Gab's da einen Grund für?!?!?! Und dann wirst Du Dich verfluchen 😉

Ich hätt's vermutlich so geschrieben:

$i = 1;
$mp3Files = glob("[0-9][0-9][0-9]*.mp3");
if ($mp3Files !== FALSE) {
  foreach ($mp3Files AS $songName) {
    $nameParts = explode(" ", $songName, 2);
    $cleanName = count($nameParts) > 1 ? $nameParts[1] : $songName;
    $newName = sprintf("%04d %s", $i++, $cleanName);
    if (file_exists($newName)) {
      echo "Rename von $songName in $newName nicht möglich. Datei existiert schon.\n";
    }
    else {
      if (!rename($songName, $newName)) {
        echo "Rename von $songName in $newName gescheitert.\n";
      }
    }
  }
}
echo "feddisch...!";

Edit: Dedlfixens Robustheitshinweise beachtet. Und vor allem file_exists abgefragt, sonst killt rename die Zieldatei kommentarlos.

Rolf

--
sumpsi - posui - obstruxi