Как выполнять операции файловой системы в транзакции с помощью php?

Я ищу способы реализовать операции с файловой системой, используя php с поддержкой транзакций. Например, если я выполняю операции, такие как перемещение, копирование и удаление внутри транзакции, если один из них не работает, script должен вернуть все те операции, которые уже выполнены. Я как бы бессловесный и ищу руководство, как это можно достичь. И если существуют доступные библиотеки или решения? Прошу прощения, если вопрос звучит неопределенно.

Ответ 1

Один из вариантов - рассмотреть возможность хранения ваших файлов как BLOB в базе данных, а не как файлов. Они будут поддерживать транзакции и все другие функции вашей базы данных.

Можно поддерживать транзакции в передовых файловых системах, таких как ZFS, но не напрямую с PHP, а ZFS по умолчанию не установлен на Linux.

Ответ 2

Наиболее распространенный шаблон для этого - копирование всего в другое место, работа с копией и замена оригиналов, если все идет правильно.

Что-то подсказывает мне, что для этого также могут быть полезны обтекатели потоков PHP. Можно переопределить протокол "file://" и работать в виртуальной файловой системе (доказательство концепции: https://github.com/Respect/Test#streamwrapper).

Ответ 3

Файловые системы - в отличие от систем управления базами данных - не поддерживают транзакции. Однако некоторые из них обеспечивают то, что вам нужно для осуществления транзакций; это блокировка и регистрация. Регистрация не будет вашей проблемой, потому что вы можете сделать это и в php, но вам понадобится файловая система, которая обеспечивает блокировку файлов.

Я рекомендую вам не реализовывать что-либо подобное вам - есть много проблем, с которыми вы могли столкнуться. Здесь ребята базы данных оглядываются на историю исследований десятилетий.

Но если вам нужно, вы можете (для начала) реализовать что-то вроде Двухфазная блокировка в php. Кроме того, вы можете подумать об использовании шаблона , который помогает с отменой функциональности вашего отката.