Ein persönliches Tool, um zu verfolgen, wo du in Blogs Kommentare hinterlassen hast – und automatisch benachrichtigt zu werden, wenn dort neue Kommentare (z. B. Antworten) auftauchen. Erkennt WordPress-Kommentar-Feeds automatisch und pollt sie rollierend für 7 Tage nach der letzten Aktivität.
- Du hinterlässt irgendwo einen Blog-Kommentar und klickst auf das Bookmarklet.
- Titel und URL der aktuellen Seite werden per GET-Request an
add.phpgesendet und gespeichert. - Im Hintergrund prüft
add.phpsofort, ob die Seite einen WordPress-Kommentar-Feed hat (z. B.https://example.com/blog/mein-post/feed/). - Falls ja: Ein stündlich laufendes Cron-Skript prüft den Feed alle 6 Stunden per Hash-Vergleich auf Änderungen – für 7 Tage ab der letzten erkannten Änderung (rollierendes Fenster).
- Findet das Skript eine Änderung, springt der Eintrag als "ungelesen" an die Spitze deiner ToDo-Liste – auch wenn du ihn zuvor bereits archiviert hattest.
- Erledigte Einträge landest du im Archiv (chronologisch), kannst sie aber jederzeit reaktivieren.
- PHP 8.1 oder neuer mit den Extensions
pdo_mysqlundcurl - MySQL 5.7+ oder MariaDB 10.3+
- Apache mit
.htaccess-Unterstützung (mod_headersempfohlen) - Echter Crontab-Zugriff (z. B. über das Plesk-/cPanel-/IONOS-Kontrollpanel oder SSH)
- Eine öffentlich per HTTPS erreichbare Domain/Subdomain
Richte im Hosting-Panel (Plesk/cPanel/IONOS: "Hosting-Einstellungen" → "Dokumenten-Stammverzeichnis") die Domain/Subdomain so ein, dass sie auf den public/-Ordner dieses Projekts zeigt. Damit sind src/, cron/, install/ und config.php automatisch nicht öffentlich erreichbar.
Falls sich der Document Root bei deinem Hoster nicht ändern lässt, liegt in src/, cron/, install/ und logs/ jeweils eine .htaccess mit Deny from all als zusätzliche Absicherung – der Web-Installer bleibt trotzdem über public/install.php erreichbar.
- Projektdateien auf den Server hochladen.
- Leere MySQL-Datenbank + Benutzer in der Hosting-Verwaltung anlegen (oder Zugangsdaten eines Benutzers mit
CREATE DATABASE-Recht bereithalten). https://deine-domain.tld/install.phpim Browser öffnen und das Formular ausfüllen (DB-Zugang, Basis-URL, Admin-E-Mail/Passwort).- Nach erfolgreicher Installation wird einmalig der Bookmarklet-Code und die passende Crontab-Zeile angezeigt – beides sofort sichern.
- Crontab-Eintrag im Hosting-Panel eintragen (siehe unten).
- Unter
/login.phpeinloggen, unter/bookmarklet.phpbei Bedarf den Bookmarklet-Code erneut abrufen (nur direkt nach Erzeugen/Neugenerieren des Tokens sichtbar).
php install/install.phpDas Skript fragt interaktiv DB-Zugang, Basis-URL, Zeitzone und Admin-Zugangsdaten ab und gibt am Ende Bookmarklet-Code und Crontab-Zeile aus.
Im Hosting-Panel (z. B. Plesk: "Geplante Aufgaben") oder per crontab -e:
0 * * * * /usr/bin/php /pfad/zum/projekt/cron/check_feeds.php >> /pfad/zum/projekt/logs/cron.log 2>&1
- Läuft stündlich; das Skript selbst entscheidet anhand von
check_interval_hours(Standard 6h) undwatch_until, welche Einträge tatsächlich fällig sind. - Der PHP-CLI-Pfad (
/usr/bin/php) variiert je nach Hoster – in Plesk unter "PHP-Einstellungen" nachsehen, ggf.php8.2,php8.3o. ä. verwenden. - Ein
flock()-Lock verhindert überlappende Läufe, falls ein Durchlauf einmal länger dauert. - Logs landen in
logs/cron.log(Verzeichnis muss beschreibbar sein).
Nach der Installation bzw. unter Einstellungen → Token neu generieren wird der Bookmarklet-Code einmalig im Klartext angezeigt. Den Link 📌 Kommentar tracken per Drag & Drop in die Lesezeichenleiste ziehen, oder den angezeigten javascript:...-Code manuell als neues Lesezeichen anlegen.
Sicherheitshinweis: Der Bookmarklet-Link enthält einen geheimen Token. Er landet dadurch in deiner Browser-Historie/Lesezeichen-Synchronisierung. Bei Verdacht auf Kompromittierung unter Einstellungen einen neuen Token erzeugen – der alte Link funktioniert danach nicht mehr.
Neue Dateien hochladen, dann Migrationen ausführen:
php install/update.phpoder eingeloggt über https://deine-domain.tld/update.php. Beide Wege führen alle noch nicht angewendeten .sql-Dateien aus install/migrations/ in numerischer Reihenfolge transaktional aus und tragen sie in schema_migrations ein. Neue Migrationen werden als install/migrations/00X_beschreibung.sql abgelegt.
public/ Document Root – Router-lose Einzeldateien (login.php, todo.php, add.php, ...)
src/ PHP-Klassen (Auth, Bookmark, FeedWatcher, Http, Installer, ...), nicht öffentlich erreichbar
cron/ check_feeds.php – stündlicher CLI-Runner
install/ Web-/CLI-Installer, Schema, Migrationen
config.php Datenbankzugang & Einstellungen (aus config.example.php generiert, nicht versioniert)
Kein Framework, kein Composer – bewusst schlank gehalten für einfaches Hosting auf Shared-Hosting-Umgebungen.
- SSRF-Schutz: Bevor der Server eine vom Bookmarklet oder Cron übergebene URL abruft, wird der aufgelöste Host gegen private/loopback/link-local-IP-Bereiche geprüft (auch bei Redirects, Hop für Hop).
- CSRF-Schutz: Alle Formulare in der eingeloggten Oberfläche verwenden ein Session-CSRF-Token. Der Bookmarklet-Endpunkt (
add.php) ist bewusst tokenbasiert statt sessionbasiert, da er von außerhalb der App aufgerufen wird. - Passwörter:
password_hash()/password_verify(), keine Klartextspeicherung. - Response-Limits: Feed-/Seitenabrufe sind auf ~2 MB und wenige Sekunden Timeout begrenzt, um Ressourcenverbrauch durch böswillige/kaputte Ziel-URLs zu begrenzen.
"Kein Feed erkannt", obwohl es eine WordPress-Seite ist
- Manche Sicherheits-/SEO-Plugins (z. B. bestimmte Yoast-Einstellungen) deaktivieren WordPress-Feeds komplett.
- Manche Themes/Plugins nutzen externe Kommentarsysteme (Disqus, Jetpack Comments) statt der nativen WP-Kommentare – dafür gibt es keinen klassischen Kommentar-Feed.
- Cache-Plugins können den
/feed/-Aufruf verzögert aktualisieren.
Cron läuft, aber nichts passiert
logs/cron.logprüfen.- Sicherstellen, dass der PHP-CLI-Pfad im Crontab-Eintrag stimmt (
php -vper SSH testen). - Prüfen, ob
watch_untilfür den Eintrag bereits abgelaufen ist – dann in der App unter Archiv/ToDo "Reaktivieren" klicken.
Nach 5 Fehlversuchen wird ein Feed nicht mehr geprüft
- Das ist beabsichtigt (
max_consecutive_failuresinconfig.php), um dauerhaft kaputte/entfernte Feeds nicht endlos abzufragen. Über "Reaktivieren" im Archiv bzw. erneutes Bookmarken lässt sich die Beobachtung zurücksetzen.
E-Mail-Benachrichtigungen, Mehrbenutzer-Betrieb, automatisierte Tests, Unterstützung für Nicht-WordPress-Kommentar-Feeds, Browser-Extension als Alternative zum Bookmarklet.