Как лучше всего это сделать для PHP? Есть ли какая-нибудь функция PHP, которая может это сделать, учитывая, что содержимое столбца может быть очень большим?
Если функция PHP недоступна, какую утилиту оболочки я могу вызвать?
Благодарность
Как лучше всего это сделать для PHP? Есть ли какая-нибудь функция PHP, которая может это сделать, учитывая, что содержимое столбца может быть очень большим?
Если функция PHP недоступна, какую утилиту оболочки я могу вызвать?
Благодарность
в PHP нет встроенных функций сравнения. но, ура для PEAR: Text_Diff (никогда не использовал его жестко, но в PEAR я доверяю).
и есть даже пакет PECL, xdiff
Подсказка: классы груши - это чистый php, пакеты pecl - это модули. обычно модули быстрее классов, но это также зависит от функциональности. вам просто нужно протестировать и оценить.
для хранения: я бы сохранил простой текст, а не различия. пространство дешево, многие базы данных (например, mysql) поддерживают сжатие данных (или вы можете де / сжимать в php), но если вы сохраняете открытый текст, вы не зависите от алгоритма сравнения и можете изменить его позже, если это необходимо.
если вам нужна скорость, вы можете сохранить как открытые тексты, так и различия.
Text_Diff
может использовать xdiff
. @hitautodestruct вы можете найти примеры по адресу: груша. php.net/manual/en/
- person ; 10.02.2013
Обычный процесс состоит в том, чтобы сохранить каждую отдельную ревизию и вычислить разницу, когда пользователь захочет ее просмотреть, возможно, кэширование этого вывода, если процесс дорогостоящий.
Вы можете сохранить базовую ревизию, а затем иметь набор различий, которые можно применить для получения предыдущих версий.
В любом случае следует пойти на уступку; первый вариант делает получение определенных версий недорогим за счет немного большей обработки, необходимой для различения; второй делает просмотр различий дешевым, но за счет потенциально дорогостоящего инкрементного исправления для получения конкретной версии.
Если содержимое очень велико и изменения незначительны, вы можете подумать о применении подхода «обратной дельты»: только последняя версия текста сохраняется в полном формате, а предыдущая версия отличается от последней. версия к предыдущей.
Это сэкономит много места для хранения, но при сравнении двух версий, в которых количество модификаций велико, стоимость процесса может быть значительной. В конце концов, это всегда компромисс между объемом памяти и требованиями к обработке.
Если вы не можете или не хотите использовать PEAR и PECL, вы все равно можете использовать утилиту diff, вызываемую exec. Я бы наверняка выбрал стандартный формат сравнения и никогда не разрабатывал собственный.