在PHP中修补带有统一差异的字符串

时间:2014-06-03 14:52:57

标签: php diff patch

我正在寻找一种方法来修补PHP中的字符串,使用现有的统一差异。 xdiff_string_patch完全符合我的要求,但我的服务器上没有xdiff库。

有没有办法在vanilla PHP中执行此操作,还是应该使用 shell_exec(' patch ...')之类的内容?

此致

1 个答案:

答案 0 :(得分:1)

以下是我最终使用的代码:

/**
 * Applies a diff to a string
 * 
 * @param string $diff Diff
 * @param string $text String to patch
 * 
 * @return string Patched string
 * */
static function applyDiff($diff, $text)
{
    $tmpname = tempnam(sys_get_temp_dir(), "diff");
    $outname = tempnam(sys_get_temp_dir(), "diff");
    $tmp = fopen($tmpname, "w");
    $out = fopen($outname, "r");
    fwrite($tmp, $text.PHP_EOL);
    $proc = proc_open(
        'patch '.$tmpname.' -o '.$outname, array(
           0 => array("pipe", "r"),
           1 => array("pipe", "w"),
           2 => array("pipe", "w")
        ), $pipes
    );
    if (is_resource($proc)) {
        fwrite($pipes[0], $diff);
        fclose($pipes[0]);
        stream_get_contents($pipes[1]);
        $newText = stream_get_contents($out);
        fclose($pipes[1]);
        return $newText;
    }
}