par
sacco » 25 févr. 2007, 23:48
voici mon code
<?php
// Pour éviter toute donnée en double nous comparons
//l'ancien et le nouveau log et créons un log de la diff
include ('Param.inc');
$DirTmptest = opendir($Tmptest);
While (false!==($filenametmp = readdir($DirTmptest)))
{
$sFirst = $Bcktest.$filenametmp;
$sLast = $Tmptest.$filenametmp;
if (file_exists($sFirst)=== FALSE)
{
touch($sFirst);
}
$fileadd=$Dirtest.$filenametmp;
$Resultdiff = FileDiff($sFirst,$sLast);
foreach ($Resultdiff as $clef => $val) {
echo 'LIGNE ', $clef+1, ' : ';
switch (key ($val)) {
case 'ADDED' :
{$fp=fopen($fileadd,"a");
fwrite($fp,$val['ADDED']);
fwrite($fp,'
');}
fclose($fp);
break;
}
}
unlink($sFirst);
copy($sLast,$sFirst);
unlink($sLast);
}
set_time_limit (0);
$dh = opendir($Dirtest);
while (false !== ($filename = readdir($dh)))
{
if(file_exists($Brightstortest)==true)
{
$Log = file($Brightstortest);
//ouverture BD
$sqldb = new PDO("mysql:host=localhost;dbname=test","root","") or die ("impossible d'ouvrir bdd !");
$query = "insert into journal (JDate,JHeure,JInfo,JAction) values(:JDate,:JHeure,:JInfo,:JAction)";
$stmt = $sqldb->prepare($query);
$sqldbctrl = new PDO("mysql:host=localhost;dbname=test","root","") or die ("impossible d'ouvrir bdd !");
$queryctrl = "select :JDate,:JHeure,:JInfo,:JAction from journal";
$stmtctrl = $sqldbctrl->prepare($queryctrl);
foreach ($Log as $ligne)
{
$pos1 = strpos($ligne,"]");
$entete = substr($ligne,1,$pos1-1);
$JAction = substr($ligne,$pos1+2,strlen($ligne)-$pos1);
list($par1,$par2) = explode(' ',$entete);
list($JDate,$JHeure) = explode('-',$par1);
list($m,$j,$a) = explode('/',$JDate);
$JDate = $a.'-'.$m.'-'.$j;
$Datebis =$a.$m.$j;
$par2 = substr($par2,1,strlen($par2)-1);
List($i1,$i2,$i3,$i4,$i5,$i6,$i7,$i8,$i9) = explode(',',$par2);
$i=$i1.$i2.$i3.$i4.$i5.$i6.$i7.$i8.$i9;
//******Pour 4 jours de rétension********//
$Format = 'Ymd';
$Datesys = (int)date($Format);
$Diff = $Datesys-(int)$Datebis;
$stmt->bindParam(':JDate',$JDate);
$stmt->bindParam(':JHeure',$JHeure);
$stmt->bindParam(':JInfo',$i);
$stmt->bindParam(':JAction',$JAction);
$stmt->execute();
}
$erase = unlink($Brightstortest);
}
//*******
$files = glob($Arcservetest); //permet la recherche sur critère arcserve
foreach ($files as $filename)
{
echo ($filename);
echo '</br>' ;
if(file_exists($filename)==true)
{
echo ("fichier trouvé");
echo '</br>';
$Log = file($filename);
//Pas de timeout;
set_time_limit (0);
//ouverture BD
$sqldb = new PDO("mysql:host=localhost;dbname=test","root","") or die ("impossible d'ouvrir bdd !");
$query = "insert into journal (JDate,JHeure,JInfo,JAction) values (:JDate,:JHeure,:JInfo,:JAction)";
$stmt = $sqldb->prepare($query);
foreach ($Log as $ligne)
{
$JDate =substr($ligne,0,4).'-'.substr($ligne,4,2).'-'.substr($ligne,6,2);
$Datebis = substr($ligne,0,4).substr($ligne,4,2).substr($ligne,6,2);
$JHeure = substr($ligne,9,6);
$i = substr($ligne,18,4);
$JAction = substr($ligne,23,$ligne-1);
//******Pour 7 jours de rétension********//
$Format = 'Ymd';
$Datesys = (int)date($Format);
$Diff = $Datesys-$Datebis;
//**************************************//
if($Diff<60)
{
if($i<>'PE ' and $i<>' ')
{
$stmt->bindParam(':JDate',$JDate);
$stmt->bindParam(':JHeure',$JHeure);
$stmt->bindParam(':JInfo',$i);
$stmt->bindParam(':JAction',$JAction);
$stmt->execute();
}
}
}
}
$erase = unlink($filename);
}
}
echo "chargement termine!";
/******************************************Fonction diff fichier***********************************/
/**
function fileDiff ()
check la differences entre 2 fichiers : additions, suppressions et modifications
@Param (string) sFileOriginal : original fichier d'origine
@Param (string) sFileModified : nouveau fichier
@Return (mixed) : false (boolean) si ko, (array) aDiff avec les différences s'il y en a
*/
function FileDiff ($sFileOriginal, $sFileModified) {
/**
checks si fichiers sont accessibles. Si non , exit.
*/
if (!file_exists ($sFileOriginal) || !file_exists ($sFileModified)) {
return false;
}
/**
Pour obtenir le contenant de chaque fichier dans un tableau, chaque entrée étant une ligne du fichier
*/
$aFirst = file($sFileOriginal);
$aLast = file($sFileModified);
/**
Pour obtenir la plus grande valeur de taille
*/
$iMax = max (count ($aFirst), count ($aLast));
/**
crée une fonction de rappel de service pour enlever \ r \ n \ t ou espace à l'extrémité ou le début de la ligne
*/
$myTrim = create_function ('$val', 'return trim ($val);');
/**
enlève les entrées vides dans les deux tableaux, sans toucher les index
*/
$aFirst = array_filter (array_map ($myTrim, $aFirst));
$aLast = array_filter (array_map ($myTrim, $aLast));
/**
declaration du tableau aDiff
*/
$aDiff = array ();
/**
Boucle jusqu'à la fin du plus grand fichier
*/
for ($i = 0; $i < $iMax; $i++) {
if (isset ($aFirst[$i])) {
if (isset ($aLast[$i])) {
if ($aFirst[$i] !== $aLast[$i]) {
/**
si les deux entrées différentes, ainsi, il y a modification
*/
$aDiff[$i]['MODIFIED'] = htmlentities ($aLast[$i]);
}
} else {
/**
il y a une entrée originale, mais rien dans le dossier modifié, ainsi, c'est une suppression
*/
$aDiff[$i]['SUPPR'] = htmlentities ($aFirst[$i]);
}
} else {
if (isset ($aLast[$i])) {
/**
il y a une entrée modifiée mais aucune entrée originale correspondante, ainsi, c'est une addition
*/
$aDiff[$i]['ADDED'] = htmlentities ($aLast[$i]);
}
}
}
return $aDiff;
}
?>
voici mon code
[php]
<?php
// Pour éviter toute donnée en double nous comparons
//l'ancien et le nouveau log et créons un log de la diff
include ('Param.inc');
$DirTmptest = opendir($Tmptest);
While (false!==($filenametmp = readdir($DirTmptest)))
{
$sFirst = $Bcktest.$filenametmp;
$sLast = $Tmptest.$filenametmp;
if (file_exists($sFirst)=== FALSE)
{
touch($sFirst);
}
$fileadd=$Dirtest.$filenametmp;
$Resultdiff = FileDiff($sFirst,$sLast);
foreach ($Resultdiff as $clef => $val) {
echo 'LIGNE ', $clef+1, ' : ';
switch (key ($val)) {
case 'ADDED' :
{$fp=fopen($fileadd,"a");
fwrite($fp,$val['ADDED']);
fwrite($fp,'
');}
fclose($fp);
break;
}
}
unlink($sFirst);
copy($sLast,$sFirst);
unlink($sLast);
}
set_time_limit (0);
$dh = opendir($Dirtest);
while (false !== ($filename = readdir($dh)))
{
if(file_exists($Brightstortest)==true)
{
$Log = file($Brightstortest);
//ouverture BD
$sqldb = new PDO("mysql:host=localhost;dbname=test","root","") or die ("impossible d'ouvrir bdd !");
$query = "insert into journal (JDate,JHeure,JInfo,JAction) values(:JDate,:JHeure,:JInfo,:JAction)";
$stmt = $sqldb->prepare($query);
$sqldbctrl = new PDO("mysql:host=localhost;dbname=test","root","") or die ("impossible d'ouvrir bdd !");
$queryctrl = "select :JDate,:JHeure,:JInfo,:JAction from journal";
$stmtctrl = $sqldbctrl->prepare($queryctrl);
foreach ($Log as $ligne)
{
$pos1 = strpos($ligne,"]");
$entete = substr($ligne,1,$pos1-1);
$JAction = substr($ligne,$pos1+2,strlen($ligne)-$pos1);
list($par1,$par2) = explode(' ',$entete);
list($JDate,$JHeure) = explode('-',$par1);
list($m,$j,$a) = explode('/',$JDate);
$JDate = $a.'-'.$m.'-'.$j;
$Datebis =$a.$m.$j;
$par2 = substr($par2,1,strlen($par2)-1);
List($i1,$i2,$i3,$i4,$i5,$i6,$i7,$i8,$i9) = explode(',',$par2);
$i=$i1.$i2.$i3.$i4.$i5.$i6.$i7.$i8.$i9;
//******Pour 4 jours de rétension********//
$Format = 'Ymd';
$Datesys = (int)date($Format);
$Diff = $Datesys-(int)$Datebis;
$stmt->bindParam(':JDate',$JDate);
$stmt->bindParam(':JHeure',$JHeure);
$stmt->bindParam(':JInfo',$i);
$stmt->bindParam(':JAction',$JAction);
$stmt->execute();
}
$erase = unlink($Brightstortest);
}
//*******
$files = glob($Arcservetest); //permet la recherche sur critère arcserve
foreach ($files as $filename)
{
echo ($filename);
echo '</br>' ;
if(file_exists($filename)==true)
{
echo ("fichier trouvé");
echo '</br>';
$Log = file($filename);
//Pas de timeout;
set_time_limit (0);
//ouverture BD
$sqldb = new PDO("mysql:host=localhost;dbname=test","root","") or die ("impossible d'ouvrir bdd !");
$query = "insert into journal (JDate,JHeure,JInfo,JAction) values (:JDate,:JHeure,:JInfo,:JAction)";
$stmt = $sqldb->prepare($query);
foreach ($Log as $ligne)
{
$JDate =substr($ligne,0,4).'-'.substr($ligne,4,2).'-'.substr($ligne,6,2);
$Datebis = substr($ligne,0,4).substr($ligne,4,2).substr($ligne,6,2);
$JHeure = substr($ligne,9,6);
$i = substr($ligne,18,4);
$JAction = substr($ligne,23,$ligne-1);
//******Pour 7 jours de rétension********//
$Format = 'Ymd';
$Datesys = (int)date($Format);
$Diff = $Datesys-$Datebis;
//**************************************//
if($Diff<60)
{
if($i<>'PE ' and $i<>' ')
{
$stmt->bindParam(':JDate',$JDate);
$stmt->bindParam(':JHeure',$JHeure);
$stmt->bindParam(':JInfo',$i);
$stmt->bindParam(':JAction',$JAction);
$stmt->execute();
}
}
}
}
$erase = unlink($filename);
}
}
echo "chargement termine!";
/******************************************Fonction diff fichier***********************************/
/**
function fileDiff ()
check la differences entre 2 fichiers : additions, suppressions et modifications
@Param (string) sFileOriginal : original fichier d'origine
@Param (string) sFileModified : nouveau fichier
@Return (mixed) : false (boolean) si ko, (array) aDiff avec les différences s'il y en a
*/
function FileDiff ($sFileOriginal, $sFileModified) {
/**
checks si fichiers sont accessibles. Si non , exit.
*/
if (!file_exists ($sFileOriginal) || !file_exists ($sFileModified)) {
return false;
}
/**
Pour obtenir le contenant de chaque fichier dans un tableau, chaque entrée étant une ligne du fichier
*/
$aFirst = file($sFileOriginal);
$aLast = file($sFileModified);
/**
Pour obtenir la plus grande valeur de taille
*/
$iMax = max (count ($aFirst), count ($aLast));
/**
crée une fonction de rappel de service pour enlever \ r \ n \ t ou espace à l'extrémité ou le début de la ligne
*/
$myTrim = create_function ('$val', 'return trim ($val);');
/**
enlève les entrées vides dans les deux tableaux, sans toucher les index
*/
$aFirst = array_filter (array_map ($myTrim, $aFirst));
$aLast = array_filter (array_map ($myTrim, $aLast));
/**
declaration du tableau aDiff
*/
$aDiff = array ();
/**
Boucle jusqu'à la fin du plus grand fichier
*/
for ($i = 0; $i < $iMax; $i++) {
if (isset ($aFirst[$i])) {
if (isset ($aLast[$i])) {
if ($aFirst[$i] !== $aLast[$i]) {
/**
si les deux entrées différentes, ainsi, il y a modification
*/
$aDiff[$i]['MODIFIED'] = htmlentities ($aLast[$i]);
}
} else {
/**
il y a une entrée originale, mais rien dans le dossier modifié, ainsi, c'est une suppression
*/
$aDiff[$i]['SUPPR'] = htmlentities ($aFirst[$i]);
}
} else {
if (isset ($aLast[$i])) {
/**
il y a une entrée modifiée mais aucune entrée originale correspondante, ainsi, c'est une addition
*/
$aDiff[$i]['ADDED'] = htmlentities ($aLast[$i]);
}
}
}
return $aDiff;
}
?>
[/php]