Fotos automatisch übertragen

  • 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. :)
  • Re: Fotos automatisch übertragen

    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:

    Quellcode

    1. <?
    2. ### Script by Swen E. Johannes - www.sej.de ###
    3. ###############################################
    4. ## This script proof if USBDisk is available
    5. ## and find CR2 files for copy this in a new
    6. ## created folder in a folder of your
    7. ## choose.
    8. ##
    9. ###############################################
    10. $picpath = "/share/MD0_DATA/wikibear/Bilder/snap2011/";
    11. $workpath = "/share/";
    12. $picdir = "/DCIM";
    13. $pictype = "CR2";
    14. $new_folder = date('Y_m_d');
    15. $conffile = "/share/Web/config";
    16. function check_opt_file(){
    17. GLOBAL $conffile;
    18. $zeile = file ($conffile);
    19. return $zeile[0];
    20. }
    21. function get_usb_folder(){
    22. GLOBAL $workpath;
    23. $realusb = "";
    24. $workpathlist = scanDir($workpath);
    25. for($i=0;$i<count($workpathlist);$i++){
    26. if(preg_match("/USBDisk/i",$workpathlist[$i])){
    27. $realusb[] = $workpathlist[$i];
    28. }
    29. }
    30. return $realusb;
    31. }
    32. function check_usb_data($avail_USB){
    33. GLOBAL $workpath;
    34. GLOBAL $picdir;
    35. $real_pic_path = "";
    36. for($i=0;$i<count($avail_USB);$i++){
    37. $check_path = $workpath.$avail_USB[$i].$picdir;
    38. if(is_dir($check_path)){
    39. $real_pic_path[] = $check_path;
    40. }
    41. }
    42. return $real_pic_path;
    43. }
    44. function create_pic_folder(){
    45. GLOBAL $picpath;
    46. GLOBAL $new_folder;
    47. $full_pic_path = $picpath.$new_folder;
    48. if(!is_dir($full_pic_path)){
    49. echo "New picture folde does not exist. I create one for you here: ".$full_pic_path."\r\n";
    50. mkdir($full_pic_path, 777);
    51. }else{
    52. echo "Picture folder exist.\r\n";
    53. }
    54. return $full_pic_path;
    55. }
    56. function check_sub_folder($check_usb_data){
    57. for($i=0;$i<count($check_usb_data);$i++){
    58. $check_sub_folders_array = scanDir($check_usb_data[$i]);
    59. foreach($check_sub_folders_array AS $sub_folders){
    60. if($sub_folders != "." && $sub_folders != ".."){
    61. $sub_folders_array[] = $check_usb_data[$i]."/".$sub_folders;
    62. }
    63. }
    64. }
    65. return $sub_folders_array;
    66. }
    67. function copy_pics_to_dest($fullpicpath,$sub_pic_path){
    68. for($i=0;$i<count($sub_pic_path);$i++){
    69. $command = 'cp '.$sub_pic_path[$i].'/*.* -vR '.$fullpicpath;
    70. echo "Copy files with command: ".$command."\r\n";
    71. passthru($command, $result);
    72. //echo $result;
    73. }
    74. }
    75. function set_rights_to_user($fullpicpath){
    76. $command_chown = 'chown -R wikibear:everyone '.$fullpicpath;
    77. echo "Set user owner with command: ".$command_chown."\r\n";
    78. passthru($command_chown, $result);
    79. //echo $result;
    80. $command_rights = 'chmod -R 777 '.$fullpicpath;
    81. echo "Set user rights with command: ".$command_rights."\r\n";
    82. passthru($command_rights, $result);
    83. //echo $result;
    84. }
    85. function set_opt_zero(){
    86. GLOBAL $conffile;
    87. $option = "0";
    88. $handler = fopen($conffile, "w");
    89. fwrite($handler, $option);
    90. fclose($handler);
    91. }
    92. $opt = check_opt_file();
    93. if($opt == 0){
    94. echo "Config is zero. Nothing to do.\r\n";
    95. exit;
    96. }
    97. $get_usb_folder = get_usb_folder();
    98. if(is_array($get_usb_folder)){
    99. echo "USB Cardreader found. Start scanning folders for pic folder ".$picdir.".\r\n";
    100. $check_usb_data = check_usb_data($get_usb_folder);
    101. if(is_array($check_usb_data)){
    102. echo $picdir." found.\r\n";
    103. echo "Try to create new picture folder.\r\n";
    104. $full_pic_path = create_pic_folder();
    105. echo "Now scanning for pictures.\r\n";
    106. $pic_sub_folder = check_sub_folder($check_usb_data);
    107. echo "Copy pictures to destination picture folder.\r\n";
    108. copy_pics_to_dest($full_pic_path,$pic_sub_folder);
    109. echo set_rights_to_user($full_pic_path);
    110. set_opt_zero();
    111. }
    112. }
    113. ?>
    Alles anzeigen


    setpiccopy.php

    Quellcode

    1. <?
    2. if(isset($_GET['set'])){
    3. $set = $_GET['set'];
    4. }
    5. $file = "config";
    6. $stat = file($file);
    7. if($set == "copy"){
    8. $option = "1";
    9. $handler = fopen($file, "w");
    10. fwrite($handler, $option);
    11. fclose($handler);
    12. echo "Option auf 1 gesetzt. In den n&auml;chsten 5 Minuten beginnt die Datei&uuml;bertragung.<br>";
    13. }
    14. if($set == "move"){
    15. $option = "2";
    16. $handler = fopen($file, "w");
    17. fwrite($handler, $option);
    18. fclose($handler);
    19. }
    20. if($stat[0] != 0){
    21. echo "Status: ".$stat[0]."<br>";
    22. }else{
    23. echo '<a href="setpiccopy?set=copy">&Uuml;bertragung starten</a>';
    24. }
    25. ?>
    Alles anzeigen


    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.