Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 修订更改-直观显示更改 文章的回滚_Php_Mysql_Version Control_Rollback - Fatal编程技术网

Php 修订更改-直观显示更改 文章的回滚

Php 修订更改-直观显示更改 文章的回滚,php,mysql,version-control,rollback,Php,Mysql,Version Control,Rollback,我删除了这个问题的大部分内容,因为我意识到我应该重新措辞。 这里是重新措辞: 我怎样才能通过罢工实现一些东西?将一个修订更新与上一个修订更新进行比较。我不想要修订或版本控制本身,因为我可以在我的mySQL数据库中处理它,但我希望能够在用户希望看到的几乎像changelog的页面上,通过更新,以绿色和红色标记直观地识别更改 我已经看到了类似的修改,所以,想有这样的东西 我想我现在的问题与原来的问题根本不同,对不起 但是这里:我觉得你的建议完全合理:每个修订版一行一个表,每个可显示文章一行一个表,有

我删除了这个问题的大部分内容,因为我意识到我应该重新措辞。 这里是重新措辞:

我怎样才能通过罢工实现一些东西?将一个修订更新与上一个修订更新进行比较。我不想要修订或版本控制本身,因为我可以在我的mySQL数据库中处理它,但我希望能够在用户希望看到的几乎像changelog的页面上,通过更新,以绿色和红色标记直观地识别更改

我已经看到了类似的修改,所以,想有这样的东西

我想我现在的问题与原来的问题根本不同,对不起


但是这里:

我觉得你的建议完全合理:每个修订版一行一个表,每个可显示文章一行一个表,有效链接到修订版表中的当前修订版。那有什么冗长的


你可以在一个表中用某种当前列来伪造它,但是你必须确保任何特定文章只有一个修订是最新的,这对我来说听起来很讨厌。

你的建议对我来说完全合理:每个修订一行一个表,和一个表,每个可显示文章有一行,有效链接到修订表中的当前修订。那有什么冗长的


你可以在一个表中用某种当前列来伪造它,但是你必须确保任何特定文章只有一个版本是最新的,这对我来说听起来很糟糕。

你的问题可以总结为版本控制是如何实现的?通常情况下,每个修订版都作为与旧版本的差异而存储,而不是重新存储整个文本,尽管有很多变化。大多数系统可以/将存储所有非文本格式的完整版本,但它们无法将更改隔离为行。

您的问题可以概括为如何实现版本控制?通常情况下,每个修订版都作为与旧版本的差异而存储,而不是重新存储整个文本,尽管有很多变化。大多数系统可以/将存储所有非文本格式的完整版本,这些版本无法将更改隔离为行。

尝试将其存储为XML

就我所能理解的问题而言。如果我们将每一行存储为一行,就可以解决这个问题。 但这将是不好的,因为行的数量急剧增加

因此,将数据存储在一行中作为

<row num=1>How would you structure something like this. I want to allow my authors to create articles. However, </row>
<row num=2>should they choose, I would like to be able to allow each save to be a new revision and then allow each </row>
............
除xml格式外,所有内容都在一行中。
检索时,可以使用num属性比较行。

尝试将其存储为XML

就我所能理解的问题而言。如果我们将每一行存储为一行,就可以解决这个问题。 但这将是不好的,因为行的数量急剧增加

因此,将数据存储在一行中作为

<row num=1>How would you structure something like this. I want to allow my authors to create articles. However, </row>
<row num=2>should they choose, I would like to be able to allow each save to be a new revision and then allow each </row>
............
除xml格式外,所有内容都在一行中。
当您检索它时,您可以使用num属性比较行。

如果我正确理解您的标记,那么您正在寻找PHP中的diff实现。对的如何将其存储在数据库中取决于我们目前无法真正看到的因素——我们不知道您打算如何使用多种语言等。无论如何,剩下的是,每一次修订都将以某种方式成为一个mysql文本字段,在一个记录中。然后,您将使用diff比较其中的两个修订

下面是一些有趣的PHP实现。我没有与任何人合作过,因此我无法告诉你他们有多好,是否满足你的要求,但他们可能至少是一个起点:

有一个问题,你必须安装它,看看它产生什么样的结果,似乎没有在线演示

基于此,有一些示例输出看起来非常有希望


根据您的服务器配置,您可能还可以使用Linux命令行diff,例如。

如果我正确理解了您的标记,您正在寻找在PHP中实现diff。对的如何将其存储在数据库中取决于我们目前无法真正看到的因素——我们不知道您打算如何使用多种语言等。无论如何,剩下的是,每一次修订都将以某种方式成为一个mysql文本字段,在一个记录中。然后,您将使用diff比较其中的两个修订

下面是一些有趣的PHP实现。我没有与任何人合作过,因此我无法告诉你他们有多好,是否满足你的要求,但他们可能至少是一个起点:

有一个问题,你必须安装它,看看它产生什么样的结果,似乎没有在线演示

基于此,有一些示例输出看起来非常有希望

根据您的服务器配置,您也可以使用Linux命令行diff。例如。

第1部分:原始问题中的数据结构:

一排 每个版本-VS-一行中的所有版本: 每行存储一个修订,不要将所有修订作为XML或任何其他支持多值的类型打包到一行中。最初,文章可能会被编辑几次,并且作者会要求修改,但稍后应用程序只会要求最新版本。在这种情况下,没有必要加载所有更改历史记录

一张表-对-两张表: 建议使用两个表格: -文章[活动、主键、授权、FK等] -ArticleRevisions[ArticleId,英国,RevisionId,英国,内容,修订意见,修订时间戳,…] 在任何情况下,都要存储完整的文章,不要使用delta类型的实现——您的用例并不要求复杂性,而是简单性。此外,您还可以在文章表中冗余存储LatestRevisionID,以便于检索最新版本。 您可以选择具有一个表的解决方案。有关示例,请参见第76行表格“wiki”。。。在的数据库架构中。此外,您还可以通过查看和的示例来了解其简单Wiki是如何实现的,这与StackOverflow上的示例非常相似

第2部分:检测和呈现两个版本之间的差异: 首先,我们不能直观地识别更改,而是通过编程来识别更改。您需要的是一个库,其中给定两个文件字符串/字符串列表将为您提供不同的结果。在许多情况下,我们选择逐行比较,如图所示。然后,你需要一个方法来展示这些结果,以便与绿牌、红牌、三振等一起使用

虽然我对PHP及其库知之甚少,但以下链接应该可以帮助您入门:

带有C实现和算法解释的链接 -python的difflib,它是 -javascript的文本差异 第1部分:原始问题的数据结构:

每个版本一行-VS-一行中的所有版本: 每行存储一个修订,不要将所有修订作为XML或任何其他支持多值的类型打包到一行中。最初,文章可能会被编辑几次,并且作者会要求修改,但稍后应用程序只会要求最新版本。在这种情况下,没有必要加载所有更改历史记录

一张表-对-两张表: 建议使用两个表格: -文章[活动、主键、授权、FK等] -ArticleRevisions[ArticleId,英国,RevisionId,英国,内容,修订意见,修订时间戳,…] 在任何情况下,都要存储完整的文章,不要使用delta类型的实现——您的用例并不要求复杂性,而是简单性。此外,您还可以在文章表中冗余存储LatestRevisionID,以便于检索最新版本。 您可以选择具有一个表的解决方案。有关示例,请参见第76行表格“wiki”。。。在的数据库架构中。此外,您还可以通过查看和的示例来了解其简单Wiki是如何实现的,这与StackOverflow上的示例非常相似

第2部分:检测和呈现两个版本之间的差异: 首先,我们不能直观地识别更改,而是通过编程来识别更改。您需要的是一个库,其中给定两个文件字符串/字符串列表将为您提供不同的结果。在许多情况下,我们选择逐行比较,如图所示。然后,你需要一个方法来展示这些结果,以便与绿牌、红牌、三振等一起使用

虽然我对PHP及其库知之甚少,但以下链接应该可以帮助您入门:

带有C实现和算法解释的链接 -python的difflib,它是 -javascript的文本差异
我不知道您处理的是不同的代码还是更一般的文档。几年前,我做了一个实现,它显示了不同版本的wiki文档,两个版本并排显示,旧版本中的删除标记为红色,新版本中的添加标记为绿色。所有这些都是在javascript中完成的,首先只提取HTML的文本部分,使用diff对它们进行区分,然后使用diff结果来确定使用样式更改背景颜色来突出显示哪些内容。这是相当棘手的,不是完美的,但足够接近,并涉及相当多的DOM操作。因此,这是可行的,但并不容易。

我不知道您是在处理不同的代码还是更一般的文档。几年前,我做了一个实现,它显示了不同版本的wiki文档,两个版本并排显示,旧版本中的删除标记为红色,新版本中的添加标记为绿色。所有这些都是在javascript中完成的,首先只提取HTML的文本部分,使用diff对它们进行区分,然后使用diff结果来确定使用样式更改背景颜色来突出显示哪些内容。这是相当棘手的,不是完美的,但足够接近,并涉及相当多的DOM操作。所以,这是可行的,但不是

不容易。

我想,因为我也在管理无数次的语言修订。这似乎是一个相当令人头疼的问题。然而,我在上面建议的是我用来管理模板的方法,它工作得很好。我该如何在这里用删除线进行类似的更改?@Laykes:你的意思是,同一篇文章的其他非默认语言版本可能很少?不,这些语言是偶然的。如果我能用一种语言做到这一点,我知道我能用多种语言做我想做的事情。我想添加一个像on这样的功能,这样你就可以知道每个版本都添加了什么和删除了什么。我想,因为我也在管理无限多的语言版本。这似乎是一个相当令人头疼的问题。然而,我在上面建议的是我用来管理模板的方法,它工作得很好。我该如何在这里用删除线进行类似的更改?@Laykes:你的意思是,同一篇文章的其他非默认语言版本可能很少?不,这些语言是偶然的。如果我能用一种语言做到这一点,我知道我能用多种语言做我想做的事情。我想添加一个像on这样的功能,这样你就可以知道在每个版本中添加了什么和删除了什么。我认为这不是一个现实的选择。我熟悉版本控制并每天使用git和svn,但是,因为作者可以选择使用markdown或TinyMCE HTML WYSIWYG编辑器,我认为对它创建的HTML进行区分是不可能的。所以,简短的回答,我可能无法在这方面做区分。@Laykes:毫无疑问,你可以在这方面做区分。唯一的问题是这能帮你省多少钱。要做你想要的删除线显示,你几乎必须做一些差异。杰瑞,我到底要怎么做差异?我真的不知道该怎么编码。我是一个有竞争力的编码员,所以我只需要知道如何从Y中减去X,并删除任何没有留下的东西。看起来有点迟钝。@Laykes:diff的算法有点难以评论。McIlroy和Hunt在一篇论文中描述了经典的RCS差异。当然,几乎任何类似SVN或Git的东西都会有一个源到一个可用。顺便说一句,使用现有代码可能比尝试编写新代码更好……我认为这不是一个现实的选择。我熟悉版本控制并每天使用git和svn,但是,因为作者可以选择使用markdown或TinyMCE HTML WYSIWYG编辑器,我认为对它创建的HTML进行区分是不可能的。所以,简短的回答,我可能无法在这方面做区分。@Laykes:毫无疑问,你可以在这方面做区分。唯一的问题是这能帮你省多少钱。要做你想要的删除线显示,你几乎必须做一些差异。杰瑞,我到底要怎么做差异?我真的不知道该怎么编码。我是一个有竞争力的编码员,所以我只需要知道如何从Y中减去X,并删除任何没有留下的东西。看起来有点迟钝。@Laykes:diff的算法有点难以评论。McIlroy和Hunt在一篇论文中描述了经典的RCS差异。当然,几乎任何类似SVN或Git的东西都会有一个源到一个可用。顺便说一句,似乎使用现有代码可能比尝试编写新代码更好……如果有其他答案,我将不胜感激。如果您有任何想法,请添加。每个版本存储一行是唯一的方法。你不能在一行中组合100个版本,这对我来说似乎不可行。不要贪心。你想要版本控制的内容是什么格式?文本富文本?HTML?如果您还有其他问题,我将不胜感激。如果您有任何想法,请添加。每个版本存储一行是唯一的方法。你不能在一行中组合100个版本,这对我来说似乎不可行。不要贪心。你想要版本控制的内容是什么格式?文本富文本?HTML?