Fotos automatisch übertragen

  • Ich hoffe ich schreibe hier jetzt nicht ins Falsche Form.


    Mein Traum wäre: CFKarte in Kartenleser stecken und der qnap kopiert automatisch die Bilddateien mit CR2 Endung in mein Bilderarbeitsverzeichnis


    Ideen Ansatz:


    Ein programm welches per Crojob prüft ob einer Speicherkarte reingesteckt ist und ob CR2 Dateien zur Verfügung stehen meinetwegen im 5 Min tackt.


    /share/USBDisk4/ wäre die Speicherkarte.


    Ich habe entschieden Probleme mit dem Find befehl. Unter Ubuntu kann ich einfach per find die CR2 ausfindig machen und in einen Satz Kopieren


    cp `find /share/USBDisk4 -iname *.CR2` /share/nutzer/workload/Bilder


    So ähnlich funktioniert es unter ubuntu aber nicht in der Busybox...


    Vielleicht habt ihr ja noch ein paar Ideen.


    Endresultat, Karte rein stecken und dann im Netzwerk die Bilder zur Verfügung haben, das wäre mein Goal. :)

  • Lösung:


    Per crontab wird ein shell script angestossen. Das wiederum stößt php an und läd eine php datei. Diese php Datei liesst eine config datei ein. In der steht drin, ob kopieren starten soll oder nicht. Die config datei kann ich im Webbrowser auf 1 setzen. Der crontab liesst die config ein erkennt die 1 und startet das php script durch.


    Das php script prüft nun, ob mein Kartenleser angeschlossen ist und prüft USBDisk. Wenn dieser Vorhanden ist geht es weiter......


    Alle Dateien liegen im Webverzeichnis.


    piccopy.php:


    Code
    1. <?### Script by Swen E. Johannes - www.sej.de #################################################### This script proof if USBDisk is available## and find CR2 files for copy this in a new## created folder in a folder of your## choose.#################################################$picpath = "/share/MD0_DATA/wikibear/Bilder/snap2011/";$workpath = "/share/";$picdir = "/DCIM";$pictype = "CR2";$new_folder = date('Y_m_d');$conffile = "/share/Web/config";function check_opt_file(){ GLOBAL $conffile; $zeile = file ($conffile); return $zeile[0];}function get_usb_folder(){GLOBAL $workpath;$realusb = "";$workpathlist = scanDir($workpath); for($i=0;$i<count($workpathlist);$i++){ if(preg_match("/USBDisk/i",$workpathlist[$i])){ $realusb[] = $workpathlist[$i]; } }return $realusb;}function check_usb_data($avail_USB){ GLOBAL $workpath; GLOBAL $picdir; $real_pic_path = ""; for($i=0;$i<count($avail_USB);$i++){ $check_path = $workpath.$avail_USB[$i].$picdir; if(is_dir($check_path)){ $real_pic_path[] = $check_path; } } return $real_pic_path;}function create_pic_folder(){ GLOBAL $picpath; GLOBAL $new_folder; $full_pic_path = $picpath.$new_folder; if(!is_dir($full_pic_path)){ echo "New picture folde does not exist. I create one for you here: ".$full_pic_path."\r\n"; mkdir($full_pic_path, 777); }else{ echo "Picture folder exist.\r\n"; } return $full_pic_path;}function check_sub_folder($check_usb_data){ for($i=0;$i<count($check_usb_data);$i++){ $check_sub_folders_array = scanDir($check_usb_data[$i]); foreach($check_sub_folders_array AS $sub_folders){ if($sub_folders != "." && $sub_folders != ".."){ $sub_folders_array[] = $check_usb_data[$i]."/".$sub_folders; } } } return $sub_folders_array;}function copy_pics_to_dest($fullpicpath,$sub_pic_path){ for($i=0;$i<count($sub_pic_path);$i++){ $command = 'cp '.$sub_pic_path[$i].'/*.* -vR '.$fullpicpath; echo "Copy files with command: ".$command."\r\n"; passthru($command, $result); //echo $result; }}function set_rights_to_user($fullpicpath){ $command_chown = 'chown -R wikibear:everyone '.$fullpicpath; echo "Set user owner with command: ".$command_chown."\r\n"; passthru($command_chown, $result); //echo $result; $command_rights = 'chmod -R 777 '.$fullpicpath; echo "Set user rights with command: ".$command_rights."\r\n"; passthru($command_rights, $result); //echo $result;}function set_opt_zero(){ GLOBAL $conffile; $option = "0"; $handler = fopen($conffile, "w"); fwrite($handler, $option); fclose($handler);}$opt = check_opt_file();if($opt == 0){ echo "Config is zero. Nothing to do.\r\n"; exit;}$get_usb_folder = get_usb_folder();if(is_array($get_usb_folder)){ echo "USB Cardreader found. Start scanning folders for pic folder ".$picdir.".\r\n"; $check_usb_data = check_usb_data($get_usb_folder); if(is_array($check_usb_data)){ echo $picdir." found.\r\n"; echo "Try to create new picture folder.\r\n"; $full_pic_path = create_pic_folder(); echo "Now scanning for pictures.\r\n"; $pic_sub_folder = check_sub_folder($check_usb_data); echo "Copy pictures to destination picture folder.\r\n"; copy_pics_to_dest($full_pic_path,$pic_sub_folder); echo set_rights_to_user($full_pic_path); set_opt_zero(); }}?>


    setpiccopy.php


    Code
    1. <?if(isset($_GET['set'])){ $set = $_GET['set'];}$file = "config";$stat = file($file);if($set == "copy"){ $option = "1"; $handler = fopen($file, "w"); fwrite($handler, $option); fclose($handler); echo "Option auf 1 gesetzt. In den n&auml;chsten 5 Minuten beginnt die Datei&uuml;bertragung.<br>";}if($set == "move"){ $option = "2"; $handler = fopen($file, "w"); fwrite($handler, $option); fclose($handler);}if($stat[0] != 0){echo "Status: ".$stat[0]."<br>";}else{echo '<a href="setpiccopy?set=copy">&Uuml;bertragung starten</a>';}?>


    piccopy


    Shell-Script
    1. #!/bin/bash
    2. /mnt/ext/opt/apache/bin/php /share/Web/piccopy.php


    und eine config datei erstellen mit dem namen config.


    im Crontab noch den ordner mit piccopy bash eingetragen config neu eingeladen und fertig.


    Ab heute stecke ich den Kartenleser dran klick im Browser ein Link und die Dateien werden automatisch in mein Bilderordner geladen.

  • Vielen Dank für diese Anleitung. Sie ist wirklich toll. Mir ging es eigentlich nur um die Klärung der Frage wie ich eine .php-Datei ausführen kann. Danke.