|
|
|
| Есть файл с данными, который часто перезаписывается копированием на новый файл разными пользователями.
В новом файле каждый раз сохраняется информация от старого файла и добавляется информация от нового пользователя.
Одновременно могут производить перезапись файла копированием несколько пользователей.
Как предотвратить коллизии от совместных действий пользователей. | |
|
|
|
|
|
|
|
для: roma67
(22.04.2012 в 20:22)
| | Перед редактированием файла снимайте хэш с его содержимого. После того, как пользователь отредактировал данные и хочет их записать, блокируйте файл по записи. Снова снимайте хэш - если он отличается, то сообщайте пользователю, что изменение невозможно, так как кто-то уже внес изменения. Если хэш тот же самый, то перезаписывайте содержимое файла. После чего снимайте блокировку с файла. | |
|
|
|
|
|
|
|
для: cheops
(22.04.2012 в 21:11)
| | Про хэш я и не додул, я размеры файлов сравнивал, НО.
1. Я честно скажу, я не понимаю что такое хэш, так как каждый раз, разные люди по-разному объясняют, а стандарта, что-бы была форма, прототип, корректное определение - я не видел.
2. При блокировке файла по записи и перезаписи copy() выдает ошибку. Но тут я внимательно еще посмотрю. | |
|
|
|
|
|
|
|
для: roma67
(23.04.2012 в 16:42)
| | Размер может не измениться, например, человек правит цифру. Хэш - это на пальцах "отпечатки пальцев" текста. Процедура получения последовательности символов, повторное применение которой к тому же тексту дает точно такую же последовательность. Есть хэши, которые не уникальны, т.е. разные тексты могут дать одну и ту же последовательность. Есть уникальные хэши, ни один текст не может дать такую же последовательность - у всех она уникальная. Для последнего случая можно использоваться алгоритм md5, который в PHP реализован в одноименной функции md5() - в качестве единственного параметра передаете ему текст, он возвращает - уникальный хэш. | |
|
|
|