| 
<?php /* http://phpmaster.com/monitoring-file-integrity/ */declare(strict_types=1);
 ini_set('display_errors', '1');
 error_reporting(-1);
 # $_POST = []; //
 
 # DATABASE LOGIN
 include '_config.php';
 include '_class-snapshot.php';
 $jb = new jb_interrogator($paths);
 
 # SET DEFAULT PATH
 $_POST['SRC_PATH'] = $_POST['SRC_PATH'] ?? $paths[0];
 # $_POST = [];
 
 $TITLE = 'John_Betong\'s File Integrity Check';
 $FORUM = 'https://www.sitepoint.com/forums/showthread.php'
 . '?867381-Detect-file-changes';
 $DESC  = 'Simple PHP Class to monitor online file changes.'
 . 'Hacked servers can now be easily checked to prevent problems.';
 $dLong = date("l, \\t\h\\e jS \of F, Y - H:i:s");
 $SHOW  = $_POST['submit'] ?? NULL;
 $CSS   = file_get_contents('_style.css');
 $SITE  = NULL;
 if(LOCALHOST):
 $SITE = 'https://johns-jokes.com/downloads/sp-a/detect-file-changes/ver-002/';
 $SITE = '<a class="flr ooo btn bga"><a href="' .$SITE .'">ONLINE</a>';
 endif;
 
 $hdr = <<< __TMP
 <!DOCTYPE HTML>
 <html lang="en-GB">
 <head>
 <title> $TITLE </title>
 <meta name="viewport"     content="width=device-width, initial-scale=1">
 <meta content="text/html; charset=utf-8" http-equiv="content-type">
 <meta name="description"  content="$DESC">
 <meta name="author"       content="John_Betong | [email protected]">
 <link rel="Shortcut Icon" href="favicon.ico" type="image/x-icon" />
 <style> $CSS </style>
 </head>
 __TMP;
 # CRUNCH
 $hdr = str_replace('  ', ' ', $hdr);
 echo str_replace(["\n","\t", "\r"], "", $hdr) ."\n";
 ?>
 
 <body>
 <h5 class='flr ooo tdn'> <?= $SITE ?>   </h5>
 
 <h1 class="ooo"> <a class="tdn" href="index.php"> <?= $TITLE ?> </a> </h1>
 <h5 class="ooo tac">
 Inspired by
 <a href='http://phpmaster.com/monitoring-file-integrity/'>
 Martin Psinas
 </a>
 </h5>
 <h5 class='hhh flr ooo'>
 <a class="tdn" href="$FORUM">SitePoint Forum</a>
 </h5>
 <hr>
 
 
 
 
 
 <form class='' action='?' method='post'>
 <fieldset class='w88 mga p42 bgs clb bdr'>
 <legend class="fwb fsl">Please select a path  </legend>
 <dl class="dib lh2">
 <dt class="ooo">File Paths:   <b><?= count($paths) ?> </b></dt>
 <dd>
 <?php
 $lastSrcPath = $_POST['SRC_PATH'];
 echo '<select class="fss" name="SRC_PATH">';
 foreach($paths as $id => $path):
 if( $path === $lastSrcPath):
 echo '<option value="' .$path .'" selected>' .$path .'</option>';
 else:
 echo '<option value="' .$path .'">' .$path .'</option>';
 endif;
 echo "\n";
 endforeach;
 echo '</select>';
 echo '</dd><dd>   </dd>';
 
 echo <<< __________TMP
 <dt class="fwb">
 <input type="submit" name="submit" value="INTERROGATE" />
   
 <input type="submit" name="submit" value="DELETE TABLE" />
 </dt>
 __________TMP;
 ?>
 </dl>
 </fieldset>
 
 </form>
 <?php ##################################################### ?>
 
 
 
 <?php  # RESULTS ##########################################
 $mode = $_POST['submit'] ?? NULL;
 if($mode):
 echo '<fieldset class="w88 mg1 bgs bd1 XXXp42">';
 switch($mode):
 case 'INTERROGATE' : #======================================
 $leg = 'Following discrepancies were found:';
 echo '<legend class="fwb fsl warn">' .$leg .' </legend>';
 echo '<dl class="ooo">';
 $diffs = $jb->getDiscrepancies($byRefHash, $byRefFiles);
 
 echo '<dt class="bge">Totals:</dt>';
 echo '<dd>';
 echo '<b class="dib w06">Files: </b>' .$byRefFiles .jj;
 echo '<b class="dib w06">Hashs: </b>' .$byRefHash;
 echo '</dd>';
 
 echo '<dt class="bge">Path: </dt>';
 echo '<dd class="fwb">'. $_POST['SRC_PATH'] .'</dd>';
 
 echo '<dt>TableName:</dt>';
 echo '<dd>';
 echo '<b>' .$jb->tableNameFix() .'</b>';
 echo '<dd>';
 
 #================================================
 echo '<dt class="bge warn"> Discrepancies: </dt>';
 echo '<dd>';
 $result = '<b>Success</b> - there are no discrepancies :)';
 if( empty($diffs) ):
 # 'Hurray - there are no discrepancies';
 else:
 echo '<table class="fss">'
 . '<tr>'
 .    '<th> Status        </th>'
 .    '<th> FileName        </th>'
 .    '<th> Last accessed </th>'
 .    '<th> Last modified </th>'
 .    '<th> difference    </th>'
 .  '</tr>';
 $result = '';
 
 foreach ($diffs as $status => $affected):
 $result = '';
 if (is_array($affected) && !empty($affected)):
 foreach($affected as $path => $hash):
 clearstatcache(TRUE, $path );
 if( file_exists($path)):
 # NEW_FILE and MODIFIED files
 echo $jb->fileDetails($status, $path);
 else:
 # DELETED files
 $subPath  = substr($path, strlen($_POST['SRC_PATH']) );
 $result .= '<tr>';
 $result .=  '<td class="fwb warn">' .$status  .'</td>';
 $result .=  '<td>' .$subPath .'</td>';
 $result .=  '<td>not known</td>';
 $result .=  '<td>not known</td>';
 $result .=  '<td>not known</td>';
 $result .= '</tr>';
 endif;
 endforeach;
 endif;
 endforeach;
 endif; // if( empty($diffs) ):
 echo $result;
 echo '</dd>';
 echo '</table>';
 echo '</dd>';
 echo '</dl>';
 break;
 
 case 'DELETE TABLE' : #======================================
 $leg = 'Delete Table:';
 echo '<legend class="fwb fsl">' .$leg .' </legend>';
 
 echo '<dl>';
 $msg  = 'Sorry, not allowed ONLINE :(';
 # echo '<dt>' .vd(DELETE_TABLE) .'</dt>';
 if(DELETE_TABLE):
 $msg  = '<b class="warn"> Table does not exist??? </b>';
 if( $ok = $jb->tableDelete() ):
 $msg  = 'Success - Deleted table';
 endif;
 # echo '<dt>' .$msg .'</dt>';
 endif;
 echo '<dt>' .$msg .'</dt>';
 echo '<dd>   </dd>';
 echo '<dd>Table: ' .$jb->tableNameFix .'</dd>';
 echo '</dl>';
 break;
 endswitch;
 echo '</fieldset>';
 endif;
 ?>
 
 <p>   </p>
 <div class="POF tac bga w99 p42">
 <a class="fll tdn" href="https://validator.w3.org/nu/">HTML check</a>
 <a class="flr tdn" href="https://jigsaw.w3.org/css-validator/">CSS check</a>
 Wonderful place for a footer
 </div>
 </body>
 </html><?php
 
 #===========================================
 function fileDetails($status, $path)
 :string
 {
 $result = '';
 
 $subPath  = substr($path, strlen($_POST['SRC_PATH']) );
 $access   = fileatime($path);
 $modify   = filemtime($path);
 $differ   = $modify - $access;
 
 $result .= '<dt>' .$status .'<dt>';
 $result .= '<dd>file: ==> ' .$subPath . '</dd>';
 $result .= '<dd> last accessed:  ' .date('Y-M-d  -  H:i:s', $access);
 $result .= '<dd class="warn"> last modified:  ' .date('Y-M-d  -  H:i:s', $modify);
 
 $dAccess = new DateTime( date('Y-M-d H:i:s', $access) );
 $dModify = new DateTime( date('Y-M-d H:i:s', $modify) );
 $dDiffer = $dAccess->diff($dModify);
 $result .= '<dd> difference:    '
 .     $dDiffer->format('%Y-%M-%d %H:%i:%s')
 . '  (yyyy-mm-dd - H:i:s) </dd>';
 
 return $result;
 }
 
 |