วันอาทิตย์ที่ 6 ธันวาคม พ.ศ. 2558

Create diff file with php xdiff

โค้ดแสดงบรรทัดที่มีการเปลี่ยนแปลงในไฟล์เริ่มต้นและไฟล์อัพเดตล่าสุด
จะมีประโยชน์ในการ compare ให้โปรแกรมเมอร์หรือผู้ที่ต้องการตรวจสอบแก้ไขไฟล์
ให้สามารถหาตำแหน่งแก้ไขเพิ่มเติมหรือแก้ปัญหาที่เกิดขึ้นได้อย่างสะดวกรวดเร็ว
ใช้คำสั่ง xdiff_file_diff ซึ่งต้อง download dll มาลงเป็น extension ก่อนครับที่ลิงค์
http://pecl.php.net/package/xdiff
<?php

function rec($path,$target,$diff){
 $h = opendir($path);
 $time = time();
 $day = 60*60*24;
 $dayAmount = $day*5;
 while($file = readdir($h)){
  if ($file != '.' && $file != '..' && $file != '.git' && $file != 'nbproject'){
   if (is_dir($path.'/'.$file)){
    rec($path.'/'.$file,$target.'/'.$file,$diff.'/'.$file);
   }else{
    $mtime = filemtime($target.'/'.$file);
    if ($time - $mtime < $dayAmount){
     $p1 = str_replace("\\",'/',$path).'/'.$file;
     $p2 = str_replace("\\",'/',$target).'/'.$file;
     $p3 = str_replace("\\",'/',$diff).'/'.$file;
     $tdir = dirname($p3);
     @mkdir($tdir,0777,true);
     xdiff_file_diff($p1, $p2, $p3, 2);
     
     echo "<pre>\r\n=====================================================\r\n\r\n";
     echo '<strong>',str_replace('C:/wamp/www/diff','',$p3)."</strong><br>";
     $a = file($p3);
     foreach($a as $line){
      if (substr($line,0,1)=='-'){
       echo '<span style="color:red">',htmlspecialchars(substr($line,1)),'</span>';
      }
      elseif (substr($line,0,1)=='+'){
       echo '<span style="color:limegreen">',htmlspecialchars(substr($line,1)),'</span>';
      }
      elseif (substr($line,0,2)=='@@'){
       preg_match('/^@@ \-\d+\,\d+ \+(\d+)\,\d+/',$line,$matches);
       echo '<span style="color:#6495ED;">บรรทัดที่  '.$matches[1],'</span>';
      }
      else{
       echo htmlspecialchars($line);
      }
     }
     echo '</pre>';
    }
   }
  }
 }
}

header('Content-type:text/html;charset=utf-8');
rec('C:\wamp\www\init-code','C:\wamp\www\update-code','C:\wamp\www\diff');

ไม่มีความคิดเห็น:

แสดงความคิดเห็น