seeseekey.net - Invictus Deus Ex Machina

Wenn man ab und an PHP nutzt, wird man sicherlich auch schonmal etwas von PSR-1 und PSR-2 gehört haben. PSR steht dabei für PHP Specification Request. PSR-1 und PSR-2 sind dabei der Basis Coding Standard und der Coding Style Guide.

cs.sensiolabs.org

Möchte man seinen Quelltext an diese Standards anpassen, so kann man dies natürlich ohne Probleme per Hand erledigen. Allerdings ist dies je nach Menge des Quelltextes doch recht umständlich. Mit Hilfe des PHP Coding Standards Fixer kann man diese Arbeit automatisieren. Genutzt wird die Software auf der Konsole:

php php-cs-fixer.phar fix /path/to/dir

Nach dem Durchlauf wurde der Quellcode an die Gegebenheiten des Standards angepasst. Bezogen werden kann der PHP Coding Standards Fixer auf der offizielle Seite. Die Anwendung ist dabei unter der MIT-Lizenz lizenziert und damit freie Software.

Wenn man früher unter PHP eine MySQL-Datenbank ansprechen wollte, so bediente man sich der Befehle mysql_connect, mysql_select_db, mysql_query und Co. Das Problem an dieser API ist, das sie deprecated also veraltet ist und damit nicht mehr genutzt werden sollte:

$db = mysql_connect ($host, $user, $password) or die ("Es konnte keine Verbindung zum Datenbankserver hergestellt werden");
mysql_query("SET NAMES 'UTF8'");
mysql_select_db ($name, $db) or die("Die Datenbank \"$name\" konnte nicht ausgewählt werden");

Stattdessen soll man die MySQL Improved Extension kurz Mysqli nutzen. Dabei handelt es sich um eine moderne objektorientierte API für den Zugriff auf MySQL in PHP. Eine einfache Abfrage mittels Mysqli sieht dabei wie folgt aus:

$mysqli = new mysqli($databaseHost, $databaseUsername, $databasePassword, $databaseName);
$sql = "SELECT * FROM token";
$result = $mysqli->query($sql);

for ($row_no=$result->num_rows-1; $row_no>=0; $row_no--) 
{
    $result->data_seek($row_no);
    $row=$result->fetch_assoc();
    echo " id = " . $row['id'] . "\n";
}

Die API unterscheidet sich dabei nicht groß von der alten API, so das Umstieg hier relativ einfach fallen sollte. Auf der entsprechenden Dokumentationsseite auf php.net finden sich noch viele weitere Beispiele.

Auf der Suche nach einer Möglichkeit eine REST-Api auf die Beine zu stellen, hatte ich mich mit einigen PHP-Microframeworks wie Slim oder Fat-Free beschäftigt. Hängen geblieben bin ich Schlussendlich bei Flight. Eine minimale REST-Api sieht dabei so aus:

require 'flight/Flight.php';

Flight::route('GET /', function(){
    echo 'hello world!';
});

Flight::start();

Flight besticht dabei durch seinen Umfang und die einfache Nutzbarkeit. Die Dokumentation ist schnell gelesen und so kann schon nach wenigen Minuten produktiv entwickelt werden. Flight ist unter der MIT-Lizenz lizenziert und damit freie Sofware. Der Quelltext ist auf GitHub, die offizielle Webseite unter flightphp.com zu finden.

Bücher über PHP-Entwicklung gibt es wie Sand am Mehr. Bücher an denen man mitarbeiten kann allerdings weniger. Zu dieser Klasse von Büchern gehört PHP — The Right Way, deren Quelltext auf GitHub zu finden ist. In dem Buch geht es dabei nicht nur um die Sprache PHP als solches, sondern auch um die Entwicklungsumgebung, Sicherheit und andere Themen.

Die deutsche Version von PHP — The Right Way.

Neben der englischen Originalversion gibt es auch eine ganze Reihe von Übersetzungen. Während es sich bei den Versionen bis zum 10. Juli 2012 noch um eine freie Version unter MIT-Lizenz handelte, wird mittlerweile die deutliche restriktivere Creative Commons Lizenz BY-NC-SA genutzt. Diese schließt eine kommerzielle Nutzung aus. Die offizielle Seite ist unter phptherightway.com zu finden.

Wer eine REST- bzw. eine RESTful-API entwickeln möchte, der kann natürlich das Rad neu erfinden und die komplette API von Grund auf entwickeln. Einfacher wird es wenn man ein bestehendes Framework nutzt. Für diesen Zweck bietet sich unter PHP Restler an. Mit Hilfe dieses Frameworks lassen sich vollwertige REST-APIs innerhalb weniger Stunden entwickeln. So unterstützt Restler unter anderem unterschiedliche Ausgabeformate wie JSON, XML oder YAML. Abgerundet wird das Paket durch eine ausführliche Dokumentation und sehr viele gut dokumentierte Beispiele.

luracast.com/products/restler

Restler ist unter der LGPL lizenziert und somit freie Software. Die offizielle Webseite ist mit hilfreichen Informationen gespickt, während der Quelltext auf GitHub zu finden ist.

In den letzten Jahren sind sie aus dem Boden geschossen, sogenannte „Read it later“-Dienste. Diese Dienste speichern dabei Artikel welche man erst später lesen möchte. Möglich wird dies durch Bookmarklets, Add-Ons und Apps welche die jeweiligen Artikel zum entsprechenden „Read it later“-Dienst schieben. Mit der freien Software wallabag, welche früher unter dem Namen poche bekannt war, kann man einen solchen Dienst selber hosten.

Die Login-Seite von wallabag

wallabag setzt auf PHP auf und ist unter der „DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE“ lizensiert, und damit freie Software, wie man dem Lizenztext entnehmen kann:

            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
                    Version 2, December 2004

 Copyright (C) 2004 Sam Hocevar 

 Everyone is permitted to copy and distribute verbatim or modified
 copies of this license document, and changing it is allowed as long
 as the name is changed.

            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. You just DO WHAT THE FUCK YOU WANT TO.

Wichtig ist nur das der Name der Applikation geändert wird, wenn man diese forken möchte. wallabag kann auf der offiziellen Seite des Projektes unter www.wallabag.org bezogen werden.

Wenn man eine PHP-Applikation schreibt, welche in irgendeiner Form mit Daten hantiert, so fehlen einem bei der Entwicklung meist plausible Testdaten. An dieser Stelle springt die Bibliothek Faker ein. Mit dieser Bibliothek ist es möglich die unterschiedlichsten Daten zu erzeugen. Ein Minimalbeispiel würde dabei so aussehen:

require_once '/path/to/Faker/src/autoload.php';
$faker = Faker\Factory::create();
echo $faker->name; //Erzeugt einen Namen

Möglich wird dies durch die unterschiedlichsten Provider welche angefangen bei Lorem Ipsum über Mailadressen bis Datumsangaben und Hashes alles liefern was das Herz begehrt. Die Bibliothek selbst steht unter der MIT-Lizenz und ist somit freie Software. Zu finden ist Faker in einem GitHub Repository.

Wer Entity-Relationship-Modelle bzw. die entsprechenden Diagramme (ERD) erstellen möchte, der kann hierfür Software wie die freie MySQLWorkbench nutzen. Für das plattformübergreifende Erzeugen solcher Diagramme kann man allerdings auch die freie Webapplikation wwwsqldesigner nutzen.

Der ERD-Designer in Aktion

Auf der Webseite des Autors gibt es eine Demo zum Ausprobieren. Die in PHP und Javascript geschriebene Software steht dabei unter einer BSD-Lizenz und ist somit freie Software. Bei der Installation muss das entsprechende Archiv nur auf dem Webserver entpackt werden und kann sofort genutzt werden. Nur wer die Möglichkeiten der serverseitigen Speicherung nutzen möchte, muss einige Parameter konfigurieren.

Wenn man auf seinem Server in den zu PHP gehörenden Logdateien die Meldung:

PHP message: PHP Warning:  date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone.

findet, sollte man die Variable „date.timezone“ in der „php.ini“ konfigurieren. Für Deutschland würde die Einstellung dabei wie folgt aussehen:

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Europe/Berlin

Nachdem der PHP-Service neugestartet wurde, gehören diese Warnungen der Vergangenheit an.

Seit der neuen Ubuntu-Version Saucy Salamander (13.10) befindet sich die JSON Unterstützung für PHP nicht mehr im Standard-PHP-Paket. Aus diesem Grunde muss das ganze mittels:

apt-get install php5-json

nachinstalliert werden. Nach einem Neustart des PHP-Service (in diesem Fall der FastCGI Variante):

service php-fpm restart

kann die PHP JSON Unterstützung unter Ubuntu 13.10 genutzt werden.