1

我正在尝试设置一个类来跟踪不同作者对内容的更改。我做了 RnD 并发现 text_Diff 是负责相同的 pear 包。后来,text_diff 维护在

' http://pear.horde.org/ '

我现在正在尝试运行该示例

include_once "Text/Diff.php";
include_once "Text/Diff/Renderer.php";

$from_text=file('file.html');
$to_text=file('file_edited.html');

$diff = new Horde_Text_Diff($from_text, $to_text);
$renderer = new Horde_Text_Diff_Renderer();
echo $renderer->render($diff);

我收到错误“Horde_String”

我找不到课程,有人知道这门课吗?有多个引擎,如“Native”、“XDiff”、“String”和“Shell”......但我无法找到它们是什么以及何时使用哪个......

解决此错误的任何帮助将是一个很大的帮助。

谢谢

4

2 回答 2

0

我挣扎了几个小时试图让它发挥作用。最后,我必须通过输入命令来安装 Horde_Text_Diff(安装 Keelan 评论中链接问题中描述的 Autoloader):

梨安装 Horde_Autoloader 梨安装 Horde_Text_Diff

这会安装我认为您需要的软件包。然后,您需要通过调整以下代码以匹配系统的路径来正确调用自动加载程序包。

require_once 'Horde/Autoloader.php';
require_once 'Horde/Autoloader/ClassPathMapper.php';
require_once 'Horde/Autoloader/ClassPathMapper/Default.php';

$autoloader = new Horde_Autoloader();
$autoloader->addClassPathMapper( new Horde_Autoloader_ClassPathMapper_Default('/usr/share/pear') );
$autoloader->registerAutoloader();

然后,如果一切顺利,您应该能够通过执行以下操作来调用和使用该类:

$check_diff = new Horde_Text_Diff( $engine = 'auto', $params = array( $from_text, $to_text ) );
$renderer = new Horde_Text_Diff_Renderer_Inline();
echo $renderer->render($check_diff);

虽然这对我来说并不完全有效,因为我发现它只比较字符串中的第一个字符。这是一个与让课程正常工作无关的新问题:)

于 2013-08-17T04:41:52.877 回答
0

这是我的方法,它不使用 Hoard 自动加载器:

spl_autoload_register(function ($class_name) {
    if (substr($class_name, 0, strlen('Horde_')) != 'Horde_')
        return false;

    $file = substr($class_name, strlen('Horde_')); // omit if not needed
    $file = str_replace("_", DIRECTORY_SEPARATOR, $file);
    return include_once($file . '.php');
});

function diff($old, $new)
{
    $td = new Horde_Text_Diff('auto', array($old, $new));
    $rend = new Horde_Text_Diff_Renderer_Unified();
    return $rend->render($td);
}
于 2019-01-30T23:33:19.887 回答