Ich bin auf der Suche nach Möglichkeiten zur Implementierung von Dateisystemoperationen mit PHP mit Transaktionsunterstützung. Wie bei Operationen wie Verschieben, Kopieren und Löschen innerhalb einer Transaktion muss das Skript alle bereits ausgeführten Operationen rückgängig machen. Ich bin irgendwie ahnungslos und suche Führung, wie es erreicht werden kann. Und wenn vorhandene Bibliotheken oder Lösungen vorhanden sind? Ich entschuldige mich, wenn die Frage vage klingt.Wie führen Sie Dateisystemoperationen in Transaktion mit PHP aus?
Antwort
Filesysteme unterstützen im Gegensatz zu Datenbankverwaltungssystemen keine Transaktionen. Einige bieten jedoch die Dinge, die Sie für die Implementierung von Transaktionen benötigen. das ist Sperren und Protokollieren. Logging wird nicht dein Problem sein, weil du es auch in PHP machen kannst, aber du brauchst ein Dateisystem, das Dateisperren bietet.
Ich empfehle Ihnen, nichts dergleichen selbst zu implementieren - es gibt viele Probleme, denen Sie begegnen könnten. Die Datenbank-Leute blicken hier auf eine Forschungsgeschichte von Jahrzehnten zurück.
Aber wenn Sie müssen, könnten Sie (zum ersten Mal) etwas wie Two-phase locking in PHP implementieren. Sie können auch die command pattern verwenden, die Ihnen beim Rückgängigmachen der Funktionalität für Ihr Rollback hilft.
Eine Option besteht darin, Ihre Dateien als BLOBs in der Datenbank und nicht als Dateien zu speichern. Diese unterstützen Transaktionen und alle anderen Funktionen Ihrer Datenbank.
Es ist möglich, Transaktionen mit erweiterten Dateisystemen wie ZFS, aber nicht direkt mit PHP zu unterstützen, und ZFS wird standardmäßig nicht unter Linux installiert.
Das gebräuchlichste Muster dafür ist, alles an einen anderen Ort zu kopieren, die Kopie zu bearbeiten und die Originale zu ersetzen, wenn alles gut geht.
Etwas sagt mir, dass PHP-Stream-Wrapper auch dafür nützlich sein könnten. Es ist möglich, das Protokoll "file: //" zu überschreiben und in einem virtuellen Dateisystem zu arbeiten (Proof of Concept: https://github.com/Respect/Test#streamwrapper).
- 1. Transaktion in PHP mit MySQL?
- 2. Ich versuche, Dateisystemoperationen mit VFSStream zu testen
- 3. Führen Sie PHP-Skript mit Mac-Terminal
- 4. Wie führen Sie eine .bat-Datei aus PHP?
- 5. Führen Sie ssh aus und führen Sie den Befehl aus
- 6. Führen Sie eine XQuery mit PHP
- 7. Führen Sie PHP nach Neuem Auftrag in Magento aus
- 8. So führen Sie Segue mit Verzögerung aus
- 9. Führen Sie zwei verschiedene PHP-Programme gleichzeitig aus
- 10. Führen Sie einen JavaScript-Funktion aus einer PHP-if-Anweisung
- 11. Führen Sie einen eingefärbten Befehl aus einem PHP-Skript
- 12. So führen Sie Pyint mit PyCharm aus
- 13. Führen Sie AppleScript aus C
- 14. SQL Führen Sie eine Abfrage aus und führen Sie eine weitere basierend auf den Ergebnissen aus
- 15. Führen file_get_contents und readfile PHP-Code aus?
- 16. Führen Sie PHP-Skript mehrmals aus einer for-Schleife
- 17. So führen Sie Javah aus Eclipse aus
- 18. Führen Sie JavaScript .replace in JQuery aus
- 19. Führen Sie einmal pro Minute ein PHP-Skript aus
- 20. So führen Sie Funktionen in Postgres aus
- 21. Führen Sie PHP mit node.js | Umleiten mit .htaccess
- 22. Wie führen Sie Python-Code mit Emacs aus?
- 23. Wie führen Sie eine gespeicherte Prozedur mit Castle ActiveRecord aus?
- 24. Wie führen Sie Tests mit einem benutzerdefinierten WebApplicationInitializer aus?
- 25. So führen Sie PowerShell in CMD aus
- 26. Führen Sie eine C# -Anwendung aus dem Python-Skript
- 27. Führen Sie eine PHP-DELETE-Anfrage
- 28. So führen Sie den Konsolenbefehl in yii2 aus dem Web
- 29. Führen Sie PHP-Klasse von JavaScript
- 30. Wie füllen Sie HTML-Formularfelder und führen Sie JavaScript aus?
Verwenden Sie möglicherweise ein Singleton-Entwurfsmuster, um eine Instanz eines Objekts zu erstellen, das eine Liste der verarbeiteten und abgeschlossenen Ereignisse und einen Algorithmus erstellt, der die Umkehrung jeder dieser Funktionen darstellt (z. B. die Positionen von <-> TO). Wenn es aus irgendeinem Grund fehlschlägt, führen Sie die Instanz aus, die alle vorgenommenen Änderungen rückgängig machen würde. – MaxSan