Accueil > > > SIMPLE DIFF ENTRE 2 FICHIERS
SIMPLE DIFF ENTRE 2 FICHIERS
Information sur la source
Description
Ceci est une simple fonction qui fait un diff sur 2 fichiers de type texte (texte = texte, php, html...enfin, tout sauf du binaire quoi). Elle est sommaire, mais elle peut servir je pense. C'est juste un début sommaire pour un plus gros projet (un CVS en php, en fait). Je ne comptais pas la poster ici, mais finalement...je me dis qu'en l'état, elle doit pouvoir être utile à certains.
Source
- <?php
- /**
- * function fileDiff ()
- * checks differences between 2 files : additions, suppressions and modifications
- * @Param (string) sFileOriginal : the original filename
- * @Param (string) sFileModified : the modified filename
- * @Return (mixed) : false (boolean) if failed, (array) aDiff with differences if succeeded
- */
- function fileDiff ($sFileOriginal, $sFileModified) {
- /**
- * checks that the files are accessible. If not, exit.
- */
- if (!file_exists ($sFileOriginal) || !file_exists ($sFileModified)) {
- return false;
- }
- /**
- * gets the content of each file in an array, each entry being a line of the file
- */
- $aFirst = file ($sFileOriginal);
- $aLast = file ($sFileModified);
- /**
- * gets the biggest value between the size of both the arrays
- */
- $iMax = max (count ($aFirst), count ($aLast));
- /**
- * creates a callback function to remove any \r\n\t or space at the end or the beginninh of the line
- */
- $myTrim = create_function ('$val', 'return trim ($val);');
- /**
- * removes the empty entries in both the arrays, without touching the indexes
- */
- $aFirst = array_filter (array_map ($myTrim, $aFirst));
- $aLast = array_filter (array_map ($myTrim, $aLast));
- /**
- * declaration of the aDiff array
- */
- $aDiff = array ();
- /**
- * loops on both the arrays, to the end of the biggest one
- */
- for ($i = 0; $i < $iMax; $i++) {
- if (isset ($aFirst[$i])) {
- if (isset ($aLast[$i])) {
- if ($aFirst[$i] !== $aLast[$i]) {
- /**
- * both entries exists and are different, so, it's a modification
- */
- $aDiff[$i]['MODIFIED'] = htmlentities ($aLast[$i]);
- }
- } else {
- /**
- * there is an original entry, but nothing in the modified file, so, it's a suppression
- */
- $aDiff[$i]['SUPPR'] = htmlentities ($aFirst[$i]);
- }
- } else {
- if (isset ($aLast[$i])) {
- /**
- * there is a modified entry but no corresponding original entry, so, it's an addition
- */
- $aDiff[$i]['ADDED'] = htmlentities ($aLast[$i]);
- }
- }
- }
- return $aDiff;
- }
-
- $sFirst = 'test.php';
- $sLast = 'test2.php';
-
- $aDiff = fileDiff ($sFirst, $sLast);
-
- foreach ($aDiff as $clef => $val) {
- echo 'LIGNE ', $clef+1, ' : ';
- switch (key ($val)) {
- case 'MODIFIED' :
- echo '<span style="color: #0000ff;">',$val['MODIFIED'],'</span><br />';
- break;
- case 'SUPPR' :
- echo '<span style="color: #ff0000;">',$val['SUPPR'],'</span><br />';
- break;
- case 'ADDED' :
- echo '<span style="color: #00ff00;">',$val['ADDED'],'</span><br />';
- break;
- }
- }
- ?>
<?php
/**
* function fileDiff ()
* checks differences between 2 files : additions, suppressions and modifications
* @Param (string) sFileOriginal : the original filename
* @Param (string) sFileModified : the modified filename
* @Return (mixed) : false (boolean) if failed, (array) aDiff with differences if succeeded
*/
function fileDiff ($sFileOriginal, $sFileModified) {
/**
* checks that the files are accessible. If not, exit.
*/
if (!file_exists ($sFileOriginal) || !file_exists ($sFileModified)) {
return false;
}
/**
* gets the content of each file in an array, each entry being a line of the file
*/
$aFirst = file ($sFileOriginal);
$aLast = file ($sFileModified);
/**
* gets the biggest value between the size of both the arrays
*/
$iMax = max (count ($aFirst), count ($aLast));
/**
* creates a callback function to remove any \r\n\t or space at the end or the beginninh of the line
*/
$myTrim = create_function ('$val', 'return trim ($val);');
/**
* removes the empty entries in both the arrays, without touching the indexes
*/
$aFirst = array_filter (array_map ($myTrim, $aFirst));
$aLast = array_filter (array_map ($myTrim, $aLast));
/**
* declaration of the aDiff array
*/
$aDiff = array ();
/**
* loops on both the arrays, to the end of the biggest one
*/
for ($i = 0; $i < $iMax; $i++) {
if (isset ($aFirst[$i])) {
if (isset ($aLast[$i])) {
if ($aFirst[$i] !== $aLast[$i]) {
/**
* both entries exists and are different, so, it's a modification
*/
$aDiff[$i]['MODIFIED'] = htmlentities ($aLast[$i]);
}
} else {
/**
* there is an original entry, but nothing in the modified file, so, it's a suppression
*/
$aDiff[$i]['SUPPR'] = htmlentities ($aFirst[$i]);
}
} else {
if (isset ($aLast[$i])) {
/**
* there is a modified entry but no corresponding original entry, so, it's an addition
*/
$aDiff[$i]['ADDED'] = htmlentities ($aLast[$i]);
}
}
}
return $aDiff;
}
$sFirst = 'test.php';
$sLast = 'test2.php';
$aDiff = fileDiff ($sFirst, $sLast);
foreach ($aDiff as $clef => $val) {
echo 'LIGNE ', $clef+1, ' : ';
switch (key ($val)) {
case 'MODIFIED' :
echo '<span style="color: #0000ff;">',$val['MODIFIED'],'</span><br />';
break;
case 'SUPPR' :
echo '<span style="color: #ff0000;">',$val['SUPPR'],'</span><br />';
break;
case 'ADDED' :
echo '<span style="color: #00ff00;">',$val['ADDED'],'</span><br />';
break;
}
}
?>
Conclusion
Ici les 2 fichiers utilisés en exemple (dispos dans le zip) : test.php : <?php echo 'Hello World';
$a = 1+2; $b = $a++;
echo $b; ?>
test2.php : <?php echo 'Hello World';
$a = 1+2; $b = $a++; $c = ++$b; echo $c;
echo $d; ?>
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Comment tester les fichiers PHP [ par Clem ]
Comment tester les fichiers PHP sans les publier sur son site ? Dans le genre de PWS avec l'asp
Tri de fichiers par date [ par Clem ]
Comment trier dans l'orde du plus nouveau au plus vieux, des dossiers ?J'ai trouvé pour afficher les dossiers :<?$rep=opendir('.');while ($file = r
Fichiers dans une base de donnée [ par Clem ]
Comment uploader un fichier dans une base de données, et le downloader ?
réaliser et envoyer des fichiers zip [ par pupuce ]
J'ai vu qu'il est possible de créer des fichiers zip, jusque là je vois bien comment faire mais :Je veut pouvoir envoyer le zip au client, sans qu'il
Compter des fichiers.... [ par FleX ]
Alors voila. je voudrais me faire un script php3 qui compte le nombre de fichiers dans un dossier et que le resultat soit mis dans une variable, que j
créer un fichier ???? petit PB [ par MangaII ]
Hello les gars !Voilà, j'ai un petit soucis, j'ai besoin de créer des fichiers (TXT) sur mon site, depuis ma page en PHP ! le PB, c que je pe pas ! Je
Encore les fichiers [ par koko ]
bon c'est encore moi avec mes fichiers.txt... cette fois-ci, je voudrais que lorque j'ouvre le fichier, il mets les variables qui sont à l'intérieur d
fichiers batch et username [ par booth ]
bonjour, je cherche le moyen soit de lancer un batch sur la machine client, soit de récupérer directement son username (log windows ou netware)si kelk
zipper plusieurs fichiers [ par eax ]
help! je cherche à apprendre comment faire pour zipper plusieurs fichiers (des images par exemple). si qqun connait un bon tutorial ou un code source
connection FTP par PHP [ par JulienC ]
Bonjour à toutes et à tous,Mon but est de pouvoir uploader sur mon site des fichiers ayant une extension particulière (on les nommera .ext). Ces fichi
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|