A simple diff script, show file's changed lines in bold text

PHP programming forum. Ask questions or help people concerning PHP code. Don't understand a function? Need help implementing a class? Don't understand a class? Here is where to ask. Remember to do your homework!

Moderator: General Moderators

A simple diff script, show file's changed lines in bold text

Postby TildeHash » Sun May 27, 2012 12:38 am

Anyone have any use for something like this?
Syntax: [ Download ] [ Hide ]
<table width="100%" style="font-family: monospace;">
<tbody>
<tr>
<td>
Current File:
</td>
<td>
Old File:
</td>
</tr>
<tr>
<td valign="top">
<?php
        $curfile = explode("\n", file_get_contents('testdoc.txt'));
        $oldfile = explode("\n", file_get_contents('testdoc_old.txt'));
        $linecount = (count($curfile) > count($oldfile)) ? count($curfile) : count($oldfile);

        for ($c = '0'; $c != $linecount; $c++) {
                if ($curfile[$c] === $oldfile[$c]) {
                        echo $curfile[$c] . "<br>\n";
                } else {
                        echo '<b>' . $curfile[$c] . "</b><br>\n";
                }
        }
?>
</td>
<td valign="top">
<?php
        echo str_replace("\n", "<br>\n", file_get_contents('testdoc_old.txt'));
?>
</td>
</tr>
</tbody>
</table>

If so, enjoy!
User avatar
TildeHash
Forum Commoner
 
Posts: 43
Joined: Fri Jul 16, 2010 7:17 am
Location: Apple Valley, California

Re: A simple diff script, show file's changed lines in bold

Postby social_experiment » Sun May 27, 2012 7:18 am

Just a note; a integer is doesn't require single quotes (or any quotes) when assigning it to a variable;
Syntax: [ Download ] [ Hide ]
<?php
$c = '0'; $c != $linecount; $c++
// to this
$c = 0; $c != $linecount; $c++
?>

The script will probably still work but it's not required
“Don’t worry if it doesn’t work right. If everything did, you’d be out of a job.” - Mosher’s Law of Software Engineering
User avatar
social_experiment
DevNet Master
 
Posts: 2774
Joined: Sun Feb 15, 2009 12:08 pm
Location: .za

Re: A simple diff script, show file's changed lines in bold

Postby TildeHash » Mon May 28, 2012 12:03 am

Update - Comparison of Individual Words, bug fix.
Syntax: [ Download ] [ Hide ]
<?php

// Copyright (C) 2012 Jacob Barkdull
//
//      This program is free software: you can redistribute it and/or modify
//      it under the terms of the GNU Affero General Public License as
//      published by the Free Software Foundation, either version 3 of the
//      License, or (at your option) any later version.
//
//      This program is distributed in the hope that it will be useful,
//      but WITHOUT ANY WARRANTY; without even the implied warranty of
//      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//      GNU Affero General Public License for more details.
//
//      You should have received a copy of the GNU Affero General Public License
//      along with this program.  If not, see <http://www.gnu.org/licenses/>.


// Display source code
if (basename($_SERVER["PHP_SELF"]) == basename(__FILE__) && isset($_GET["source"])) {
        header("Content-type: text/plain");
        exit(file_get_contents(basename($_SERVER["PHP_SELF"])));
}

// HTML Table
echo '<table width="100%">' . "\n<tbody>\n<tr>\n";
echo '<td valign="top">' . "\nCurrent Version:<hr>\n<pre>\n";

// Replace '<' and '>' Characters
function replace($input) {
        return str_replace(array('<', '>'), array('&lt;', '&gt;'), $input);
}

// Line Arrays
$cv = explode("\n", replace(file_get_contents('testdoc.txt'))); // Current Version
$ov = explode("\n", replace(file_get_contents('testdoc_old.txt'))); // Old Version

// Count Lines - Set to Longer Version
$lc = (count($cv) > count($ov)) ? count($cv) : count($ov);

// Fix Mismatched Line Counts
for ($flc = count($ov); $flc != $lc; $flc++) {
        $ov["$flc"] = '';
}

for ($l = '0'; $l != $lc; $l++) {
        // Word Arrays
        $cw = explode(' ', $cv["$l"]); // Current Version
        $ow = explode(' ', $ov["$l"]); // Old Version

        // Count Words - Set to Longer Version
        $wc = (count($cw) > count($ow)) ? count($cw) : count($ow);

        // Fix Mismatched Word Counts
        for ($fwc = count($ow); $fwc != $wc; $fwc++) {
                $ow["$fwc"] = '';
        }

        // If each line is identical, just echo the normal line. If not,
        // check if each word is identical. If not, wrap colored "<b>"
        // tags around the mismatched words.
        if ($cv["$l"] !== $ov["$l"]) {
                for ($w = '0'; $w != $wc; $w++) {
                        if ($cw["$w"] === $ow["$w"]) {
                                echo $cw["$w"];
                                echo ($w != ($wc - 1)) ? ' ' : "\n";
                        } else {
                                echo '<b style="color: #00BB00;">' . $cw["$w"];
                                echo ($w != ($wc - 1)) ? '</b> ' : "</b>\n";
                        }
                }
        } else {
                echo $cv["$l"] . "\n";
        }
}

// Ending HTML Tags
echo "</pre>\n</td>\n<td>&nbsp;</td>\n";
echo '<td valign="top">' . "\nOld Version:<hr>\n<pre>\n";

// Read and Display Old Version
echo replace(file_get_contents('testdoc_old.txt')) . "\n";
echo "</pre>\n</td>\n</tr>\n</tbody>\n</table>";
?>
 
User avatar
TildeHash
Forum Commoner
 
Posts: 43
Joined: Fri Jul 16, 2010 7:17 am
Location: Apple Valley, California


Return to PHP - Code

Who is online

Users browsing this forum: Bing [Bot], Google [Bot], Majestic-12 [Bot] and 7 guests