Composer für PHP nutzen

Composer ist ein Paket- bzw. Dependency-Manager für PHP. Damit ist es möglich die Abhängigkeiten von PHP-Projekten komfortabel zu verwalten und aktuell zu halten. Dazu wird in dem Projekt eine Datei mit dem Namen composer.json angelegt. In dieser Datei finden sich die Abhängigkeiten für das Projekt:

{
  "minimum-stability": "RC",
  "require": {
    "slim/slim": "3.*"
  }
}

Um diese Abhängigkeiten initial dem Projekt hinzuzufügen, muss der Befehl:

composer install

eingegeben werden. Anschließend werden die Abhängigkeiten aufgelöst und heruntergeladen:

Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 6 installs, 0 updates, 0 removals
  - Installing psr/container (1.0.0): Loading from cache
  - Installing container-interop/container-interop (1.2.0): Loading from cache
  - Installing nikic/fast-route (v1.3.0): Loading from cache
  - Installing psr/http-message (1.0.1): Loading from cache
  - Installing pimple/pimple (v3.2.3): Loading from cache
  - Installing slim/slim (3.12.1): Loading from cache
Writing lock file
Generating autoload files

Nach der initialen Installation, finden die sich die Abhängigkeiten im Ordner vendor. Daneben wird eine composer.lock-Datei angelegt. In dieser sind die genauen Versionsnummern, der installierten Abhängigkeiten hinterlegt. Würde das Projekt nun nochmal mit der install-Option aufgerufen werden, so würden exakt diese Versionen installiert. Sollen diese Abhängigkeiten später aktualisiert werden, kann dafür der Befehl:

composer update

genutzt werden. Dabei werden die Versionen, welche sich in der composer-lock-Datei befinden ebenfalls aktualisiert.

getcomposer.org

Bezogen werden kann Composer unter anderem auf der offiziellen Seite unter getcomposer.org. Der Quelltext von Composer ist auf GitHub zu finden. Die Software ist unter der MIT-Lizenz lizenziert und damit freie Software.

Rewrites unter Nginx loggen

In der Konfiguration für den Webserver Nginx bzw. dessen Seiten, ist es möglich Rewrite-Direktiven zu nutzen. Damit können URLs umgeschrieben werden. Ein Beispiel für eine solche Direktive wäre z.B.

try_files $uri $uri/ @rewrite;

location @rewrite {
  rewrite ^/(.*)$ /index.php?_url=/$1;
}

Wenn dieser Rewrite zur Anwendung kommt, erscheint leider keine Meldung in den Nginx-Logs access.log und error.log. Um das Logging für Rewrites zu aktivieren, muss die Option:

rewrite_log on;

im server-Block der Konfiguration, welche unter /etc/nginx/sites-available/ zu finden ist, aktiviert werden. Daneben muss die Logging-Severity, also die Schwere der Events die geloggt werden sollen, angepasst werden. Dazu wird folgende Option dem server-Block hinzugefügt:

error_log /var/log/nginx/error.log notice;

Wenn die Log-Datei nun angeschaut wird, so finden sich dort für jeden Rewrite entsprechende Meldungen:

2019/05/29 08:35:30 [notice] 16054#16054: *127817 „^/(.*)$“ matches „/name/german“, client: 82.193.248.37, server: api.example.com, request: „GET /name/german HTTP/1.1“, host: „api.example.com“
2019/05/29 08:35:30 [notice] 16054#16054: *127817 rewritten data: „/index.php“, args: „_url=/name/german“, client: 82.193.248.37, server: api.example.com, request: „GET /name/german HTTP/1.1“, host: „api.example.com“

REST-APIs unter Apache und Nginx betreiben

Eine der wesentlichen Eigenschaften von REST-APIs bzw. RESTful-Webservices ist ihre Adressierbarkeit von Ressourcen. Wenn ich z.B. über eine API verfüge, welche mir Namen generiert, so kann es in dieser API unterschiedliche Ressourcen geben:

GET https://api.example.com/name/german/
GET https://api.example.com/name/polish/

Rufe ich nun eine der beiden Ressourcen mit dem HTTP-Verb GET auf so erhalte ich entweder einen deutschen oder einen polnischen Namen von dieser Beispiel-API. Für den Webserver ergibt sich allerdings das Problem, das der Ordner name und die entsprechenden Unterordner nicht existieren. Das einzige was in diesem Beispiel existiert ist eine index.php-Datei, welche unter der URL:

https://api.example.com/index.php

zu finden ist. Damit die REST-API ordnungsgemäß funktioniert, müssen die entsprechenden Aufrufe zur index.php-Datei umgebogen werden. Bei dem Webserver Apache kann dies über eine .htaccess-Datei mit folgendem Inhalt erledigt werden:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L]
</IfModule>

Diese Datei sollte dabei im gleichen Verzeichnis wie die Datei index.php liegen. Bei Nginx muss stattdessen die Konfiguration der Domain bzw. der Seite angepasst werden. Diese Konfigurationen sind unter /etc/nginx/sites-available/ zu finden. Dort muss folgende Konfiguration hinzugefügt werden:

try_files $uri $uri/ @rewrite;

location @rewrite {
	   rewrite ^/(.*)$ /index.php?_url=/$1;
}

Hinterlegt werden muss die Konfiguration in einem server-Block derselben. In diesem Fall würde die URL bzw. der Aufruf:

GET https://api.example.com/name/german/

intern in die URL:

https://api.example.com/index.php?_url=name/german/

umgeschrieben und vom Webserver geladen. Dadurch landen die Aufrufe wieder bei der Datei index.php und können verarbeitet werden.

Blankensee in Mecklenburg

Ich wohne bereits seit einigen Jahren in der Gemeinde Blankensee in Mecklenburg. Was ich in dieser Zeit ein wenig vermisst habe ist eine zentrale Anlaufstelle, in welcher Informationen zur Gemeinde gefunden werden können. Aus diesem Grund habe ich mich selber daran gemacht und eine solche Seite erstellt. Herausgekommen ist eine Seite über Blankensee in Mecklenburg, welche Informationen rund um die Gemeinde bietet.

Die Webseite blankensee.net

Neben Informationen und Nachrichten, finden sich weitere Dinge wie z.B. frei verwendbare Karten, basierend auf OpenStreetMap-Daten, auf der Seite. Ziel ist es die Seite im Laufe der Zeit weiter auszubauen, um einen größtmöglichen Mehrwert zu liefern. Zu finden ist die Seite über Blankensee in Mecklenburg unter blankensee.net.

Multilinguales Wörterbuch

Auf der Suche nach einer Wortvariante übersetze ich ein Wort in unterschiedliche Sprachen. Dabei war es mühselig ein und dasselbe Wort bei unterschiedlichen Anbietern und Wörterbüchern einzugeben. Auf der Suche nach Abhilfe würde ich schließlich bei Woxikon fündig.

Zu einem Wort werden die Übersetzungen aus unterschiedlichsten Sprachen angezeigt

Nach der Eingabe eines Wortes zeigt der Dienst die Übersetzung des Wortes in unterschiedlichsten Sprachen, wie Englisch, Spanisch, Französisch, Italienisch, Portugiesisch, Niederländisch und vielen weiteren Sprachen an. Neben Übersetzungen finden sich Synonyme, Abkürzungen und Reime auf der Webseite. Gefunden werden kann Woxikon unter woxikon.de.