Text-Datei umdrehen (reverse)

Ich habe eine Text-Datei gehabt, mit Einträgen pro Zeile. Den Inhalt möchte ich in umgekehrter Reihenfolge wieder ausgeben, weil die Datei z.B. chronologisch sortiert ist, ich es aber in der anderen Reihenfolge benötige.

$ tac file.txt > file_reverse.txt

cat kennt man. Dieser Befehl gibt den Inhalt einer Datei aus. Mit tac (reverse cat) kann man genau dasselbe tun, aber rückwärts. Beide Befehle kommen mit dem coreutils package und sind somit in den meisten Linux Distros und MacOS vor installiert.

PHP Arrays als CSV ausgeben

Hier mal ein schneller Tipp. Ich habe ein CLI Skript in PHP programmiert. Dabei habe ich Daten über eine REST API abgefragt und wollte diese schnell und unkompliziert in CSV umwandeln und im Terminal (stdout) ausgeben. Das geht zum Glück ganz einfach mit PHP-Hausmittel.

fopen und fputcsv

Gegeben ist ein Array mit Daten. In meinem Fall habe ich sogar ein Array von Array und jedes Sub-Array soll eine CSV Zeile ergeben.

PHP bringt die Funktion fputcsv (php.net) mit und damit kann man Array Daten als CSV einem Stream übergeben. Damit können wir Daten direkt in eine Datei schreiben (falls es ein Datei-Stream wäre) oder in meinem Fall einfach stdout verwenden und die Daten auf dem Bildschirm durcken. Dazu öffne ich den Stream mittels fopen("php://stdout", "") (php.net). Der zweite Parameter hier muss gesetzt werden, wird bei stdout aber ignoriert, daher übergebe ich nur einen leeren String.

Damit iterieren wir nun über das Array, picken uns die Informationen heraus, die ich benötige (im Prinzip ist es ein map-Vorgang) und übergebe sie mit dem Stream an die Funktion fputcsv.

Am Schluss noch den Stream schließen und fertig ist die Kiste.

<?php

function toCsv(): void {
    // Array of Arrays
    $data = [[...], [...], [...]];
    
    // Stream öffnen: Hier der stdout, um die Daten auf den Bildschirm anzuzeigen
    $stdout = fopen("php://stdout", "");
    
    foreach ($data as $line) {
        $values = [
            'datum'          => $line['date'],
            'empfänger'      => $line['name'],
            'verbucht'       => '1'
        ];

        fputcsv($stdout, $values);
    }

    // Stream schließen nicht vergessen.
    fclose($stdout);
}

Warum überhaupt fputcsv?

Könnte an die Array-Daten nicht einfach mit einem `implode` (php.net) auch in eine CSV Zeile konvertieren? Im Grunde muss ich die Daten ja nur mit einem Komma trennen und zu einem String verwandeln?

Das ist im Kerngedanken richtig, aber es gibt ein Problem: Escaping. Wenn in einem Wert ein Komma oder andere Werte vorkommen, die escaped werden müssen, dann würde dieser Ansatz zu Fehlern führen. Mittels fputcsv müssen wir uns darum keine Gedanken machen. Werte werden mit “ (Anführungszeichen) als ein Wert markiert und Werte werden richtig escaped. So bekommen wir am Schluss ein valides CSV.

Multisite: Kein Login möglich, mit eigener Domain

Ich habe eine WordPress Multisite installation. Auch die Webschale läuft hier „nur“ als eine von mehreren Seiten. Nun hatte ich also wieder ein Projekt und brauchte eine neue Seite. Die WordPress Seite ist auch schnell angelegt, aber als ich dann die eigene Domain eingetragen habe (DNS war schon alles richtig eingestellt), konnte ich mich nicht mehr einloggen.

Also der Login für Webschale hat richtig funktioniert. Aber auf der neuen Seite ging es nicht. Ich habe die Login Seite gesehen, dass Passwort eingetippt, aber es ist nichts passiert. Die Seite hat neu geladen und ich war wieder auf der Login Seite.

Problem

Es wurden keine Cookies für diese Domain gesetzt. Kein Cookie, kein Login. Das ist soweit logisch.

Lösung

In der wp-config.php Datei musste ich folgenden Eintrage hinzufügen:

define(‘DOMAIN_CURRENT_SITE’, $_SERVER[‘HTTP_HOST’]);

Freie Ressourcen

Es gibt viele Ressourcen im Internet, aber nicht jedes Bild oder Video dürfen wir einfach so nutzen. Sollten wir es doch tun, könnte es teuer werden, wenn wir Post von einem (Abmahn-)Anwalt bekommen. Das muss aber nicht sein. Denn inzwischen gibt es viele Plattformen, die kostenlose und frei nutzbare Ressourcen zur Verfügung stellen. Da ich immer wieder selber auf der Suche nach guten Alternativen bin, schreibe ich mal eine lose Liste zusammen:

Wichtig: Du bist selber dafür verantwortlich die Lizenz der einzelnen Ressource zu prüfen. Nicht jede Plattform stellt das Material unter der Public Domain Lizenz zur Verfügung!

Bilder

Videos

Vectors

Music / Audio

Video Production


Du hast noch weitere Seiten gefunden? Schreib es unten in die Kommentare oder per Twitter.

INWX DynDNS in Synology einstellen

Ich habe einige Domains in meinem Portfolio, die ich inzwischen alle bei INWX registriert habe. Der Registrar aus Berlin wurde mir vor langer Zeit mal empfohlen und ich hatte bisweilen nie Probleme damit. INWX hat auch ein DynDNS Feature on board. Ich habe heute gesehen, dass man inzwischen wohl 1 Domain bzw. ein DynDNS Konto frei hat (ich meine, das war nicht immer so).

Da ich schon 2 kostenlose DynDNS Domains verwende, um mein Synology NAS aus dem Web erreichbar zu machen, dachte ich es wäre am geschicktesten, diese neue Adresse auch über dasselbe Interface zu verwalten, also in der Diskstation. Leider bietet Synology standardmäßig INWX nicht als Provider an, aber das lässt sich mit wenigen Schritten nachrüsten.

Anmerkung: Ich erkläre hier nicht was DynDNS ist und was man damit machen kann. Dazu gibt es im Netz schon genügend Ressourcen.

1. DynDNS Konto einrichten

Im INWX Konto gibt es den Menüpunkt DynDNS. Dort kann man ein neues DynamicDNS Konto erstellen. Man kann jede Domain verwenden, die im eigenen INWX Konto registriert ist. Sub-Domains sind auch möglich.

Den Benutzernamen, Passwort und den Hostnamen gut merken, den brauchen wir später in der Diskstation.

Zweitens, die Update-URL ist auch wichtig: https://dyndns.inwx.com/nic/update?myip=

2. DDNS in der Diskstation

In der Systemsteuerung unter Externe Zugriff können neue DDNS Einträge hinterlegt werden. Die Diskstation übermittelt die eigene IP dann regelmäßig an die Dienste. Leider gibt es aktuell keinen INWX Serviceanbieter. Mit ein bisschen Terminal und vim Action lässt sich das aber beheben.

2.1. DDNS Provider Config anpassen

Logt euch mit SSH auf eurem NAS ein und fügt folgende Zeilen zur Datei /etc.defaults/ddns_provider.conf hinzu. Ihr braucht Root Rechte, um die Datei zu bearbeiten (sudo su -)

[INWX]
        modulepath=DynDNS
        queryurl=https://dyndns.inwx.com/nic/update?myip=__MYIP__

Das praktische ist, dass INWX einfach den DynDNS Standard verwendet und somit genau so funktioniert, wie jeder andere DynDNS Anbieter. Wir müssen über die Config der Diskstation nur sagen, wie der Endpoint heißt. Dies ist die Update-URL von INWX. __MYIP__ ist hier der Platzhalter für die eigene IP, die die Diskstation ausfüllt.

2.2. DDNS einrichten

Zurück auf der Diskstation können wir nun einen neuen DDNS Eintrag hinzufügen unter Systemsteuerung > Externer Zugriff > DDNS.

Hier haben wir nun auch INWX zur Auswahl und können unseren Benutzernamen, Password und die Domain eintragen.

Nun steht uns INWX als DynDNS Provider zur Verfügung.

Fazit

So einfach ist es neue DynDNS Provider mit der Synology Diskstation zu verheiraten. Und dank dem kostenlosen DynDNS Konto von INWX kann ich sogar eine eigene Domain verwenden und meine Dienste nun damit managen.