Channel Apps

navigation

β˜…Blog β˜…Anleitungen/Tutorials β˜…Lese-Log
πŸ“ Artikel pro Kategorie: Android: (1) Datenbank: (6) Fediverse: (1) GrapheneOS: (1) Hubzilla: (14) Linux: (4) Nextcloud: (1) Terminal: (4) Tutorials: (13)

πŸ“š BΓΌcher pro Kategorie: Belletristik: (1) Holocaust: (2) Lese-Log: (8) Psychothriller: (2) Thriller: (3)
lima-city: Webhosting, Domains und Cloud

Hab mir einen kleinen Logger gebastelt der protokolliert, welche Links aufgerufen werden. Da weder Cookie gesetzt wird noch IP oder sonstige Daten gespeichert werden ist das Dingen sogar DSGVO-konform 😁

Man speichert einfach folgenden Code in einen Block, fΓΌgt den da ein wo geloggt werden soll, legt die Datei url_hits.txt an in die die Logs gespeichert werden, macht sie beschreibbar und fertig. Ich hab den Block in meine articles und cards gepackt. Kann man auch getrennt mit 2 BlΓΆcken oder mehr machen, einfach mehrere url_hits.txt mit verschiedenen Namen anlegen.

$logFile = 'url_hits.txt'; // <-- passe das an deinen Hubzilla‑Root an
$url = $_SERVER['REQUEST_URI'] ?? ''; // aktuelle URL, falls gesetzt

if ($url !== '') {
// Versuche zu schreiben;
$written = @file_put_contents($logFile, $url . PHP_EOL, FILE_APPEND);
if ($written === false) {
// Fehlermeldung landet im PHP‑Error‑Log, nicht im Browser.
error_log("URL‑Logger: Schreiben nach $logFile fehlgeschlagen (Berechtigungsproblem?)");
}
}


So sieht dann die url_hits.txt aus:

Screenshot der Textdatei in der alle aufgerufenen Links stehen

Die Textdatei kann man dann mit PHP weiter verarbeiten oder anderweitig auswerten.

#Hubzilla #Tutorials #Counter #Script #PHP

Nach der Hubzilla-Installation kann man noch die ganzen Standard-Addons hinzuzufügen. Das ist wichtig wenn man sich mit ActivityPub, also den ganzen anderen Diensten aus dem Fediverse verbinden mâchte. Dadurch wird es mâglich, z.B. die BeitrÀge der Mastodon-User zu empfangen. Oder die von Friendica, Pixelfed, Lemmy, Misskey usw. Anderfalls hat man nur BeitrÀge aus dem Zot-Netzwerk, also die anderer Hubzilla-User. Und da ist leider noch wenig los. Außerdem kann man ja mit dem Addon "PubCrawl" die Hubzilla-Instanz als viel leichter zu installieren und administrierende Mastodon-Instanz verwenden. ;)

Außerdem sind da noch wichtige Addons wie SuperBlock, Lesezeichen, Karten, Gallerie drin.

Da meine Hubzilla-Instanz von Lima-City.de gehostet wird und auch mein letzter Artikel auf Lima-City basiert benΓΆtigt man fΓΌr die Addon-Installation einen SSH-Zugang zu seinem Webserver. Wie das funktioniert ist auf Lima-City gut dokumentiert und auch einfach: SSH-Zugang einrichten NatΓΌrlich hat so gut wie jeder Webhoster SSH, ich sags nur wegen den Anleitungen hier. :)

Zuerst setzt man im FTP-Programm die Rechte des Ordners in seinem Hubzilla-Ordner auf 755 falls er das nicht schon ist.

Dann loggt man sich in seiner SSH-Konsole ein, wechselt in seinen Ordner (bei mir hubtest) mit der Hubzilla-Installation:
cd hubtest

Dann:
util/add_addon_repo https://framagit.org/hubzilla/addons.git hzaddons

Zur Sicherheit oder fΓΌr spΓ€ter kann man den Update-Befehl noch machen:
util/update_addon_repo hzaddons

Bildschirmfoto vom 2026-02-27 16-49-43.png

#Hubzilla #Tutorials #Fediverse #Lima-City.de

Bei Lima-City, wo meine Hubzilla-Instanz auch gehostet wird, gibt es ein Webhosting-Paket fΓΌr 1€ die ersten 3 Monate, danach 3,50€. Das Paket lΓ€sst sich auch monatlich kΓΌndigen wenn ihr doch keine Lust mehr haben solltet

Produktdetails:
β˜…eine Domain inklusive (.de, .at, .eu, .com, .info, .biz, .net, .org, .ch)
β˜…30 GB Speicherplatz
β˜…Traffic unbegrenzt
β˜…kostenlose, automatische SSL-Zertifikate per Let's Encrypt
β˜…5 GB MySQL-Speicher, unbegrenzt MySQL-Datenbanken
10 GB E-Mail-Speicher, unbegrenzt PostfΓ€cher & Weiterleitungen

Webhosting, Domains und Cloud von lima-city (Ref-Link)

Man kann sich ΓΌber den Lima-City Support aber auch ein kostenloses, fΓΌr den Anfang ausreichendes Paket freischalten lassen und dann spΓ€ter das Paket einfach upgraden:

Lima-City Support

Installation:

Ich werde erst die fΓΌr AnfΓ€nger einfachere Installations-Methode beschreiben, danach dann die fΓΌr GIT:

Zuerst lΓ€dt man die Hubzilla-Core als Zip herunter: https://framagit.org/hubzilla/core

Bildschirmfoto vom 2026-02-27 12-48-33.png

Nun richtet man sich einen FTP-Zugang bei Lima-City ein:

Bildschirmfoto vom 2026-02-27 13-25-58.png

Die Login-Daten gibt man jetzt in einem FTP-Programm ein damit man die Filezilla-Dateien auf den Webserver laden kann, ich benutze gerne FileZilla - The free FTP solution

Bildschirmfoto vom 2026-02-27 13-33-44.png

Hat man seinen FTP-Zugang fertig eingerichtet und ist verbunden, erstellt man einen Ordner auf dem FTP und lÀdt den Inhalt des Ordners "core-master" hoch. Weil das viele Dateien sind und etwas dauert kann man sich in der Zwischenzeit nen Kaffee machen, ne Runde schlafen, die Blumen gießen oder direkt eine Domain oder Subdomain einrichten unter der Hubzilla erreichbar sein soll

Bildschirmfoto vom 2026-02-27 13-49-33.png

Hat man das 1€-Paket bei Lima-City.de gebucht, hat man direkt eine richtige www-Adresse fΓΌr die man sich da einen schicken Namen einrichten kann. Beim kostenlosen Paket macht man sich einfach eine kostenlose Subdomain

Bildschirmfoto vom 2026-02-27 13-50-46.png

Dort klickt man dann "ein vorhandenes Verzeichnis auf dem Webspace auswÀhlen" an und und wÀhlt das Verzeichnis aus das man eben im FTP erstellt hat in das man die "core-master" geladen hat. Damit die Subdomain weiß welches Verzeichnis sie aufrufen soll

Jetzt braucht man nur noch eine MySQL-Datenbank, keine Sorge, ganz easy

Bildschirmfoto vom 2026-02-27 14-07-33.png

Genauso wie im Screenshot alles anklicken (Benutzer erstellen, localhost, Admin-Zugriff). FΓΌr den Benutzernamen vergibt man in dem Feld eine Nummer, ich hab einfach die 10 genommen weil ich schon viele Datenbanken habe :) Dann noch eben ein Passwort eingeben, dass brauchen wir gleich fΓΌr Hubzilla

Bildschirmfoto vom 2026-02-27 14-10-51.png

Nun ruft man im Browser seine erstellt Subdomain auf und klickt unten auf Next. Die Hubzilla-Installation beginnt :)

Bildschirmfoto vom 2026-02-27 14-05-44.png

Jetzt will Hubzilla wissen wie er sich mit der eben erstellten Datenbank verbinden kann. Also die Daten eingeben. Wichtig sind auch die ersten beiden EintrΓ€ge "Database Server Name" und "Database Port". Dort localhost und 3306 eintippen

Bildschirmfoto vom 2026-02-27 14-43-37.png

Zack, Hubzilla ist installiert, jetzt mΓΌssen wir noch unsere Email und ein Passwort fΓΌr den Hubzilla-Account festlegen. Als Default Timezone am besten Berlin

Bildschirmfoto vom 2026-02-27 14-48-25.png

Tadaaa πŸ₯³πŸ₯³πŸ₯³

Bildschirmfoto vom 2026-02-27 14-51-46.png

Über den Register-Link auf der Seite erstellt man sich jetzt einen Account mit dem man dann auf seiner Hubzilla-Instanz unterwegs ist

Viel Spaß...

#Hubzilla #Datenbank #MySQL #Lima-City.de

Diesmal werden alle vorhandenen Kategorien einzeln ausgezΓ€hlt und sortiert angezeigt, folgender Code teil muss angepasst werden:

$params[$ph] = "https://voidofxulub.com/cards/warzazel?cat={$cat}";
}

Screenshot der Ausgabe, es werden alle Kategorienamen namentlich angezeigt und dahinter jeweils die gezΓ€hlten EintrΓ€ge

/* --------------------------------------------------------------
Verbindung zur Datenbank (wie bisher)
-------------------------------------------------------------- */
$host = 'localhost';
$dbname = '...';
$user = '...';
$password = '...';

try {
$pdo = new PDO(
"mysql:host=$host;dbname=$dbname;charset=utf8mb4",
$user,
$password,
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);
} catch (PDOException $e) {
die('Verbindung fehlgeschlagen: ' . $e->getMessage());
}

/* --------------------------------------------------------------
Welche Kategorien willst du zΓ€hlen?
Einfach das Array erweitern, wenn du neue hinzufΓΌgst.
-------------------------------------------------------------- */
$categories = [
'Belletristik',
'Holocaust',
'Krimi',
'Psychothriller',
'Thriller'
];

/* --------------------------------------------------------------
Platzhalter fΓΌr das IN‑Statement bauen
-------------------------------------------------------------- */
$placeholders = [];
$params = [];

foreach ($categories as $i => $cat) {
$ph = ":cat$i";
$placeholders[] = $ph;
// VollstΓ€ndige URL, wie sie in deiner Tabelle steht
$params[$ph] = "https://voidofxulub.com/cards/warzazel?cat={$cat}";
}

/* --------------------------------------------------------------
SQL‑Abfrage: Gruppiere nach URL und zΓ€hle pro Gruppe
-------------------------------------------------------------- /
$sql = "
SELECT url, COUNT(
) AS anzahl
FROM term
WHERE url IN (" . implode(', ', $placeholders) . ")
GROUP BY url
";

$stmt = $pdo->prepare($sql);

/* --------------------------------------------------------------
Parameter sicher binden
-------------------------------------------------------------- */
foreach ($params as $ph => $val) {
$stmt->bindValue($ph, $val, PDO::PARAM_STR);
}

/* --------------------------------------------------------------
AusfΓΌhren und Ergebnis verarbeiten
-------------------------------------------------------------- */
$stmt->execute();

/* --------------------------------------------------------------
Ergebnis in ein ΓΌbersichtliches Array packen
-------------------------------------------------------------- */
$counts = []; // SchlΓΌssel = Kategorie, Wert = Anzahl
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
// URL wieder in die reine Kategorie zurΓΌckΓΌbersetzen
// (wir gehen davon aus, dass das Muster immer gleich ist)
preg_match('/cat=([^&]+)/', $row['url'], $m);
$category = $m[1] ?? 'unbekannt';
$counts[$category] = (int)$row['anzahl'];
}

/* --------------------------------------------------------------
Ausgabe
-------------------------------------------------------------- */
echo "πŸ“Š Ergebnisse pro Kategorie:\n";
foreach ($categories as $cat) {
$anz = $counts[$cat] ?? 0; // falls keine EintrΓ€ge gefunden wurden
echo "- $cat: $anz EintrΓ€ge\n";
}

#Hubzilla #Datenbank #MySQL

Man kann sich in Hubzilla mit PHP jeden Wert aus der Datenbank holen, in einem Block ablegen und als Widget auf der Seite anzeigen lassen. Dazu muss die Hubzilla-App "Webseiten" installiert sein und die App "PDL Editor". Dann muss man auf seinem Kanal noch einstellen das Code zugelassen wird. Das aktiviert man unter Administration - KanΓ€le - Checkbox des Kanals anklicken - Code erlauben

Dann klickt man auf Webseiten - BlΓΆcke - Erstellen - Art des Seiteninhalts - PHP

Als Blockname vergibt man einen Namen unter dem man den Block spΓ€ter im PDL Editor unter Items findet

Translated with DeepL.com (free version)

In Hubzilla, you can use PHP to retrieve any value from the database, store it in a block and display it as a widget on the page. To do this, you need to install the Hubzilla app "Websites" and the app "PDL Editor". Then you have to set your channel to allow code. This can be activated under Administration - Channels - Click the channel checkbox - Allow code

Then click on Websites - Blocks - Create - Type of page content - PHP

Assign a name to the block that you can later find in the PDL Editor under Items.

Bildschirmfoto vom Blockeditor

Hier der Code zum kopieren:

Here is the code to copy:

$host = 'localhost';
$dbname = 'Name der Datenbank'; //=== Anpassen ===
$user = 'Name des Datenbankusers'; //=== Anpassen ===
$password = 'Datenbank-Passwort'; //=== Anpassen ===

try {
$pdo = new PDO(
"mysql:host=$host;dbname=$dbname;charset=utf8mb4",
$user,
$password,
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);
} catch (PDOException $e) {
die('Verbindung fehlgeschlagen: ' . $e->getMessage());
}

$sql = "SELECT COUNT(*) AS anzahl FROM term WHERE term = :status";
$stmt = $pdo->prepare($sql);
$status = 'Kategoriename'; //=== Anpassen ===
$stmt->bindParam(':status', $status, PDO::PARAM_STR);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);

// ==== Ergebnis ausgeben ====
echo "Es gibt {$row['anzahl']} Artikel";

Anmerkung: Es müssen 4 Werte angepasst werden, wichtig ist der "Kategoriename", denn die Anzahl derer wird aus der Datenbank zusammengezÀhlt. Ich habe gestern noch keine anderen Werte in der riesigen Tabelle "term" gefunden wo scheinbar wirklich alles drin abgelegt wird woraus sich z.B. die Kategorie Artikel raus ableiten ließe.

Deswegen ist es wichtig, seinen Artikeln zusΓ€tzlich einen einzigartigen Kategorienamen zu geben der garantiert nicht anderweitig benutzt wird. Das sollte aber auch mit allem funktionieren was sich unter Kategorien ablegen lΓ€sst, z.B. Karten oder normale Posts, weil wie gesagt alles in der Tabelle Term abgelegt wird. Meine "term" hat nach 1 Woche bereits ΓΌber 37.000 EintrΓ€ge.

Ist das erledigt, geht man in den PDL Editor, wΓ€hlt unter Modules die Seite aus, auf der der Block angezeigt werden soll, z.B. articles und unter items ist der Block dann zu finden:

Note: Four values need to be adjusted, the most important being the "category name", as the number of these is calculated from the database. Yesterday, I couldn't find any other values in the huge "term" table, which seems to contain everything, from which the category "articles" could be derived, for example.

That is why it is important to give your articles a unique category name that is guaranteed not to be used elsewhere. However, this should also work with everything that can be stored under categories, e.g. cards or normal posts, because, as I said, everything is stored in the Term table. After one week, my "term" already has over 37,000 entries.

Once this is done, go to the PDL Editor, select the page on which the block is to be displayed under Modules, e.g. articles, and the block can then be found under items:

Bildschirmfoto des Blocks mit Ausgabe der Anzahl der Artikel

Wichtig/Important
https://voidofxulub.com/item/053efe40-7d7b-4bd4-ace1-f165f8d9ee54

#Hubzilla #Datenbank #MySQL

Ah durch Zufall grade in Hubzilla wieder was Neues entdeckt 😁 Mit dem kleinen unauffÀlligen Button kann man durch die Kommentare scrollen.

Translated with DeepL.com (free version)

Ah, just discovered something new on Hubzilla by chance 😁 With the small, inconspicuous button, you can scroll through the comments.

#Hubzilla

Screenshot_20260225-143832_1_1.png

Wenn man in Hubzilla mit einem Bild auf einen Kommentar antworten mΓΆchte muss man diese Option vorher noch aktivieren. Ich habe die Einstellung selber erst gefunden, als ich im Hubzilla-Hilfeforum nachgefragt hatte, Danke nochmal ^^ Zu finden ist sie unter Einstellungen - Privacy-Einstellungen - Enable OCAP access Danach kann man dann wie gewohnt im Editor auf das Bild-Icon klicken und ein Bild aus den eigenen Hubzilla-Dateien auswΓ€hlen.

Translated with DeepL.com (free version)

If you want to reply to a comment with an image in Hubzilla, you have to activate this option first. I only found the setting myself when I asked about it in the Hubzilla help forum, thanks again ^^ You can find it under Settings - Privacy settings - Enable OCAP access After that, you can click on the image icon in the editor as usual and select an image from your own Hubzilla files.


Bildschirmfoto der Einstellung Enable OCAP-Access

#Hubzilla

Wenn irgendwas hakt, kann man das Error Logging einschalten und die Ausgabe in die Datei "php.out" ausgeben. Die "php.out" muss beschreibbar sein. Dazu ΓΆffnet man die Datei ".htconfig.php". Zu finden im Hauptverzeichnis der Hubzilla-Installation und findet folgenden Code-Teil am Ende der Datei. Einfach bei den vier letzten Zeilen jeweils die zwei // entfernen.

// PHP error logging setup
// Before doing this ensure that the webserver has permission
// to create and write to php.out in the top level web directory,
// or change the name (below) to a file/path where this is allowed.

// Uncomment the following 4 lines to turn on PHP error logging.
error_reporting(E_ALL & ~E_WARNING & ~E_PARSE & ~E_NOTICE & ~E_DEPRECATED);
ini_set('error_log','php.out');
ini_set('log_errors','1');
ini_set('display_errors', '0');

#Hubzilla #Tutorials #PHP

Als ich mir grade nochmal die Spalte "term" in der Hubzilla-Datenbank angeschaut habe ist mir aufgefallen das der vorherige Code ziemliche Probleme beim zusammenzΓ€hlen machen kann. Das Problem ist das die EintrΓ€ge aller User die man auf seinem Hub, also alle aus jedem Stream, Activitypub, Zot, sieht dort gespeichert werden. Und wenn da nur einer denselben Kategorienamen verwendet wie ihr wird der mit gezΓ€hlt. Dummerweise finde ich in der Spalte aber auch keine eindeutigen Werte wie eine absolute User-ID, mit der man die Kategorie abgleichen mittels AND abgleichen kΓΆnnte.

Man kΓΆnnte seiner Kategorie eine lange Nummer geben aber das sΓ€he ja blΓΆd aus.

Also fΓ€llt mir grade fΓΌr die App Karten und Artikel nur folgender Code ein, hier wird einfach die komplette Hub-Domain mitsamt dem Usernamen als Kategoriename abgefragt, das ist eindeutig genug:

$host = 'localhost';
$dbname = '...';
$user = '...';
$password = '...';

try {
$pdo = new PDO(
"mysql:host=$host;dbname=$dbname;charset=utf8mb4",
$user,
$password,
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);
} catch (PDOException $e) {
die('Verbindung fehlgeschlagen: ' . $e->getMessage());
}

$sql = "SELECT COUNT(*) AS anzahl FROM term WHERE url = :status";
$stmt = $pdo->prepare($sql);

// ==== Hier den Eintrag anpassen ====
$status = 'https://voidofxulub.com/cards/warzazel?cat=Lese-Log';
$stmt->bindParam(':status', $status, PDO::PARAM_STR);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);

// ==== Ergebnis ausgeben ====
echo "Es gibt {$row['anzahl']} EintrΓ€ge";

Den Teil wo die Suchvariable eingelesen wird, Γ€ndert man einfach wie folgt:

FΓΌr Karten:

$status = 'https://deine_hub_domain/cards/dein_nickname?cat=Deine_Kategorie';

FΓΌr Artikel:

$status = 'https://deine_hub_domain/articles/dein_nickname?cat=Deine_Kategorie';

Die steht aber auch im Browser-Adressfeld wenn man auf die jeweilige Kategorie klickt oder mit Rechtsklick kopiert

#Hubzilla #Datenbank #MySQL
@Der Pepe (Hubzilla) ⁂
@𝓒𝓱𝓻𝓲𝓼

Hey es gibt ne Γ„nderung πŸ˜… Ganz schΓΆn durchheinander gewΓΌrfelt die Datenbank πŸ€·β€β™‚οΈ