php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 10-03-2015, 19:47
Hary
 Registrierter Benutzer
Links : Onlinestatus : Hary ist offline
Registriert seit: Mar 2015
Beiträge: 3
Hary befindet sich auf einem aufstrebenden Ast
Standard WebCam Bilder nach Uhrzeit

echo "Fertig";
$folder->close();
exit;

Geändert von Hary (13-11-2016 um 10:07 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 11-03-2015, 17:05
chorn
 Registrierter Benutzer
Links : Onlinestatus : chorn ist offline
Registriert seit: Nov 2011
Beiträge: 132
chorn befindet sich auf einem aufstrebenden Ast
Standard

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"?
Mit Zitat antworten
  #3 (permalink)  
Alt 13-03-2015, 12:51
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

Zitat:
Zitat von Hary Beitrag anzeigen
Hallo, 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.
Ich weiß nicht, wer Nico ist. Sein Script taugt jedenfalls nicht für deine Aufgabenstellung. Es löscht Dateien und kopiert sie nicht.

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;

Dann möchtest du diese Datei kopieren. Mein Vorposter hat schon angedeutet, dass es mehrere Arten des Kopierens gibt: Mit rename() verschiebst du eine Datei. Mit copy() erzeugst du eine weitere Datei in einem anderen Verzeichnis. Das ist vor allem fürs Testen wichtig, denn die Original-Datei bleibt dabei unverändert. Wir bauen uns deshalb eine Kopierfunktion, die beides kann.

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_filepathfilemtime($src_filepath));
    return 
true;

Jetzt müssen das gewünschte Verzeichnis einlesen, dort die passenden Dateien finden und kopieren. Da du mit Verzeichnis- und CallbackFilter-Iteratoren vermutlich wenig am Hut hast, bleiben wir beim herkömmlichen opendir()-readdir()-closedir(). Für jede Datei im Verzeichnis, die readdir() liefert, schaut $filter(), ob sie ins gewünschte Muster passt, und $process() verarbeitet sie dann.

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 0is_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;

Jetzt können wir filter_and_process_files_in_dir() das Ausgangsverzeichnis, unsere Zeit-Rahmen-Prüffunktion und eine (modifizierte) Kopierfunktion übergeben:

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 
Anmerkung zu filemtime(): Eigentlich wolltest du die Dateien an Hand der "creation time" auswählen. Mit PHP-Bordmitteln kann man diese aber nicht verlässlich auslesen. Deswegen habe ich filemtime() benutzt. Das funktioniert, wenn die Dateien nach der Erstellung nicht mehr verändert wurden. Du solltest aber einen Probelauf machen (Kopieren, nicht Verschieben).

Geändert von fireweasel (13-03-2015 um 12:54 Uhr) Grund: typo
Mit Zitat antworten
  #4 (permalink)  
Alt 14-03-2015, 11:27
Hary
 Registrierter Benutzer
Links : Onlinestatus : Hary ist offline
Registriert seit: Mar 2015
Beiträge: 3
Hary befindet sich auf einem aufstrebenden Ast
Standard 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
Mit Zitat antworten
  #5 (permalink)  
Alt 30-10-2016, 14:26
Hary
 Registrierter Benutzer
Links : Onlinestatus : Hary ist offline
Registriert seit: Mar 2015
Beiträge: 3
Hary befindet sich auf einem aufstrebenden Ast
Standard Fehlermeldung seit Umstellung auf PHP5.6

$filepath, /// str(path:local)

Geändert von Hary (13-11-2016 um 10:08 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Nutzerregeln nach Wochentag und Uhrzeit Ghostrider28 SQL / Datenbanken 1 08-08-2014 14:21
Wamp Uhrzeit geht 2 Stunden nach kaleev Fragen zu Installation & Konfiguration (LAMP, WAMP & Co.) 5 20-10-2009 13:54
Nach Datum und Uhrzeit auslesen RobertRitschel SQL / Datenbanken 4 20-06-2005 03:32
array nach uhrzeit sortieren??? webINspirit SQL / Datenbanken 4 29-11-2003 20:59
Zerstückelte Bilder nach fread() danielseidl PHP Developer Forum 2 30-10-2003 22:32

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 07:53 Uhr.