RkBlog

Hardware, programming and astronomy tutorials and reviews.

Xdiff

Opis rozszerzenia PHP do generowania zestawień różnic z dwóch plików/tekstów (DIFF) stosowanych do np. porównywania zmian w kodzie, czy artykułach na wiki

XDiff to rozszerzenie do php umożliwiające generowanie diffów - określania różnic pomiędzy dwoma łańcuchami (plikami). Diffy są często stosowane w skryptach wiki czy tyczących się zarządzania projektami do pokazywania różnic kodu dla różnych wersji danej aplikacji. To rozszerzenie ma tą zaletę że jest rozszerzeniem binarnym - jest szybsze od odpowiedników napisanych w PHP, oraz druga sprawa - jest proste w użyciu.

Instalacja Linux/Unix

- Pobierz bibliotekę libxdiff (link) lub sprawdź czy ewentualnie jest w repozytorium twojej dystrybucji (mało popularna)
- Kompilacja standardowa (./configure --prefix=/usr && make && make install)
- Pobierz rozszerzenie z PECL (link na początki)
) - Kompilacja standardowa (phpize && ./configure && make && make install)
- w php.ini dodaj extension="xdiff.so"

Używanie

$diff = xdiff_string_diff($stary_string, $nowy_string);
Zwróci łańcuch zawierający te elementy łańcucha, w którym nastąpiły zmiany.
<?php
$old_article = file_get_contents('plik1.txt');
$new_article = file_get_contents('plik2.txt');

$diff = xdiff_string_diff($old_article, $new_article);
if (is_string($diff))
	{
	$diff = explode("
", $diff);
	$new = explode("
", $new_article);
	$old = explode("
", $old_article);
	foreach($new as $key => $r)
		{
		IF(in_array('+'.$r, $diff))
			{
			echo '<font color="blue">+'.$r.'</font><BR>';
			}
		else
			{
			echo $r.'<BR>';
			IF(substr($diff[$key], 0, 1) == '-')
				{
				echo '<font color="red">'.$diff[$key].'</font><BR>';
				}
			}
		}
	}
Ten kod użyje nowej wersji jako wzorca i wyświetli ją z pokolorowanymi zmianami (co zniknęło, co doszło)
RkBlog

14 July 2008;

Comment article