在Linux中使用php的exec函数使用diff

1 php linux diff compare exec

我必须比较2个xml文件并使用php和Linux的diff命令生成补丁.这是我的代码:

<?php

// script file location: /var/local/out/upload.php
// ...

// $templateName file location: /var/local/out/upload/example_word_template/word/document.xml
// $filename file location: /var/local/out/upload/example_word/word/document.xml

// $templateName value: upload/example_word_template/word/document.xml
// $filename value: upload/example_word/word/document.xml

$command = "diff /var/local/out/$templateName /var/local/out/$filename > /var/local/out/patch.patch";
exec($command);
echo($command);

?>
Run Code Online (Sandbox Code Playgroud)

浏览器输出:

diff /var/local/out/upload/example_word_template/word/document.xml /var/local/out/upload/example_word/word/document.xml> /var/local/out/patch.patch

如果我复制并粘贴输出并直接在Linux中执行它,它运行得很好.但脚本本身不会生成补丁文件.可能有什么不对?

Gor*_*don 5

PHP有一个针对xdiffPECL扩展,你可能想要尝试.

手册中的示例 xdiff_file_diff

$old_version = 'my_script.php';
$new_version = 'my_new_script.php';

xdiff_file_diff($old_version, $new_version, 'my_script.diff', 2);
Run Code Online (Sandbox Code Playgroud)

请注意,diff仅在语法层面上,而在语义上没有区别

<element foo="foo" bar="bar"/>
Run Code Online (Sandbox Code Playgroud)

<element 
    foo="foo"
    bar="bar"/>
Run Code Online (Sandbox Code Playgroud)