Fortlaufende Nummern im Namen (Bild)

  • Hallo,
    ich bin neu hier im Forum und habe mich extra für diese Frage angemeldet, eig. bin ich bis jetzt ganz gut alleine zurecht gekommen mit Hilfe des restlichen Internets, jedoch finde ich auf meine Frage/Problem einfach keine wirkliche Antwort/Lösung....


    Und zwar geht es darum dass ich eine Website via Apache auf meinem Raspberry laufen habe und darauf die möglichkeit ein aktuelles Bild anzeigen zulassen...
    Was ich jetzt möchte ist eine Bildergalerie wo alle Bilder reinkommen wenn ich "aktualisieren" drücke um das alte Bild zu aktualisieren.. ("aktuaslisieren" -> akt.php und dann raspistill etc...)


    Was ich nun aber möchte und nicht funktioniert ist, dass wenn ich "aktualisieren" drücke sich ein Bild erstellen soll mit einer fortlaufenden Nummer, d.h. wenn ich nochmal das PHP Dokument über den Button aktiviere dann 002.jpg wenn ich nochmal drücke 003.jpg usw.


    Es gibt ja die möglichkeit per "Enter" Taste eine fortlaufende Serie zu erstellen mit %d
    Dass möchte ich aber nicht, da dass script nicht permanent laufen soll, ich möchte einfach nur eine automatische Vergebung des Namens bei jedem Bild...


    Dass hier funktioniert nicht:

    Code
    sudo raspistill -n -o /var/www/html/intern/libary/%04d.jpg


    Wenn ich dann auf aktualisieren drücke wird lediglich das alte Bild mit "000.jpg" aktualisiert, es wird aber kein neues erstellt welches dann 001.jpg heißt...


    Wie kann ich dies realisieren?

    Edited once, last by Lelant ().

  • Dein Anliegen hat nichts mit der von dir gewählten Kategorie / Bereich (Hardware > Raspberry Pi Camera Module) zu tun, da dein Anliegen nichts mit der Hardware, sondern Software zu tun hat.




    Ich bin mittlerweile kein Freund davon Konsolen Befehle über PHP auszuführen... Daher empfehle ich dir: FAQ => Nützliche Links / Linksammlung => [Python] Webserver, Websocket und ein bisschen AJAX
    Sofern du das auf Python umstellst könntest du nämlich auch das sehr möchte "picamera" Module verwenden.


    Ansonsten musst du dir halt selber eine Routine schreiben: Ermitteln wie viele Bilder bereits vorhanden sind und dann eine entsprechende Variable an exec(); mit dem zutreffenden Dateinamen auswählen.... Also alle *.jpg Dateien in deinem Verzeichnis zählen, plus eins addieren und daraus dann den "neuen Dateinamen" erstellen ;)


    Zum Beispiel:
    [code=php]
    $verzeichnisinhalt = array_slice(scanDir("/var/www/html/intern/libary/"), 2);
    $newfile = sprintf("%03d", count($verzeichnisinhalt)) . ".jpg";
    [/php]


    "$verzeichnisinhalt" ist ein Array mit jeder Datei in dem Verzeichnis. durch "count" erhält man die Anzahl der im Array befindlichen Elemente.


    "sprintf" sorgt dafür das die Zahl mindestens 3 Stellen hat.
    Wenn also zum Beispiel 2 Dateien in dem Verzeichnis sind gibt count($verzeichnisinhalt) eine 2 aus und %03d macht daraus: 002
    Wenn in dem Verzeichnis 30 Dateien sind wird daraus: 030
    Wenn in dem Verzeichnis 123 Dateien sind wird es auch nur 123 ohne führende Null.
    ..Anschließend wird noch ".jpg" angefügt.


    "$newfile" übergibst du dann einfach deinem exec(); Befehl
    [code=php]
    exec("raspistill -n -o /var/www/html/intern/libary/" . $newfile);
    [/php]


    Wie man mit raspistill umgeht weiß ich aber nicht - mag ich nicht :fies: Vielleicht hilft das: https://www.raspberrypi.org/do…an/applications/camera.md



    PS: FAQ => Nützliche Links / Linksammlung => PHP: Anleitung zum schalten von GPIO ... Auch wenn du kein GPIO schalten willst! => Einführung und Grundlagen.
    FAQ => Nützliche Links / Linksammlung => Befehle über PHP mit root Rechten ausführen (sudo webscript)

  • Vielen Dank :) , dass funktioniert eigentlich sehr gut, ich denke ich brauche da nichts mehr zu ändern... Nur eine kleine Modifizierung um das letzte/neuste Bild auf der Website anzeigen zu lassen... (wobei dies nicht diesen Code beeinträchtigen sollte)
    Was hat es denn eigentlich mit dem Parameter "2" auf sich?

    Edited once, last by dbv ().

  • Bitte nicht Beiträge vollständig quoten/zitieren, vor allem wenn diese genau da drüber stehen.



    Google mal nach "array_slice" ... die 2 ist das Offset. Würde man das auf 0 stellen würden vom "scanDir" auch das "." und ".." mit erkannt bzw ins Array eingefügt werden



    "." und ".." sind eher überflüssig die mit drin zu haben da Linux Standard ...
    "." ist das aktuelle Verzeichnis und ".." das Übergeordnete


    Ein Fehler hat obiger Code übrigens: Es addiert nichts.
    Wenn also zB bereits die Dateien 001.jpg , 002.jpg und 003.jpg in dem Verzeichnis sind wird $newfile auf 003.jpg gestellt :fies:



    Ich nutze in meiner stream.php zum Beispiel:
    (Auszug)
    [code=php]
    foreach ($verzeichnisinhalt AS $file) {
    if (isset($ValidFileEndings) AND !empty($ValidFileEndings) AND !is_dir("$PathToFile/$file")) {
    $VALID=0;
    foreach ($ValidFileEndings AS $VFE) {
    if (strstr($file,".$VFE")) { $VALID=1; }
    }
    if ($VALID === 0) { continue; }
    }
    echo "<tr>\n";
    if (is_dir("$PathToFile/$file")) {
    echo "<td>&nbsp;</td>\n";
    echo "<td>&nbsp;<a href='".$_SERVER['PHP_SELF']."?pathtofile=".$PathToFile."/".$file."'>".$file."</a></td>\n";
    } else {
    echo "<td><input id='checkbox-".$c."' type='checkbox' name='FILES[]' value='".$PathToFile."/".$file."'/></td>";
    echo "<td>&nbsp;".$file."</td>\n";
    }
    echo "</tr>\n";
    $c++;
    }
    [/php]Damit stelle ich sicher das nur die Dateien gewertet werden die Valid sind, also von mir erwünscht. Ausserdem unterscheidet er dort zwischen Dateien und Verzeichnissen.


  • Bitte nicht Beiträge vollständig quoten/zitieren, vor allem wenn diese genau da drüber stehen.


    Ein Fehler hat obiger Code übrigens: Es addiert nichts.
    Wenn also zB bereits die Dateien 001.jpg , 002.jpg und 003.jpg in dem Verzeichnis sind wird $newfile auf 003.jpg gestellt :fies:


    Dies hab ich auch schon gemerkt, da es aber lediglich zu einem Zweck verwendet wird (Wettercam, d.h. jeden Tag wird ein Foto geschossen und auf dem apache Webserver in eine Galerie hochgeladen)
    ist es nicht wirklich tragisch.. selbst dass die erste Datei 0000.jpg heißt (Da ja 0 Dateien gezählt werden) ist nicht weiter tragisch..


    Jedenfalls vielen Dank für deine Hilfe, jetzt kann ich mich endlich weiter auf die restliche PHP programmierung und Galerie optionen konzentrieren ;)