[GELÖST] Dateiunterschied feststellen

  • PHP

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Link275.

    [GELÖST] Dateiunterschied feststellen

    Hi,

    wie stelle ich am besten den Unterschied zweier files dar?
    - md5_file fällt flach -> Kann nicht hinhauen, da Windows<->Linux unterschied
    - Dateigröße geht auch nicht (selber Grund)

    was gäbe es noch? Es sollte ein relativ sicherer Vergleich sein. Es geht darum dass ich Files bereitstelle auf meinem Server (PHP Dateien). Jemand anders nutzt eine Upload-Funktion die ich noch mit eingebaut hab. Jetzt geh ich also die Verzeichnisse rekursiv durch (was eh schon lange dauert ohne dass überhaupt schon was gemacht wurde) und möchte die alten files von seinem Server ersetzen mit den neuen files auf meinem Server. Gleich einfach alle zu ersetzen ist performancelastig, dauert Zeit und is dirty.

    Was kann ich tun um Unterschiede zwischen alter und neuer Datei zu ermitteln, sodass nur Dateien ersetzt werden die sich auch wirklich von den neuen unterscheiden?

    PS: Geht nur um den Unterschied. Der Befehl zum kopieren selbst funktioniert, hab ich auch getestet.


    Link :thumbup:

    Edit by nikeee13:
    Der Thread befand sich wohl im falschen Unterforum. In "weitere Programmiersprachen" verschoben.
    Hello World

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Link275“ ()

    Hi,

    ja die haben beide definitiv dasselbe Encoding.

    //EDIT:
    Gelöst: Hab es folgendermaßen hinbekommen:

    PHP-Quellcode

    1. <?php
    2. $source_diff = strlen(preg_replace("\n|\r|\0", "", file_get_contents($verzeichnis_server . $datei)));
    3. $dest_diff = strlen(preg_replace("\n|\r|\0", "", file_get_contents($verzeichnis_lokal . $datei)));
    4. ?>


    Was für geiler Scheiß 8-) :love: Funktioniert tadellos, sobald nur ein Zeichen geändert wird, greift die Funktion.
    Weil ja für Win und Linux das mit den Zeilenumbrüchen irgendwie anders interpretiert wird (CL / RF) ging die Scheiße nicht, aber das konnte ich mit einem simplen replace ja nun elegant umgehen =)



    Link :thumbup:
    Hello World

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Link275“ ()

    Auch wenn es erledigt ist, wenn du eine Datei mit Windows erstellt hast sind da in der Tat als Zeilenumbruch CR und LF drin und auch unter Linux bleibt dies so, zwar benötigt Linux nur LF aber die Zeichen werden ja nicht aus der Datei rausgelöscht. Somit ist es unlogisch, das ein MD5 einer Datei unter Windows und Linux anders sein sollte. Allerdings würde ich SHA1 nehmen wegen der niedrigeren Kollisionsgefahr.
    Hi,

    wie auch immer, bei mir funktioniert das leider gar nicht mit dem hashen, gleich ob md5 oder sha1. Wenn es ginge, würde ich natürlich für den Vergleich auf Prüfsummen zurückgreifen. Geht aber nicht, deswegen hab' ich mich für oben genannte Lösung entschieden.

    Besser noch:

    PHP-Quellcode

    1. <?php
    2. $source_diff = strlen(preg_replace("[^\d\w]", "", @file_get_contents($verzeichnis_quelle . $datei)));
    3. $dest_diff = strlen(preg_replace("[^\d\w]", "", @file_get_contents($verzeichnis_ziel . $datei)));
    4. ?>


    Das reicht mir eigentlich. Wann ändern sich in einer PHP Datei schließlich mal nur Sonderzeichen. Und es funktioniert sehr gut =)
    Trotzdem danke für die Anmerkung, Dodo


    Link :thumbup:
    Hello World