Dateibehandlung mit PHP

Hallo Forum,

habe folgendes Problem:
meine Webcam zeichnet „Alarmbilder“ auf, welche aber immer in das selbe Verzeichnis abgelegt werden. Jetzt möchte ich einmal täglich diese Bilder in ein Unterverzeichnis „Datum“ verschieben.
Verzeichnis anlegen habe ich schon erledigt, aber der Befehl zum Verschieben fehlt mir noch.
Wäre über jede Anregung dankbar!

Oder kennt jemand ein fertiges Programm, womit man sowas automatisch erledigen kann?

Immer wieder gerne benutzt: Dos-Befehle. Die kann man prima mit „geplanten Tasks“ (auch ohne IPS) verwenden.

move /?
Verschiebt Dateien und benennt Dateien und Verzeichnisse um.

Um eine oder mehrere Dateien zu verschieben:
MOVE [/Y| /-Y] [Laufwerk:][Pfad]Datei1[,…] Ziel

Um ein Verzeichnis umzubenennen:
MOVE [/Y| /-Y] [Laufwerk:][Pfad]Verz1 Verz2

[Laufwerk:][Pfad]Datei1 Bezeichnet den Pfad und den Namen der zu verschiebenden Datei(en).
Ziel Bezeichnet den Zielort für die Datei. Das Ziel kann ein Laufwerkbuchstabe mit Doppelpunkt, ein Verzeichnisname oder eine Kombination beider sein.
Wenn Sie nur eine einzelne Datei verschieben, können Sie auch einen Dateinamen angeben, um die Datei beim Verschieben umzubenennen.
[Laufwerk:][Pfad]Verz1 Bezeichnet das umzubenennende Verzeichnis.
Verz2 Bezeichnet den neuen Namen des Verzeichnisses.
/Y Unterdrückt die Bestätigungsaufforderung zum Überschreiben bestehender Zieldateien.
/-Y Fordert vor dem Überschreiben bestehender
Zieldateien zur Bestätigung auf.
Die Option /Y ist in der COPYCMD-Umgebungsvariablen eventuell voreingestellt. Dies kann durch die Option /-Y außer Kraft gesetzt werden. Standardmäßig müssen Sie das Überschreiben von Dateien bestätigen, es sei denn der MOVE-Befehl wird von einem Batchprogramm aus aufgerufen.

Danke für den Tip.

Jetzt habe ich aber das Problem, das ich die Dateien sortiert nach Datum in die Unterorner einsortieren will. (z.B. 16_09_06.jpg soll in den Ordner 16_09_2006; 17_09_06.jpg soll in den Ordner17_09_2006 usw.)

Hat da noch jemand eine Idee?

Wenn du die Dateibehandlung mit PHP machen möchtest, kannst du dafür den rename Befehl nehmen. Der eignet sich sehr gut um Dateien zu verschieben.

Du könntest zum Beispiel jeden Tag folgendes Script laufen lassen, der das Verzeichniss mit „date“ im Namen erzeugt und dann die Bilder mit „rename“ verschiebt.


<?php
$today = date("d_m_Y");
$todaysDir = "./".$today;
$todaysFile = $today.".jpg";

if (mkdir($todaysDir)) {
    rename("./".todaysFile, $todaysDir."/".$todaysFile );
}
?> 

Mein Problem war ja folgendes:

Meine Webcam nimmt immer dann ein Bild auf, wenn Bewegung drin ist. Dieses Bild wird dann im Verzeichnis …/Alarm/Bild abgespeichert. Nun häufen sich ja im laufe der Zeit einige Dateien an. Diese manuell zu sortieren war mir zu blöd.

Hier die Lösung, vielleicht nicht ganz elegant, aber funktioniert:

$Dateien_im_Verzeichnis = scandir ("l:/webcam/alarm/bild/"); //liest alle Dateien aus dem Verzeichnis in ein Array
$AnzahlDateien = count($Dateien_im_Verzeichnis); // ermittelt die Anzahl der gelesenen Dateien
for ($DateiNr =2;$DateiNr < $AnzahlDateien; $DateiNr++ ) // Schleife um jede Datei zu behandeln
{                                                        // beginnt bei Array ID 2, ID [0]=". / ID [1]=".." / / ID [2]="1. Datei"
$Dateiname = $Dateien_im_Verzeichnis[$DateiNr];           // liest den Dateinamen aus
$Dateiname_ohne_Dateiendung= basename ($Dateiname,".jpg");   // entfernt ".jpg" aus dem Dateinamen
$Dateiname_aufgeloest = explode("_", $Dateiname_ohne_Dateiendung); // löst den Dateinamen auf, Trennzeichen ist "_"
$Datum = $Dateiname_aufgeloest[1];                   // ermittelt das Datum aus dem aufgelösten Dateinamenarray
$Dateizeit = $Dateiname_aufgeloest[2];                    // ermittelt die Zeit aus dem aufgelösten Dateinamenarray
$Dateizeit_aufgeloest = explode("-", $Dateizeit);                       // löst den Zeiteintrag des Dateimamens auf
$Stunde = $Dateizeit_aufgeloest[0];                                     // ermittelt den Stundenwert aus dem Zeiteintrag
echo $Datum;
if (mkdir("l:/webcam/alarm/archiv/$Datum"));
{
 mkdir("l:/webcam/alarm/archiv/$Datum/$Stunde");
}
rename("l:/webcam/alarm/bild/$Dateiname/", "l:/webcam/alarm/archiv/$Datum/$Stunde/$Dateiname");

//copy ("D:/webcam/alarm/bild/$Datei" , "D:/webcam/alarm/archiv/$Dateidatum/$Datei");
}

zur Erklärung:

die Bilddateien heißen immer z.B. Alarm_2006-09-17_17-45-34.jpg (Alarmbild vom 17.09.2006 um 17:45 und 34 Sekunden) und liegen im Verzeichnis …/Alarm/Bild
Die Bilder werden in das Verzeichnis …/Alarm/Archiv/„Datum“/„Stunde vom Datum“ verschoben.

Habe prinzipiell das gleiche Problem,

eine Webcam speichert sehr unregelmäßig Dateien in ein Verzeichnis. Das Verzeichnis ist z.B. auf 100 MB begrenzt, werden diese überschritten wird einfach die älteste Datei überschrieben.

Was ich jetzt bräuchte wäre eine einfache PHP Funktion die mir als Ergebnis den neuesten Filenamen in diesem Directory als String zurückgibt.

Gibt es soetwas :confused: oder hat jemand eine Idee für ein einfaches Script ?

Grüße, Andreas