PHP 8.4.1 Released!

svn_diff

(PECL svn >= 0.1.0)

svn_diffРекурсивно сравнивает два файла

Описание

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

Функция рекурсивно сравнивает два файла по путям path1 и path2.

Замечание:

Функция — не универсальная утилита сравнения файлов. Функция сравнивает только локальные файлы с версиями: сравнение других файлов вызовет ошибку.

Список параметров

path1

Первый путь к файлу, который требуется сравнить. Параметр принимает URL-адрес файла или директории в SVN-репозитории или путь к локальным файлу или директории.

Замечание: Функция вычислит относительные пути так, как если бы текущая рабочая директория была домашней папкой самого PHP. Чтобы использовать рабочую директорию вызывающего скрипта, пользуются функцией realpath() или dirname(__FILE__).

Внимание

Модуль не найдёт путь, если путь к локальному файлу содержит только обратные слеши (\) и не содержит прямые слеши (/). При работе с функцией обратные слеши (\) заменяют прямыми слешми (/).

rev1

Номер ревизии первого файла. Последнюю ревизию задают константой SVN_REVISION_HEAD.

path2

Второй путь к файлу по аналогии с параметром path1.

rev2

Номер ревизии второго файла по аналогии с параметром rev1.

Возвращаемые значения

Функция возвращает массив со списком из двух потоков: первый — вывод различий файлов; второй — вывод потока ошибок. Потоки считывают функцией fread(). Функция возвращает false или null, если возникла ошибка.

По умолчанию функция выводит различия в унифицированном пользовательском формате Subversion, но в зависимости от конфигурации иногда сравнивает файлы » внешним движком сравнения.

Примеры

Пример #1 Пример базового сравнения файлов

Пример показывает базовое сравнение файлов функцией и извлечение содержимого из потока.

<?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);

?>

Результат выполнения приведённого примера:

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)
// Остальной вывод diff

Пример #2 Пример вывода различий между двумя ревизиями одного файла

Пример реализует функцию-обёртку, которая помогает пользователю легко сравнивать две ревизии одного и того же элемента по внешнему пути к репозиторию; синтаксис по умолчанию избыточен:

<?php

function svn_diff_same_item($path, $rev1, $rev2)
{
return
svn_diff($path, $rev1, $path, $rev2);
}

?>

Пример #3 Пример более удобного способа вывода различий между двумя файла

Пример реализует функцию-обёртку, которая переносимо сравнивает два локальных файла, и компенсирует исправление функции realpath() и ошибку с обратными слешами.

<?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);
}

?>

Примечания

Внимание

Это ЭКСПЕРИМЕНТАЛЬНАЯ функция. Не исключается, что поведение, название и документацию функции изменят без уведомления в следующих версиях PHP. За включение функции в код отвечает программист.

Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top