[PHP] FTP to DB

Dieses Thema im Forum "Webentwicklung" wurde erstellt von freakZ, 26. April 2010 .

  1. 26. April 2010
    FTP to DB

    hallo leute,

    in den letzen tagen suchen ja einige solche funktionieren hier.

    Ich such eine funktion die nicht sehr performance fressend ist - und zwar folgende.

    ftpuserXYZ ladet in den ordner gallery/26.04.2010/disco1 - fotos hoch , ein php script sollte nun das ganze "fetchen" und sich in den ftp einwählen und dort schaun welches datum , welche location dort befüllt ist bzw. ob sich der inhalt schon in der datenbank befindet.
    Falls nicht wird es eingetragen.

    So sollte also dort nach dem "fetchen" stehen: Montag, 26.04.2010 - disco1 [0 Fotos]

    Hoffe ihr wisst was ich meine , und könnt mir sinvolle tipps geben ob mit curl oder anders
     
  2. 26. April 2010
    AW: FTP to DB

    libftp
    http://php.net/ftp_connect

    wo is das problem? gibts code?
     
  3. 26. April 2010
    AW: FTP to DB

    Warum sollte ich das PHP-Script in den FTP Einwählen?

    Mit opendir kannst du die Ordner im Galerie-Verzeichnis einlesen und mit der Datenbank Abgleichen lassen!
     
  4. 26. April 2010
    AW: FTP to DB

    Weil der img server - entfernt ist daher via ftp

    Ne code gibts noch nicht - wohl auch daran scheiterts das performant zu machen.
     
  5. 26. April 2010
    AW: FTP to DB

    Dann lass überlass das Parsen der Verzeichnisse doch dem IMG-Server und hol dir nur eine Datei mit dem Ergebnis welches du dann wieder auf deinem Script-Server verarbeiten kannst!
     
  6. 26. April 2010
    AW: FTP to DB

    Hey,

    also kurz zu der struktur (coresystems = hauptserver) , und 4 img server.

    Am coresystem wird eine ftp.php laufen die die ganzen ftp server abgrast und abfragt ob da bilder drauf liegen wenn ja haut er sie in die datenbank die direkt am jeweiligen img server liegt.
    Die gallery die am coresystems (hauptserver) liegt - liest dann die entfernen mysql dbs aus

    machbar?
     
  7. 27. April 2010
    AW: FTP to DB

    Ja, aber die Architektur ist suboptimal.

    Wenn dir einer der Imageserver wegbricht oder nur schwer erreichbar ist, zieht das auch deine Hauptseite mit runter.

    Die Imageserver sollten ihre Bestaende selber verwalten und bei Aenderungen den Masterserver benachtigen, damit der die neuen Daten in seine eigene Datenbank uebernimmt. Wenn dir also ein Imageserver mal wegbricht, warum auch immer, dann zeigt er auf deiner Hauptseite im schlimmsten Fall die Bilder des Imageservers nicht mehr an. So machst du praktisch nur inkrementelle Updates der Hauptdatenbank mit den Daten die auf dem jeweiligen Imageserver liegen.

    Eventuell solltest du dann noch ein Script schreiben, was du manuell starten kannst und was ab und zu mal die Datenbanken auf Konsistenz ueberprueft (ob alle Bilder auf dem Masterserver eingetragen sind oder welche fehlerhaft sind)
     
  8. 27. April 2010
    AW: FTP to DB

    hi,

    danke für diese Idee.

    Nur dennoch hab ich leider keinerlei ahnung wie ich sowas realisieren kann mittels php & mysql.
    Und daran scheitert es ja ..
     
  9. 27. April 2010
    AW: FTP to DB

    http://php.net/manual/de/refs.webservice.php

    Such dir was aus, damit kannst du die Kommunikation zwischen den Servern realisieren.

    Wenns nicht soviel Service Oriented Architecture sein soll kannst du auch einfach nen Postrequest mit den neuen Daten an den Hauptserver senden und ueberpruefst die Senderip, ob sie eine der Imageserver ist.

    Imageserver -> POST(neue image eintraege, geloeschte imageeintraege) -> Mainserver (check senderip, daten uebernehmen)
     
  10. 27. April 2010
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: FTP to DB

    Hier mal ein kleiner Ansatz falls du den IMG-Servern doch die Arbeit überlassen willst!

    Beispiel mit Verzeichnisstruktur und Dump-Bildern: Download (69KB)

    PHP:
    <? PHP
    define
    ( 'DIR_GALERIE' './galerie/' );

    // Durchsuche Ordner nach Datum
    $handle_dir_galerie  opendir ( DIR_GALERIE );
    while(
    false  !== ( $item_date  readdir ( $handle_dir_galerie ))) {
        if(
    is_dir ( DIR_GALERIE  $item_date ) AND  $item_date != '.'  AND  $item_date != '..'  AND  preg_match ( '!\d{2}\.\d{2}\.\d{4}!' $item_date )) {
            
            
    // Durchsuche Ordner nach Disco´s
            
    $dir_disco  DIR_GALERIE . $item_date . '/' ;
            
    $handle_dir_galerie_disco  opendir ( $dir_disco );
            while(
    false  !== ( $item_disco  readdir ( $handle_dir_galerie_disco ))) {
                if(
    is_dir ( $dir_disco  $item_disco ) AND  $item_disco != '.'  AND  $item_disco != '..' ) {
                    
                    
    // Durchsuche Ordner nach Bildern
                    
    $dir_disco_images  $dir_disco  $item_disco  '/' ;
                    
    $handle_dir_galerie_disco_images  opendir ( $dir_disco_images );
                    while(
    false  !== ( $item_image  readdir ( $handle_dir_galerie_disco_images ))) {
                        if(
    is_file ( $dir_disco_images  $item_image ) AND  $item_image != '.'  AND  $item_image != '..'  AND  preg_match ( '!jpg|jpeg|png|gif!i' end ( explode ( '.' $item_image )))) {
                            
    $galeries [ $item_date ][ $item_disco ][] =  $item_image ;
                            }
                        }
                    }
                }
            }
        }
        
        
    print 
    '<pre>'  print_r ( $galeries true ) .  '</pre>' ;
    ?>
    Code:
    Array
    (
     [25.03.2010] => Array
     (
     [disco-1] => Array
     (
     [0] => DSC_00001.jpg
     [1] => DSC_00002.jpg
     )
    
     [disco-2] => Array
     (
     [0] => DSC_00001.jpg
     [1] => DSC_00002.jpg
     [2] => DSC_00003.jpg
     [3] => DSC_00004.jpg
     [4] => DSC_00005.jpg
     )
    
     [disco-3] => Array
     (
     [0] => DSC_00001.jpg
     [1] => DSC_00002.jpg
     [2] => DSC_00003.jpg
     [3] => DSC_00004.jpg
     )
    
     )
    
     [26.03.2010] => Array
     (
     [disco-3] => Array
     (
     [0] => DSC_00001.jpg
     [1] => DSC_00003.jpg
     [2] => DSC_00004.jpg
     )
    
     )
    
    )
     
  11. 28. April 2010
    AW: FTP to DB

    diese funktion lies dir rekursiv ein verzeichnis aus:
    PHP:
    $files  scandir_rec ( './verzeichnis' );

    function 
    scandir_rec ( $path ) {
        if(!
    in_array ( substr ( $path , - 1 ), array( '/' '\\' )))
            
    $path  .=  '/' ;
            
        
    $files  = array();
        
    $dir    scandir ( $path );
        foreach(
    $dir  as  $file ) {
            if(
    in_array ( $file , array( '.' '..' )))
                continue;
            
            if(
    is_dir (( $npath  $path  $file ))) {
                
    $files [ $file ] =  scandir_rec ( $npath );
                continue;
            }
            
            
    $files [] =  $file ;
        }
        
        return 
    $files ;
    }
    $files kannst du dann mit "serialize()" cachen und an deinen master-server senden.
     
  12. 28. April 2010
    AW: FTP to DB

    danke für die ansätze

    Nur weil hier oft das wort masterserver benutzt wurde ..

    Könntet ihr mir helfen einen ftp login zu realisieren - der die ganzen verzeichnisse einliest wie in meinem ersten post beschrieben und dann auch passend in die db schreibt?

    @nano - würde auch auf deinen ansatz zurück greifen nur müsste da aktiv dann php mitlaufen was ich eigentlich verhindern wollte ..
    Wenn du mir helfen würdest wärs cooL
     
  13. 28. April 2010
    AW: FTP to DB

    PHP:
    <? php

    if(!( $fp  ftp_connect ( $server $port 20 ))) 
        exit(
    'keine verbindung möglich' );
        
    if(!
    ftp_login ( $fp $user $pass ))
        exit(
    'zugangsdaten falsch' );

    $files  ftp_list_rec ( $fp '.' );

    ftp_close ( $fp );

    print_r ( $files );  // Array ( [.] => Array ( [dir] => Array ( [1] => file...

    // -------------------------------

    function  ftp_list_rec ( $fp $path ) {    
        
    $files  = array();
        foreach(
    ftp_rawlist ( $fp $path ) as  $item ) {
            
    $name  preg_replace ( '~^.*\s+.*\s+.*\s+.*\s+.*\s+.*\s+.*\s+.*\s+(.*)$~' '$1' $item );
            if(
    substr ( $item 0 1 ) ==  'd' ) {
                
    $files [ $name ] =  ftp_list_rec ( $fp $path  '/'  $name );
                continue;
            }
            
            
    $files [] =  $name ;
        }
        
        return 
    $files ;
    }

    zb
     
  14. 28. April 2010
    AW: FTP to DB

    Zu langsam ... Wäre ich nicht mal eben bei der Bank gewesen

    Naja, hier dann auch noch mein Code, damit es nicht ganz umsonst war

    PHP:
    <? PHP
    $ftp_host 
    'nanobyte-online.de' ;
    $ftp_port  21 ;         // Default: 21
    $ftp_timeout  60 ;
    $ftp_login  '*****LOGIN*****' ;
    $ftp_password  '*****PASSWORD*****' ;
    $ftp_dir_galerie  '/html/___rrb-test/galerie/' ;


    $ftp  ftp_connect ( $ftp_host $ftp_port $ftp_timeout );
    if(!
    $ftp ) {   die( 'FTP nicht Erreichbar!' );   }
        
    if(!
    ftp_login ( $ftp $ftp_login $ftp_password )) {   die( 'FTP Login Fehlgeschlagen!' );   }
    if(!
    ftp_chdir ( $ftp $ftp_dir_galerie )) {   die( 'Galerie-Verzeichnis nicht gefunden!' );   }


    // Lese Date-Verzeichnisse
    $filelist_date  ftp_nlist ( $ftp '.' );
    foreach(
    $filelist_date  as  $item_date ) {
        if(
    $item_date == '.'  OR  $item_date == '..'  OR !@ ftp_chdir ( $ftp $item_date ) OR ! preg_match ( '!\d{2}\.\d{2}\.\d{4}!' $item_date ))   continue;
        
    ftp_chdir ( $ftp '..' );

        
    // Lese Disco-Verzeichnisse
        
    ftp_chdir ( $ftp $item_date );
        
    $filelist_disco  ftp_nlist ( $ftp '.' );
        foreach(
    $filelist_disco  as  $item_disco ) {
            if(
    $item_disco == '.'  OR  $item_disco == '..'  OR !@ ftp_chdir ( $ftp $item_disco ))   continue;
            
    ftp_chdir ( $ftp '..' );
            
            
    // Lese Bild-Dateien
            
    ftp_chdir ( $ftp $item_disco );
            
    $filelist_images  ftp_nlist ( $ftp '.' );
            foreach(
    $filelist_images  as  $item_image ) {
                if(
    $item_image == '.'  OR  $item_image == '..'  OR ! preg_match ( '!jpg|jpeg|png|gif!i' end ( explode ( '.' , $item_image ))))   continue;
                
    $galeries [ $item_date ][ $item_disco ][] =  $item_image ;
                }
            
    ftp_chdir ( $ftp '..' );
            }

        
    ftp_chdir ( $ftp '..' );
        }

    ftp_close ( $ftp );


    print 
    '<pre>'  print_r ( $galeries true ) .  '</pre>' ;
    ?>
     
  15. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.