私は、トランザクションサポート付きのPHPを使用してファイルシステム操作を実装する方法を探しています。トランザクション内での移動、コピー、削除などの操作を実行している場合と同様に、いずれかが失敗した場合、スクリプトはすでに実行された操作をすべて元に戻す必要があります。私は一味違って、どのように達成できるか指導を求めています。利用可能なライブラリやソリューションが存在する場合は?質問があいまいに聞こえる場合はお詫び申し上げます。PHPとのトランザクションでファイルシステム操作を実行するには?
10
A
答えて
2
ファイルシステムは、データベース管理システムとは異なり、トランザクションをサポートしていません。ただし、トランザクションを実装するために必要なものを提供するものもあります。それはロックとロギングです。あなたはPHPでもそれを行うことができるので、ロギングはあなたの問題ではありませんが、ファイルロックを提供するファイルシステムが必要です。
このようなことは実装しないことをお勧めします。遭遇する可能性がある問題はたくさんあります。データベースの人たちはここ10年間の研究の歴史を振り返ります。
しかし、あなたがする必要があれば(最初は)Two-phase lockingのようなものを実装することができます。また、ロールバックの取り消し機能に役立つcommand patternの使用を検討することもできます。
3
ファイルとしてではなく、データベースにBLOBとしてファイルを格納することを検討してください。これらはトランザクションとデータベースの他のすべての機能をサポートします。
ZFSのような高度なファイルシステムでトランザクションをサポートすることはできますが、PHPでは直接行うことはできません。また、ZFSはデフォルトでLinuxにインストールされません。
3
最も一般的なパターンは、すべてをどこか別の場所にコピーし、コピーを操作し、すべてがうまくいけばオリジナルを置き換えます。
何かは、PHPストリームラッパーがこれにも役立つ可能性があることを私に伝えます。 'file://'プロトコルを無効にして、仮想ファイルシステム(概念の証明:https://github.com/Respect/Test#streamwrapper)で操作することが可能です。
関連する問題
- 1. Hibernate - トランザクションでの操作の実行
- 2. 単一トランザクションで複数の操作を実行する方法
- 3. Rails/ActiveRecordでトランザクション外でデータベース操作を実行する方法
- 4. FUSEファイルシステム操作
- 5. トランザクションごとにPostgresトリガを実行し、各更新操作では実行しない
- 6. Googleでの操作はローカルネットワークで操作を実行します
- 7. InfluxDBのトランザクション操作
- 8. 長時間実行する操作を実行するには?
- 9. ActiveSyncを介して実行されるファイルシステム操作(コピー、削除、移動など)
- 10. PHPとMySQL:トランザクションを自分で実行していますか?
- 11. Linuxは、擬似コードで実際に保存されたファイルシステムのUID操作
- 12. データグリッドで操作を実行するWPF
- 13. トランザクションの終了後に操作を実行できないことを示すプログラム
- 14. ファイルシステム操作が実際に「フラッシュされた」
- 15. PHP - MySQLのトランザクションの実行エラー
- 16. FragmentManagerはすでにトランザクションを実行中
- 17. Haskellで一連の操作(関数)を実行するには?
- 18. WFLYJPA0060:この操作を実行するにはトランザクションが必要です(トランザクションまたは拡張永続コンテキストを使用する)
- 19. VFSStreamでファイルシステム操作をテストしようとしています
- 20. HashTable操作とHashMap操作の実行時間?
- 21. 実行時のアプリケーションオブジェクトのブラウジングと操作
- 22. PHPファイル操作ファイル(fopen、fwrite、fclose)を実行できません
- 23. MySQLとSQLiteのトランザクションで関数を実行するには?関数は、「トランザクションで」実行することができますどのように
- 24. 地図上で検索操作を実行するには
- 25. 次の操作を実行しようとすると、Gitの
- 26. Rundeck - 実行ログとキャッシュの操作
- 27. performSelectorInBackgroundとUI操作の実行
- 28. 複数の操作を実行できる電卓を作成するには
- 29. 再実行を元に戻す操作
- 30. JDBCとJMSトランザクションを含むXAトランザクションの実行方法は?
シングルトンのデザインパターンを使用して、処理されたイベントのリストを作成するオブジェクトのインスタンスを作成し、これらのそれぞれを逆転させるアルゴリズムを使用することができます(たとえば、FROM <->をポジションに切り替えます)。なんらかの理由で失敗した場合、実行されたすべての変更を取り消すインスタンスを実行します。 – MaxSan