svn_delete
svn_export
SVN Funktionen
PHP Manual

# svn_diff

(PECL svn >= 0.1.0)

svn_diff — Recursively diffs two paths

### Beschreibung

array svn_diff ( string `$path1` , int `$rev1` , string `$path2` , int `$rev2` )

Recursively diffs two paths, `path1` and `path2`.

> Hinweis: This is not a general-purpose diff utility. Only local files that are versioned may be diffed: other files will fail.

### Parameter-Liste

`path1`

  First path to diff. This can be a URL to a file/directory in an SVN repository or a local file/directory path.

  > Hinweis: Relative Pfade werden so aufgelöst, als ob das aktuelle Verzeichnis das wäre, in dem sich das PHP-Binary befindet. Um stattdessen das aktuelle Verzeichnis des aufrufenden Skripts zu nutzen, müssen sie die realpath()-Funktion oder dirname(__FILE__) zu Hilfe ziehen.

  Warnung

  If a local file path has only backslashes and no forward slashes, this extension will fail to find the path. Always replace all backslashes with forward slashes when using this function.

`rev1`

  First path's revision number. Use `SVN_REVISION_HEAD` to specify the most recent revision.

`path2`

  Second path to diff. See `path1` for description.

`rev2`

  Second path's revision number. See `rev1` for description.

### Rückgabewerte

Returns an array-list consisting of two streams: the first is the diff output and the second contains error stream output. The streams can be read using fread(). Returns `FALSE` or `NULL` on error.

The diff output will, by default, be in the form of Subversion's custom unified diff format, but an » external diff engine may be used depending on Subversion's configuration.

### Anmerkungen

Warnung

Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.

### Beispiele

Beispiel #1 Basic example

This example demonstrates the basic usage of this function, and the retrieval of contents from the stream:

`<?php
list($diff, $errors) = svn_diff(
'http://www.example.com/svnroot/trunk/foo', SVN_REVISION_HEAD,
'http://www.example.com/svnroot/branches/dev/foo', SVN_REVISION_HEAD
);
if (!$diff) exit;
$contents = '';
while (!feof($diff)) {
$contents .= fread($diff, 8192);
}
fclose($diff);
fclose($errors);
var_dump($contents);
?>`

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

    Index: http://www.example.com/svnroot/trunk/foo
    ===================================================================
    --- http://www.example.com/svnroot/trunk/foo        (.../foo) (revision 23)
    +++ http://www.example.com/svnroot/branches/dev/foo (.../foo) (revision 27)
     // further diff output

Beispiel #2 Diffing two revisions of a repository path

This example implements a wrapper function that allows a user to easily diff two revisions of the same item using an external repository path (the default syntax is somewhat verbose):

`<?php
function svn_diff_same_item($path, $rev1, $rev2) {
return svn_diff($path, $rev1, $path, $rev2);
}
?>`

Beispiel #3 Portably diffing two local files

This example implements a wrapper function that portably diffs two local files, compensating for the realpath() fix and the backslashes bug:

`<?php
function svn_diff_local($path1, $rev1, $path2, $rev2) {
$path1 = str_replace('\\', '/', realpath($path1));
$path2 = str_replace('\\', '/', realpath($path2));
return svn_diff($path1, $rev1, $path2, $rev2);
}
?>`

### Siehe auch

- » SVN documentation on svn diff

svn_delete
svn_export
SVN Funktionen
PHP Manual