我正在寻找一种方法来修补PHP中的字符串,使用现有的统一差异。 xdiff_string_patch完全符合我的要求,但我的服务器上没有xdiff库。
有没有办法在vanilla PHP中执行此操作,还是应该使用 shell_exec(' patch ...')之类的内容?
此致
答案 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;
}
}