Add diagnostics to check integrity of data folder master
Add diagnostics to check integrity of data folder

--- a/common.inc.php
+++ b/common.inc.php
@@ -103,6 +103,15 @@
         return false;

     }

 }

+function getFirstDate() {

+    // not romance help

+    $datedFiles = scandir(DATA_DIR); // sorted descendingly by default

+    if (sizeof($datedFiles) > 2) {// always at least 2 even for an empty folder because of ./ and ../

+        return getDateFromFilename($datedFiles[2]);

+    } else {

+        return false;

+    }

+}

 

 function getPhoto($displayDate) {

     $cacheFile = CACHE_DIR . $displayDate . ".png";

@@ -149,7 +158,6 @@
         }

 

         $date = strtotime($displayDate);

-// First we create our bounding box for the first text

         $textDayName = date("l", $date);

         $sizeDayName = 24 + round(($source_image_height - 1000) / 1000) * 2;

         $fontDayName = "./img/mplus-1p-medium.ttf";


file:b/diagnostics.php (new)
--- /dev/null
+++ b/diagnostics.php
@@ -1,1 +1,55 @@
+<?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>";
+?>
+