在应用diff补丁之前验证它

时间:2012-01-27 19:38:29

标签: php diff patch auto-update

我正在寻找一个可移植的差异库(No Pear,没有php非广泛支持的扩展 - 比如xdiff),它允许我为更新机制做文件补丁。我使用的diff文件使用统一格式。

我发现class.simplediff.php女巫非常好,(即使它不支持开箱即用的文件,只需要在字符串中加载文件)

但问题是我无法找到验证所有替换是否能够成功处理的方法。

您是否知道一个库可以在应用之前验证差异修补,或者您是否知道如何进行操作?

2 个答案:

答案 0 :(得分:0)

我想不出一种方法可以判断补丁是否有效 - 从逻辑上讲,就是这样。但是,如果您的补丁源被认为是“安全的”,您可以通过执行以下操作来检查它是否至少是有效的语法:

  1. copy要修补的文件
  2. apply补丁
  3. 尝试使用PHP cli(例如php file.php
  4. 执行文件

    如果第3步没有抛出致命异常,那么补丁可能会产生有效的PHP语法。

    如果补丁的来源不安全,你不会想这样做,因为执行任意PHP会导致有人控制你的机器。

答案 1 :(得分:0)

我已将patch.c代码翻译成PHP:

https://gist.github.com/1707075

patch.c代码本身有点混乱,PHP代码也是如此。大块验证有效,但它不像我需要的那样“安全” - 这就是为什么它不是我正在寻找的答案,但也许它会帮助其他人。

编辑:

我编写了一些东西。我还不确定它是否100%可靠,但到目前为止的结果是非常好的“在只读中验证以确保补丁成功应用”:https://github.com/idealtech/UnifiedDiffPatcher

希望它会帮助某人:)