05
Okt 19

Navigation im Archiv: Alte Webserversicherungen zu Leben erwecken – Teil 3

Die Verzeichnis-Indexierung ist auf dem Webserver deaktiviert. Das könnte ich ändern und hätte damit meine Möglichkeit, die Verzeichnisse zu durchbrowsen. Reizvoller war es für mich, mir selbst ein kleines Script zu erstellen, dass die Inhalte auflistet. Insbesondere da in meinem Kopf die Idee herumschwirrt, die Liste später mit Screenshots anzureichern.

Unter Zuhilfenahme der Lösung der StackOverflow-Frage „How to list directories, sub-directories and all files in php“ (Lösung von Tomás Aresak Malcánek1, 17.10.2015) schnell etwas zusammengezimmert und „schöner“ gemacht. Hier nur der relevante PHP-Code.

function list_folder_content($path) {
  $items = scandir($path);
  $folder = explode("/", getcwd());
  echo "<h1>" . $folder[array_key_last($folder)] . "</h1>";
  echo "<ul>";
  foreach($items as $item) {
    if ($item != ".") {  // ignore "."
      // list files
      if (is_file($path . $item)) {
        echo "<li class=\"file\"><a href=\"" . $item . "\">" . $item . "</a></li>";
      } 
      // list folders
      else { 
        echo "<li ";
        if ($item == "..") echo " class=\"up\""; // special class for "directory up"
        echo "><a href=\"" . $item . "/\">" . $item . "</a></li>";
      } 
    }
  }
  echo "</ul>";
}
 
list_folder_content("./");

Praktischerweise funktioniert Pawel Kazakows portables Programm pkColorPicker auch nach 9 Jahren wie ich es gewohnt bin und ermöglicht mir die einfache Farbauswahl.

Mit dem Web-Generator ICONSVG von Gaddafi Rusli habe ich an mein Farbkonzept angepasste Icons für die Ordnerliste erstellt.

Problem: Das Script muss in allen Ordner liegen, in denen das Verzeichnis gelistet werden soll. Da ich nicht ständig neu kopieren möchte, dachte ich zuerst an einen symbolischen Link. Ad hoc ließ sich dies mit der existierenden Berechtigungsstruktur nicht einstellen, da für den Administrator das Netzlaufwerk nicht eingebunden ist.

Lösung: In den Ordnern, die ebenfalls den Script anzeigen sollen, liegt eine index.php, welche das eigentliche Script includiert:

$index = "#absoluter/Pfad/zum/Script#";
if (file_exists($index)) {
  include ($index);
}

Damit die Einbindung auf diversen Ebenen funktioniert, muss der Pfad absolut angegeben werden. Sicherlich gibt es da elegantere Lösungen… aber elegant ist im Moment nicht mein Ziel. Mit dieser kleinen Lösung muss ich das Script nur an einer Stelle warten.

Offene Punkte

  • Blog-Font updaten, damit alle Zeichen angezeigt werden
  • Bildvorschau für Ordner
  • Administrator-Shell: Zugriff auf Netzlaufwerke
  1. Es tut mir Leid, die aktuell verwendete Schriftart scheint die benötigten Zeichen nicht zu unterstützen – deswegen die Vereinfachung der Schreibweise []

03
Okt 19

Das Problem mit den dynamischen Inhalten: Alte Webserversicherungen zum Leben erwecken – Teil 2

Die Wahl haben zwischen Neuschreiben von altem Code oder doch Container anlegen, die mit alten PHP/MySQL-Versionen laufen. Es gibt noch eine dritte Möglichkeit, die jedoch voraussetzt, dass die Sicherungen auf den alten portablen Webservern unter WinXP noch einwandfrei funktionieren (was sie nur bedingt tun): Eine statische Sicherung der PHP-Ausgaben.

Alle drei Mölichkeiten sind mehr oder weniger – sehr – zeitaufwändig. Reverse Engineering hat das Problem, dass ich sowohl vor 10+ Jahren als auch jetzt ein absoluter Noob bin, was das Schreiben ordentlichen Codes angeht. Damals, weil es neu war – und heute, weil ich zuletzt vor etwa 10 Jahren wirklich aktiv gecoded habe. Seitdem ist viel passiert.

Mit einer steigenden Komplexität des Codes – Frameworks, Bibliotheken wird die Entwicklung einfacher/strukturierter – niemand muss das Rad mehr neu erfinden – doch die Komplexität dahinter steigt: viele Abhängigkeiten. Wird alles noch gewartet? Die Wetten, wie es in einem Jahr aussieht sind klar.

Trotz allem Aufwand wollte ich eines der Projekte wieder zum Leben erwecken. Was hat sich im letzten Jahrzehnt in PHP verändert? Wie funktionieren neue Funktionen? Es hat etwas befriedigendes, wenn dann nach und nach die PHP-Fehler verschwinden und die eigentlichen Inhalte ausgegeben werden. Und doch auch die traurige Gewissheit, dass es nicht sinnvoll ist, sämtlichen schlechten Code von damals in einer vermutlich ebenso schlechten Version wieder zum Leben zu erwecken. Bleiben die Optionen 2 und 3.


03
Okt 19

In die Kaninchenhöhle gefallen: alte Webserversicherungen zum Leben erwecken – Teil 1

Wenn nach langem Wunsch endlich ein Server zu Hause steht und die Idee aufkeimt, die Historie der eigenen Webseiten aus den Backups und portablen Webserver-Sicherungen an einer Stelle zusammenzuführen … und wieder zum Laufen zu bringen. Schließlich gibt es nichts schöneres, als sich über die Sünden der Vergangenheit zu amüsieren ^-^ – Augenkrebs und so (Hier am Beispiel der Crazylounge anno 2001).

Problem: Portable Webserver laufen nicht mehr. Genauer gesagt, die MySQL-Datenbank funktioniert unter Windows 10 nicht.

Versuch 1: Glücklicherweise funktioniert die Windows XP VM, welche ich bis vor gar nicht all zu langer Zeit noch zur Nutzung des Scanners einsetzte, nach wie vor einwandfrei. Der Webserver startet dort, inklusive Zugriff auf die MySQL-Datenbanken & phpMyAdmin. Dumm nur, dass in dem funktionerenden Webserver die betroffenen Datenbanken doch nicht drin waren.

Versuch 2: Internet-Suche bringt mich zur Anleitung „Recovering MySQL Files and Database Tables“ von Hetman Software. Mit Hilfe von MySQL Workbench können auch Datenbanken exportiert werden, deren Ordner aus dem ursprünglichen mysql-Verzeichnis in den mysql-Ordner einer bestehenden Datenbank hineinkopiert werden.

Nächster Schritt: Eine bestehende Datenbank muss her, also Docker-Container aufsetzen. Dieses Mal nicht in der Konsole sondern aus Bequemlichkeit direkt im Synology-Docker-Interface. Nicht vergessen die Variable MYSQL_ROOT_PASSWORD zu setzen.

Einrichten einer neuen Verbindung in MySQL Workbench: Hostname entspricht dem hostnamen des Servers, Port kann über docker ps herausgefunden werden. Klappt. Jetzt müsste ich die Ordner in den data-Ordner der Datenbank hineinkopieren …

Problem: Upload von Dateien in den MySQL-Docker-Container ist gerade etwas umständlich für mich.

Alternative: Eine MySQL-DB, die in Windows läuft und auf deren Verzeichnisse ich aus Windows heraus zugreifen kann, wäre doch etwas angenehmer. Glücklicherweise habe ich den Bitnami-WAMP-Stack noch nicht ins Nirvana geschickt, nachdem die darauf laufenden Services auf den Webserver umgezogen sind. Zugriff darauf klappt genauso wie das Hinzufügen der Ordner aus alten mysql-Ordnern.

Wie in der oben erwähnten Anleitung den Data Export für einen der alten Ordner anstoßen. Ich exportiere zu einer Self-Contained File inklusive Dump- und Schema-Instruktionen. Die Warnung, dass die MySQL-Version nicht übereinstimmt ignoriere ich. Mehr als schiefgehen kann es nicht, immerhin liegt mehr als ein Jahrzehnt zwischen den Versionen.

Anschließend nutze ich die Exportdatei um die Datenbank in der Docker-Datenbank zu importieren. Es werden Tabellen angelegt, in den Tabellen ist Inhalt der so aussieht, als sei er komplett. Zugegebenermaßen – inbesondere die frühen Datenbanken sind so basic, dass ich weniger Probleme erwarte.

Als nächster Schritt bleibt nun die große Aufgabe, den PHP-Teil der Webseiten wieder mit dem Datenbankteil zu verbinden. Denn natürlich möchte ich nicht mit einer PHP-anno-tubac-Version auf dem Server arbeiten. Dies ist ein größeres Projekt – oder ich finde eine Bibliothek, die mysql_* in mysqli_* transformiert. Aber nicht mehr heute.


29
Dez 18

WordPress-Update : Es scheint ja funktioniert zu haben

Die freie Zeit zwischen den Jahren habe ich genutzt, um den Schritt von WordPress 4.x auf 5.x zu wagen. Auf den ersten Blick sieht es gar nicht so schlimm aus, d.h. nichts offensichtliches ist kaputt gegangen. In wie fern dies für all die Anpassungen & Änderungen unter der Haube gilt, werde ich in den kommenden Tagen genauer prüfen müssen.

Definitiv gewöhnungsbedürftig ist der Gutenberg-Editor. Insbesondere die Eingabefelder für die Metaebene benötigen entweder Anpassung oder Gewöhnung. Ich bevorzuge weniger Klicks – und insbesondere keine animierten Reiter, die u.U. dazu führen, dass ich etwas falsches auswähle. Damit katapultierte ich diesen Beitrag einmal in den Papierkorb – nur um festzustellen, dass die Wiederherstellung ihn publizierte. Manchmal ist ein aktive Bestätigung, bevor eine Statusänderung übernommen wird, durchaus sinnvoll.


10
Jun 18

HSTS und nur noch HTTPS / Privacy Checker

Durch einen Beitrag im Netbib Weblog bin ich jüngst auf den Webseiten-Privacy-Checker von dataskydd.net  aufmerksam geworden. Beflügelt durch die erfolgreiche Verlängerung der Letsencrypt-Zertifikate, welche ich seit drei Monaten nutze, war ich motiviert auch andere suboptimale Zustände zu beheben.

So war der Blog bisher auch ohne Verschlüsselung erreichbar. Und auch die HTTP Strict-Transport-Security-Angabe (HSTS) war bisher nicht gesetzt. Ich zweifelte zuerst, ob ich diese Einstellung in meinem Hosteurope-Webpack tätigen kann. Glücklichweise zu unrecht. Dank eines Blogeintrages von Janiczek habe ich die Verbesserung dieses Aspektes mit einem simplen Copy&Paste in die .htaccess-Datei erreicht.

RewriteEngine on
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</IfModule>

Jetzt wurmen mich nur noch ein wenig die Grafiken, die WordPress von seiner eigenen Domain aufruft (s.w.org). Diese sind z.Zt. zwar nur in drei Dateien verlinkt (wp-admin/about.php, wp-includes/formatting.php und wp-includes/general-tempate.php1) – dennoch ist eine manuelle Anpassung nicht meine favorisierte Lösungsmöglichkeit. Einfache Wartung und so… Da ich zur Zeit keine Emojis einsetze und der Admin-Bereich meine Privatsache ist, werde ich es wohl auch erst mal dabei belassen.

 

  1. Analyse mit Hilfe von Notepad++ und der „rekursiven Suche in einem Verzeichnis“-Funktion – sollte mir wohl mal den find-Befehl unter Windows näher anschauen []