Add diagnostics to check integrity of data folder master
[photocalendar.git] / diagnostics.php
blob:a/diagnostics.php -> blob:b/diagnostics.php
  <?php
   
  include "common.inc.php";
  if (!($firstDate = getFirstDate()))
  die("Cannot complete diagnotics, cannot get first file date");
  $currentDate = $firstDate;
  if (!($lastDate = getPreviousDate()))
  die("Cannot complete diagnotics, cannot get last file date");
  $hashes = Array();
  while ($currentDate != $lastDate) {
  $results = glob(DATA_DIR . "/" . $currentDate . "*");
  if (sizeof($results) == 0) {
  echo "Error on $currentDate, no photo found for that date <br>";
  } else if (sizeof($results) > 1) {
  echo "Error on $currentDate, more than one photo found for that date: <br>";
  var_dump($results);
  echo "<br>";
  } else {
  // normal day
  $fname = basename($results[0]);
  $fnParts = explode(".", $fname);
  if (sizeof($fnParts) < 3) {
  echo "Error on $currentDate, malformed file name {$fname} <br>";
  } else {
  if (strtotime($currentDate) != strtotime($fnParts[0])) {
  echo "Error on $currentDate, file name {$fname} date does not match expected date <br>";
  }
  if ($imgsize = getimagesize($results[0])) {
  if ($imgsize[0] < MIN_IMAGE_SIZE || $imgsize[1] < MIN_IMAGE_SIZE || $imgsize[0] != $imgsize[1]) {
  echo "Error on $currentDate, file name {$fname} is not large enough dimensions or non-square dimensions <br>";
  }
  } else {
  echo "Error on $currentDate, file name {$fname} could not be opened as an image file. File may have been corrupted <br>";
  }
  $hash = md5_file($results[0]);
  if ($hash != $fnParts[1]) {
  echo "Error on $currentDate, file name {$fname} hash does not match expected hash. File may have been corrupted or altered <br>";
  }
  if (in_array($hash, array_keys($hashes))) {
  echo "Error on $currentDate, file {$fname} hash matches that of {$hashes[$hash]}. Files may be identitical duplicates of the same image <br>";
  }
  $hashes[$hash] = $fname;
   
  if (sizeof($fnParts[2]) > 3 || ($fnParts[2] != "png" && $fnParts[2] != "jpg")) {
  echo "Error on $currentDate, file name {$fname} extension unexpected <br>";
  }
  }
  }
   
  // go to next day
  $currentDate = date("Y-m-d", strtotime("+1 day", strtotime($currentDate)));
  }
  echo "Scanned files from $firstDate to $currentDate, no errors detected<br>";
  ?>