脚本宝典收集整理的这篇文章主要介绍了php – 滚动你自己的纯文本Wiki(维基文章内的数据库),脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
滚动你自己的纯文本维基的任何资源怎么样?其他明文wiki如何处理文本文件的格式?
我知道我可以使用Markdown或Textile进行格式化.但我最感兴趣的是如何处理多用户编辑的纯文本存储.
我正在编写一个主要由数据库驱动的Web应用程序.我希望此数据库的至少一个文本字段采用类似wiki的格式.具体而言,此文本可由多个用户编辑,并能够回滚到任何版本.想想Last.FM的wiki / bio部分(几乎整个网站都是由数据库严格构建的,除了每个艺术家的这一部分).
到目前为止,我将MediaWiki拆分并将其嵌入数据库的方法似乎有点过分.我认为滚动我自己的纯文本wiki会更容易,并将此文件存储在数据库的相应文本字段中.
只需创建一个“版本”表,其中包含数据的“旧版本”,并将其链接回主表.
create table docs { id integer Primary key not null,version integer not null,create_date date,change_date date,create_user_id integer not null references users(id),change_user_id integer references users(id),text_data text } create table versions { id integer PRimary key not null,doc_id integer not null references docs(id),version integer,change_user integer not null references users(id),text_data text }
每当您更新原始文档时,都会将旧文本值复制到此表中,复制用户并更改日期并更改版本.
select version,change_date,change_user,text_data into l_version,l_change_data,l_change_user,l_text_data From docs where id = l_doc_id; insert into versions values (newid,l_doc_id,l_version,l_change_date,l_text_data); update docs set version = version + 1,change_date = Now,change_user = cur_user,text_data = l_new_text where id = l_doc_id;
这种方法的缺点是它是数据的完整副本(因此,如果你有一个大文档,版本会保持很大).您可以通过使用diff(1)和patch(1)之类的东西来缓解这种情况.
例如:
diff version2.txt version1.txt > difffile
然后,您可以将该差异存储为“版本1”.
为了从版本2恢复版本1,您获取版本2数据,使用diff文件数据在其上运行补丁,并为您提供v1.
如果你想从v3转到v1,你需要做两次(一次获得v2,然后再获得v1).
这会降低您的存储负担,但会增加您的处理(显然),因此您必须判断您希望如何执行此操作.
以上是脚本宝典为你收集整理的php – 滚动你自己的纯文本Wiki(维基文章内的数据库)全部内容,希望文章能够帮你解决php – 滚动你自己的纯文本Wiki(维基文章内的数据库)所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。