我必须比较两个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);
?>浏览器输出:
比较本地>/var/ /var/local/out/upload/example_word_template/word/document.xml /var/local/out/upload/example_word/word/document.xml /out/patch.patch
如果我复制并粘贴输出,然后直接在Linux中执行它,它会运行得很好。但是脚本本身不会生成补丁文件。会出什么问题呢?
发布于 2010-12-15 19:26:43
尝试检查执行命令的输出,可能您正在运行apache的用户没有权限写入该文件夹或其他内容...:
$output=array();$status=0;
exec($command,$output,$status);
var_dump($output);var_dump($status);发布于 2010-12-15 19:21:22
PHP有一个PECL extension for xdiff,你可能想试一下。
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);请注意,diff仅在语法级别上,而在语义上,
<element foo="foo" bar="bar"/>和
<element 
    foo="foo"
    bar="bar"/>发布于 2010-12-15 19:26:54
您想要像这样捕获输出...
$command = "diff /var/local/out/$templateName /var/local/out/$filename > /var/local/out/patch.patch";
exec($command, $output);
var_dump($output);你可以像这样重新组装线条...
echo join("\n", $output);https://stackoverflow.com/questions/4449282
复制相似问题