Fehlermeldung seit Umstellung auf PHP5.6
$filepath, /// str(path:local)
WebCam Bilder nach Uhrzeit
Einklappen
X
-
Vielen Dank an fireweasel
Das Problem hat mich schon viele Stunden beschäftigt.
Hab den Code auf meiner Synology eingefügt und hat auf Anhieb funktioniert.
Nochmals ein großes Lob an Dich fireweasel.
Gruß
Hary
Einen Kommentar schreiben:
-
Zitat von Hary Beitrag anzeigenHallo, bräuchte Hilfe.
WebCam Bilder sind auf externer Festplatte gespeichert,Abfrage über Filemtime.
Möchte jetzt alle Bilder (ca.1000Stk.Zeitraum ca.1Monat) die zwischen 22:00Uhr bis 05:00Uhr morgens gespeichert wurden von Ordner1 in Ordner2 kopieren. Bekomme es einfach nicht hin, wer kann helfen.
Wollte ein vorgegebenes Script von Nico umstricken.
Gehen wir die Aufgabe mal Schritt für Schritt an: Zuerst brauchen wir eine Funktion, die schaut, ob eine Datei im gewünschten Zeitfenster verändert wurde.
PHP-Code:/// check if given filesystem entry got modificated (in) between $min_hour and $max_hour
/// return bool() success
function within_mtime_hours(
$filepath, /// str(path:local)
$min_hour = 22, /// int(0...23)
$max_hour = 5 /// int(0...23)
) {
$mtime_hour = idate('H', filemtime($filepath));
return $mtime_hour >= $min_hour || $mtime_hour <= $max_hour;
}
PHP-Code:/// copy source file to destination directory path
/// return bool() success
function copy_file(
$src_filepath, /// str(path:local) path to source file
$dst_dirpath = null, /// str(path:local) path to destination directory
$move = false /// bool() whether to move (copy + delete src file) or copy only
) {
if (!is_dir($dst_dirpath) || !is_file($src_filepath)) {
throw new InvalidArgumentException();
}
$dst_filepath = $dst_dirpath . DIRECTORY_SEPARATOR . basename($src_filepath);
if (true === $move) {
return rename($src_filepath, $dst_filepath);
}
if (!copy($src_filepath, $dst_filepath)) {
return false;
}
// restore mtime of source file
touch($dst_filepath, filemtime($src_filepath));
return true;
}
PHP-Code:/// return int(0...) number of processed files | null() if directory scanning failed
function filter_and_process_files_in_dir(
$dirpath, /// str(path:local) path to directory
Callable $filter,
Callable $process
) {
$pwd = getcwd();
if (!chdir($dirpath)) {
return null;
}
if (!is_resource($dir = opendir($dirpath))) {
return null;
}
for ($processed = 0; is_string($entry = readdir($dir)); ) {
if (is_dir($entry)) {
continue;
}
// only files here
if ($filter(realpath($entry))) {
if ($process(realpath($entry))) {
++$processed;
}
}
}
closedir($dir);
chdir($pwd);
return $processed;
}
PHP-Code:$src_dirpath = 'path_to_source_dir'; // Ausgangsverzeichnis; anpassen!
$my_copy_func = function ($src_filepath) {
return copy_file(
$src_filepath,
'path_to_destination_dir', // Zielverzeichnis; anpassen!
false // false: kopieren; true: verschieben
);
};
$num_files_processed = filter_and_process_files_in_dir(
$src_dirpath,
'within_mtime_hours',
$my_copy_func
);
var_dump($num_files_processed);
// INTEGER >= 0 wenn alles gut lief
// oder NULL, wenn Verzeichnis nicht eingelesen werden konnte
Einen Kommentar schreiben:
-
Ich sehe da kein rename() um die Datei zu verschieben. Und wo genau versuchst du die Stunde zu ermitteln? Das geht ja mit date(). Wo ist die Abfrage nach "zwischen 22 und 5 Uhr"?
Einen Kommentar schreiben:
-
WebCam Bilder nach Uhrzeit
echo "Fertig";
$folder->close();
exit;Zuletzt geändert von Hary; 13.11.2016, 09:07.Stichworte: -
Einen Kommentar schreiben: