#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 + Multi-Zitat Zitieren
#2 26. April 2010 AW: FTP to DB libftp http://php.net/ftp_connect wo is das problem? gibts code? + Multi-Zitat Zitieren
#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! + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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! + Multi-Zitat Zitieren
#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? + Multi-Zitat Zitieren
#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) + Multi-Zitat Zitieren
#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 .. + Multi-Zitat Zitieren
#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) + Multi-Zitat Zitieren
#11 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 ) ) ) + Multi-Zitat Zitieren
#12 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. + Multi-Zitat Zitieren
#13 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 + Multi-Zitat Zitieren
#14 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 + Multi-Zitat Zitieren
#15 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>' ; ?> + Multi-Zitat Zitieren