Ankündigung

Einklappen
Keine Ankündigung bisher.

Dateien auf unterschiedlichen Servern auf Gleicheit prüfen.

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Dateien auf unterschiedlichen Servern auf Gleicheit prüfen.

    Ich habe zwei Zip-Archive, eine liegt auf localhost eine andere im Internet auf einen anderen Server. Gibt es eine Methode beide Dateien auf gleicheit zu prüfen (Dateigröße) ohne die zweite Datei herunterzuladen???
    Ist das möglich???

  • #2
    Wie wäre es mit filesize?

    Kommentar


    • #3
      Zitat von User0101 Beitrag anzeigen
      Ich habe zwei Zip-Archive, eine liegt auf localhost eine andere im Internet auf einen anderen Server. Gibt es eine Methode beide Dateien auf gleicheit zu prüfen (Dateigröße) ohne die zweite Datei herunterzuladen???
      Ist das möglich???
      Das hängt davon ab, was der andere Server für Möglichkeiten bietet. Das Sinnvollste wäre Checksums zu vergleichen.

      Kommentar


      • #4
        Vielen Dank! Hab eine Methode hier gefunden.

        https://https://stackoverflow.com/qu...wnloading-file

        PHP-Code:
        function curl_get_file_size($url) {
          
        // Assume failure.
          
        $result = -1;

          
        $curl curl_init($url);

          
        // Issue a HEAD request and follow any redirects.
          
        curl_setopt($curlCURLOPT_NOBODYtrue);
          
        curl_setopt($curlCURLOPT_HEADERtrue);
          
        curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
          
        curl_setopt($curlCURLOPT_FOLLOWLOCATIONtrue);
         
        # curl_setopt( $curl, CURLOPT_USERAGENT, get_user_agent_string() );

          
        $data curl_exec($curl);
          
        curl_close($curl);

          if(
        $data) {
            
        $content_length "unknown";
            
        $status "unknown";

            if(
        preg_match"/^HTTP\/1\.[01] (\d\d\d)/"$data$matches )) {
              
        $status = (int)$matches[1];
            }

            if( 
        preg_match"/Content-Length: (\d+)/"$data$matches ) ) {
              
        $content_length = (int)$matches[1];
            }

            
        // http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
            
        if( $status == 200 || ($status 300 && $status <= 308) ) {
              
        $result $content_length;
            }
          }

          return 
        $result;
        }
        // Dateigröße
        echo curl_get_file_size($url); 

        Kommentar


        • #5
          Ich hab auf meinem Synology Server zu Hause ein Bash und auf dem Webserver ein PHP Script geschrieben.
          Auf dem Webserver wird ne MD5 Text Datei zur eigentlichen Datei mit dem selben Namen erstellt. diese werden dann lokal und auf dem Server verglichen und ggf. heruntergeladen.

          Kommentar


          • #6
            Ich würde beide Vorschläge kombinieren. Erst mit filezize vergleichen und bei gleichen filesize die md5 vergleichen. Dabei gehe ich davon aus, das du sowohl auf deinen Server als auch local PHP verfügbar hast.

            Kommentar


            • #7
              Der Vollständigkeit halber noch last modified.

              Kommentar


              • #8
                Falls mal jemand hierüber stolpert. Habe das mal ein wenig verbessert, so dass es auch mit HTTPS Schema umgehen kann und auf die internen Funktionen von curl zurückgreift.

                PHP-Code:
                function curl_get_file_size($url) {
                    
                // Assume failure.
                    
                $result = -1;

                    
                $curl curl_init($url);

                    
                // Issue a HEAD request and follow any redirects.
                    
                curl_setopt($curlCURLOPT_NOBODYtrue);
                    
                curl_setopt($curlCURLOPT_HEADERtrue);
                    
                curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
                    
                curl_setopt($curlCURLOPT_FOLLOWLOCATIONtrue);
                    
                curl_setopt($curlCURLOPT_SSL_VERIFYPEERfalse);
                    
                curl_setopt($curlCURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en; rv:1.9.0.13) Gecko/2009073022 Firefox/3.5.2');

                    
                $data curl_exec($curl);  

                    
                $filesize curl_getinfo($curlCURLINFO_CONTENT_LENGTH_DOWNLOAD);
                    
                $status curl_getinfo($curlCURLINFO_HTTP_CODE);

                    if( 
                curl_errno($curl) == ){
                        if( 
                $status == 200 || ($status 300 && $status <= 308) ){
                            
                $result $filesize;
                        }
                    }

                    
                curl_close($curl);

                    return 
                $result;

                }
                echo 
                curl_get_file_size($url); 
                tomBuilder
                last modified geht oft nicht. Bei Wikimedia, welches ich mal als Test verwendete kommt ein -1 bei curl zurück.

                MD5 als hash funktioniert natürlich auch nur wenn es sich beim abfragenden Server um den eigenen handelt. Will man aber nachschauen ob sich der Dateiinhalt geändert hat, bevor man hunderte von Megabytes herunterlädt, um anschliessend die DB zu aktualisieren, halte ich den Vergleich der Dateigrösse für ein probates Mittel.

                Kommentar

                Lädt...
                X