Das Token wird zwar immer nach data/ geschrieben und ist dort durch
eine eigene .htaccess geschuetzt. Landet es aber aus irgendeinem Grund
im Projektstamm, griff bisher keine Regel: die .htaccess dort sperrt
Verzeichnisse und bestimmte Dateinamen, .txt gehoerte nicht dazu. Bei
der Variante ohne eigenen Webroot waere es damit unter
https://domain/setup-token.txt abrufbar gewesen - und das Token ist der
Schluessel zur Ersteinrichtung.
Beide .htaccess-Dateien verweigern den Namen jetzt ausdruecklich, mit
und ohne mod_rewrite. Zusaetzlich ist build-release.sh gesperrt.
.gitignore schliesst setup-token.txt in jedem Verzeichnis aus, nicht
nur unter data/.
Auf einem Hetzner-Webhosting mit PHP 8.5 brach die Anwendung beim ersten
Aufruf ab. Ausloeser war session.sid_length: seit PHP 8.4 als veraltet
gemarkt. Die Meldung wurde ausgegeben, damit waren Header raus - und
danach liess sich weder eine ini-Einstellung aendern noch eine Session
starten. Aus einer Randnotiz wurde so ein Totalausfall.
Behoben auf drei Ebenen:
1. Die veralteten Aufrufe sind weg. session.sid_length und
session.sid_bits_per_character werden nicht mehr gesetzt; die
Voreinstellungen liefern mit 128 Bit ohnehin genug Entropie.
Ebenso entfallen curl_close(), imagedestroy() und finfo_close() -
seit PHP 8.0 bzw. 8.5 wirkungslos und als veraltet gemeldet.
2. public/index.php puffert die Ausgabe von der ersten Zeile an. Viele
Hoster erzwingen display_errors und lassen sich per ini_set() nicht
davon abbringen. Gepuffert laesst sich Fremdausgabe vor dem Senden
verwerfen und ins Fehlerprotokoll umleiten, statt die Antwort zu
zerstoeren. Das schuetzt auch Binaerdownloads: eine einzelne
Meldung haette bisher jedes PNG beschaedigt. Session::start()
meldet ausserdem klar, wenn doch schon Ausgaben raus sind, statt
eine Kaskade aus Warnungen zu erzeugen.
3. endroid/qr-code von 5.1 auf 6.0 angehoben. Version 5 markiert
Parameter implizit als nullable, was PHP 8.4 bemaengelt - bei jedem
erzeugten QR-Code. Version 6.1 waere ebenfalls verfuegbar, verlangt
aber PHP 8.4+ und wuerde Hoster mit 8.2 oder 8.3 ausschliessen;
6.0 laeuft ab 8.1.
Getestet wird jetzt gegen PHP 8.3, 8.4 und 8.5, jeweils mit
display_errors=On und error_reporting=E_ALL, damit Deprecations
sichtbar werden statt still im Log zu landen. Alle 232 Tests laufen auf
allen drei Versionen ohne eine einzige Meldung durch. Zusaetzlich ist
das Release-Paket in einer PHP-8.5-Umgebung mit fremdem Webroot
geprueft: Ersteinrichtung, Kurzlinks, Weiterleitung, QR-Codes und
Statistik, ohne Streuausgabe in Seiten oder Downloads.
Eigenes CSS statt Framework, Vanilla-JavaScript, heller und dunkler
Modus. Ohne JavaScript bleibt alles bedienbar; das Liniendiagramm
faellt auf eine selbst gezeichnete Balkendarstellung zurueck, wenn das
CDN nicht erreichbar ist.
Chart.js ist auf eine Version festgelegt und per Subresource Integrity
an seinen Hash gebunden.
Die Domain-Seite enthaelt eine Schritt-fuer-Schritt-Anleitung fuer DNS,
Hosting-Panel und Zertifikat samt Fehlersuche.