2010-12-15 3 views
1

2 xml 파일을 비교하고 PHP 및 Linux의 diff 명령을 사용하여 패치를 생성해야합니다.php의 exec 함수를 사용하여 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/local/out/upload/example_word_template/word/document.xml/var/local을/출력/업로드/example_word/워드/문서

사랑하는 여기에 내 코드입니다 .xml> /var/local/out/patch.patch

출력을 복사하여 붙여넣고 Linux에서 직접 실행하면 정상적으로 실행됩니다. 그러나 스크립트 자체는 패치 파일을 생성하지 않습니다. 무엇이 잘못 될 수 있습니까?

답변

2

사이에는 차이가없는 의미있는 동안은 diff 만 구문 수준에 있는지 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); 

참고 매뉴얼에서

예 실행 된 명령의 출력, 아마 당신은 아파치를 실행하는 사용자 파인더는 해당 폴더 또는 뭔가에 쓸 수있는 권한이 없습니다 ... :

$output=array();$status=0; 
exec($command,$output,$status); 
var_dump($output);var_dump($status); 
+0

를 출력했다 "배열 (0) {} INT (1)" –

+0

는 오류가 발생했습니다 @wilsonsilva. – alex

+1

동작이 허용되지 않는다고 생각합니다. http://www.pegasoft.ca/resources/boblap/99_b.html – Catalin

5

PHP에는 PECL extension for xdiff이 대신 있습니다. 시도 확인

<element foo="foo" bar="bar"/> 

<element 
    foo="foo" 
    bar="bar"/> 
+2

+1 뭔가 새로운 : 배웠 때문에 – alex

+1

이 @ 알렉스 그래서 내가 오늘했던 :) – Zuul

2

당신은 너무 같은 출력을 캡처 할 ...

$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); 
+0

출력은 "array (0) {}"이었습니다. 의미가 전혀 없습니다. 나는 아직도 리눅스 초보자이다. –

+1

@wilsonsilva 다른 의견에서 반환 된 상태가 '1'이라고하셨습니다. 이것은 오류가 있음을 의미합니다. 경로가 존재하는 파일을 가리 킵니까? – alex

+0

예. linux에서 직접 다음 명령을 실행하면 : "/ var/local/out/upload/examples/out/patch.patch "패치 파일이 생성됩니다. –

관련 문제