2009-12-16 2 views
2

사용자가 문서를 변경할 수있는 PHP 응용 프로그램이있는 경우 각 문서에 대한 개정 추적을 구현하는 가장 좋은 방법은 무엇입니까? svn 및 다른 SCM이 코드로 수행하는 것처럼 각 개정판의 저장소가 분리되도록 (즉, 변경된 내용 만 저장해야 함) 아주 간단한 수준에서 어떻게 작동하는지 알지만, 구현을 생각할 때 약간 혼란 스럽습니다.PHP에서 문서 개정 제어를 분리

맨 먼저이 책을 읽는 데 도움이되는 도서관이 있다면 궁금합니다. 그래서 내 자신을 완전히 굴릴 필요가 없습니다.

원본 문서 만 전체 텍스트로 유지 한 다음 변경 내용을 저장해야합니까, 아니면 최신 문서의 전체 텍스트를 유지해야하며 수정 될 때마다 차이점을 저장해야합니까? 이전 버전 중 하나로서?

이전 버전 인 경우 사이트에 표시 할 페이지를 가져 오려면 처음부터 시작해야하며 현재 버전에 도달 할 때까지 반복적으로 개정판을 기반으로 데이터를 업데이트해야합니까? 많은 개정이 있으면 고통스럽게 느려지지 않을까요?

페이지를 쉽게 deltifying하고 재구성하기 위해 PHP에서 diff/patch 유형 작업을 수행 할 수 있습니까?

페이지를 편집 할 때 페이지에 자물쇠가 있어야할까요? 또는 페이지가 '충돌 상태'에 빠지게하고 충돌 해결 작업을 수행하게합니다. 두 파트의 사용자가 다른 파트를 수정하는 경우 두 페이지의 페이지를 동시에 수정할 수있게합니다.이 작업이 얼마나 어려울 지 미친 생각입니다. 아!

답변

2

previous SO question이 도움이 될 수 있습니다.

+0

감사합니다. 이렇게하면 diff가 도움이되지만 수정 내용을 저장하는 방법은 무엇입니까? –

+1

전체 버전을 최신 버전으로 저장 한 다음 기록을 diff 파일로 저장하는 것이 좋습니다. 그렇지 않으면 현재 버전에 큰 성능 병목 현상이 발생할 수 있습니다 (대부분의 요청에 해당). – Amber

+1

또한, 충돌 해결 방법에 관한 한, Mediawiki에서 사용하는 것과 동일한 시스템을 사용합니다. 사용자가 페이지 편집을 시작한 시점과 마지막으로 문서를 편집 한 시점을 추적합니다. 마지막 편집 시간이 사용자가 편집을 시작한 날짜보다 늦은 경우 사용자가 저장을 취소하면 새 버전과 편집 된 버전이 모두있는 충돌 페이지가 표시되고 저장을 취소하거나 새 버전을 다음과 같이 편집해야합니다. 변경 사항을 추가하십시오. 구현하는 것이 매우 간단하고 사용자가 작업하기가 훨씬 쉽습니다. – Amber

0

왜 Subversion 서버를 사용하지 않습니까? exec() 또는 그와 비슷한 것을 사용하여 콘솔에서 클라이언트에 액세스 할 수 있습니다. 이것이 수정 소프트웨어를 작성하지 않는 한 처음부터 그런 것을 구현할 가치는 없습니다.

+0

위키피디아와 다른 위키 사이트가하는 것과 같을 것입니다. 나는 워드 프레스에서도 그것을 할 수있는 방법이 있다고 믿는다. 그것은 CMS를위한 것이다. 나는 하나의 서버에 전체 시스템을 갖고 싶고, 배포 될 것이므로 가능한 한 적은 의존성을 갖고 싶다. –