| | | | |
| |||||||
| PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen |
|
| | LinkBack | Themen-Optionen | Thema bewerten |
| | |
| Erfahrener Benutzer Registriert seit: 21.12.2009
Beiträge: 415
PHP-Kenntnisse: Fortgeschritten ![]() | Hallo, Für ein kleines Nebenprojekt möchte ich gerne Dateien von Rechner A auf Rechner B synchronisieren. Um das ganze effizient zu gestalten soll zunächst geprüft werden, ob die Dateien unterschiedlich sind (sofern auf B vorhanden) und falls ja soll nur der geänderte Teil übertragen werden. Eines an dieser Stelle vorweg: RSync als -Tool- kommt nicht in Frage, es muss Plain-PHP sein. So, nun zur Frage: Hat sich hier schonmal jemand mit der Berechnung von Block-Based-Checksums auseinandergesetzt und kann mir ein paar Denkanstöße geben? Die Grundlagen sind an sich kein Problem (lies X Byte, Checksum, lies X Bytes, Checksum,...) nur befürchte ich, wird das schon bei wenigen MB großen Dateien unperformant. Meine nächste Überlegung war, den RSync-Algorithmus in PHP nachzubilden. Hier scheitert's im Moment aber ein bisschen am Verständnis, wie das mit der Rolling Checksum und so funktionieren soll. Eine ausführliche Suche hat bisher leider keine vorhandenen PHP-Implementationen zu Tage gefördert. Hat sich hier schonmal jemand damit beschäftigt oder durch Zufall einen Link zur Hand? So, zum letzten Punkt - File-Patching. Ausgehend davon, dass sich oben Stehendes lösen lässt sollen Dateien auf Rechner B (nach Möglichkeit) on-the-fly gepatcht werden. Soll heißen, es existiert im Prinzip nur die Ausgangsdatei und ein Satz Änderungen - beim Abruf der Datei werden dann die Änderungen auf die Ausgangsdatei gepatcht, so dass der Client den neuesten Stand erhält. Alternativ könnte ich mich auch "umgekehrtes Patchen" vorstellen - d.h. auf Rechner B liegt der neueste Stand und Patchfiles, um jeden vorherigen Stand wiederherzustellen. Hat hierzu jemand brauchbare Ansätze zur Hand? Danke schonmal im Voraus.
__________________ actra.development - Schwabstr. 2 - 70825 Münchingen www.actra.de/velopment/ - eMail: php.de@actra.de Zend Certified Engineer for PHP5 |
| | |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Erfahrener Benutzer Registriert seit: 21.12.2009
Beiträge: 415
PHP-Kenntnisse: Fortgeschritten ![]() | Was hilfreicher Kommentar... Aber um dir dennoch zu erläutern, warum kompliziert und nicht einfach: es gibt Anwendungsfälle, da steht ausser PHP faktisch Nichts zur Verfügung. Und dass es gar nicht mal so kompliziert ist beweisen mir die nach weiterer Suche gefundenen Perl- und Python-Implementierungen, an denen ich mich nun orientieren kann.
__________________ actra.development - Schwabstr. 2 - 70825 Münchingen www.actra.de/velopment/ - eMail: php.de@actra.de Zend Certified Engineer for PHP5 |
| | |
| | |
| moderatives Dielektrikum Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Allein der Dateizugriff über Rechnergrenzen hinweg ist mit PHP umständlich. Keine Ahnung wie kompliziert der rsync-Mechanismus ist, in jedem Fall werden da jedoch Ordnerlistings, Zugriffschecks und Locking-Mechanismen am Start sein, die man sich, wo irgend möglich, wirklich sparen sollte zu implementieren.
__________________ -- One pixel is still too big. Please make it smaller. ASAP. Initiative Mittelstand. Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers. -- |
| | |
| | |
| Erfahrener Benutzer Registriert seit: 21.12.2009
Beiträge: 415
PHP-Kenntnisse: Fortgeschritten ![]() | Es gibt überhaupt keinen Dateizugriff über Rechnergrenzen hinweg. Ich werd mal sehen wie weit ich komme, wobei ich sehr guter Dinge bin. Im Übrigen ist es langweilig, immer bestehende Tools zu verwenden - was hier zudem eben auch gar nicht möglich ist.
__________________ actra.development - Schwabstr. 2 - 70825 Münchingen www.actra.de/velopment/ - eMail: php.de@actra.de Zend Certified Engineer for PHP5 |
| | |
| | |||
| moderatives Dielektrikum Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Zitat:
Zitat:
__________________ -- One pixel is still too big. Please make it smaller. ASAP. Initiative Mittelstand. Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers. -- | ||
| | |
| | |
| Erfahrener Benutzer Registriert seit: 21.12.2009
Beiträge: 415
PHP-Kenntnisse: Fortgeschritten ![]() | Die Kommunikation erfolgt über ein separates Protokoll, - rsync -, bzw. in meinem Fall einer Abwandlung davon. Ich sehe das allerdings nicht als "Dateizugriff über Rechnergrenzen hinweg" an, da zu keiner Zeit A Dateien auf B bzw, B Dateien auf A direkt öffnet - das handelt jeweils eine Zwischenschicht (PHP). Falls dich das Thema interessieren sollte, ich hab gerade die Doktorarbeit von Andrew Tridgell (der RSync-Entwickler) gefunden: http://samba.org/~tridge/phd_thesis.pdf Nach der Lektüre (und den Perl-/Python-Impl.) versteh ich auch besser wie das funktioniert und seh nahezu keine Probleme mehr. Lediglich was das on-the-fly-Patchen angeht muss ich mir noch was überlegen...aber das wäre nichtmal ein soooo wichtiges Feature, zumindest für den Anfang.
__________________ actra.development - Schwabstr. 2 - 70825 Münchingen www.actra.de/velopment/ - eMail: php.de@actra.de Zend Certified Engineer for PHP5 |
| | |
| | |
| moderatives Dielektrikum Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Danke, ich schnupper mal rein. Ich habe gesehen, dass die Per Implementierungen, die ich gefunden habe, RSync-Clients waren. Das würde dann erklärt durch die Aussage, dass PHP sozusagen nur den Mechanismus antriggert. Mir stellt sich allerdings dann die Frage, ob rsync dann nicht ohnehin nativ auf beiden Rechnern vorhanden sein muss und wieso dann die Aussage „RSync als -Tool- kommt nicht in Frage“ besteht. Naja, vielleicht sollte ich erstmal lesen.
__________________ -- One pixel is still too big. Please make it smaller. ASAP. Initiative Mittelstand. Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers. -- |
| | |
| | |
| Erfahrener Benutzer Registriert seit: 21.12.2009
Beiträge: 415
PHP-Kenntnisse: Fortgeschritten ![]() | Das RSync-Tool, das "jeder" kennt ist an sich nur eine Implementierung in (ich glaube) C des dahinterstehenden Algorithmus. Es wird eine "Weak rolling checksum" und eine MD4-Checksum auf die einzelnen Blöcke der Datei berechnet und dann gegen die Checksummen des Servers abgeglichen. Es ist also kein "Hexenwerk", das man nicht auch mit purem PHP lösen könnte. Noch ein bisschen Lesestoff: File::RSync::Digest - Perl RSYnc-Algorithmus in Python implementiert
__________________ actra.development - Schwabstr. 2 - 70825 Münchingen www.actra.de/velopment/ - eMail: php.de@actra.de Zend Certified Engineer for PHP5 |
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| S: Web Based File Manager | solariz | Beitragsarchiv | 0 | 12.03.2008 22:57 |
| libmysqlclient.so.10 is needed | Datenbanken | 11 | 20.06.2005 15:27 | |
| update auf php 5.0.4 | robo47 | Server, Hosting und Workstations | 6 | 10.04.2005 19:00 |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| rsync block based, rolling checksum, php prüfsumme file, asap2 checksum, php checksum, perl block checksum, rsync algorithm perl, rsync blockcheck, php patching, tool block check berechnen, rsync algorithmus, berechnung und block, rsync blockweise übertragen, php rolling checksum, rsync algorithm php, checksum rsync berechnen, rsync block based version, rsync checksum, perl rsync, block based rsync |