seeseekey.net - Invictus Deus Ex Machina

Wenn man ab und an PHP nutzt, wird man sicher­lich auch schon­mal etwas von PSR-1 und PSR-2 gehört haben. PSR steht dabei für PHP Spe­ci­fi­ca­tion Request. PSR-1 und PSR-2 sind dabei der Basis Coding Stan­dard und der Coding Style Guide.

cs.sensiolabs.org

Möchte man sei­nen Quell­text an diese Stan­dards anpas­sen, so kann man dies natür­lich ohne Pro­bleme per Hand erle­di­gen. Aller­dings ist dies je nach Menge des Quell­tex­tes doch recht umständ­lich. Mit Hilfe des PHP Coding Stan­dards Fixer kann man diese Arbeit auto­ma­ti­sie­ren. Genutzt wird die Soft­ware auf der Konsole:

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

Nach dem Durch­lauf wurde der Quell­code an die Gege­ben­hei­ten des Stan­dards ange­passt. Bezo­gen wer­den kann der PHP Coding Stan­dards Fixer auf der offi­zi­elle Seite. Die Anwen­dung ist dabei unter der MIT-Lizenz lizen­ziert und damit freie Software.

Wenn man frü­her unter PHP eine MySQL-Datenbank anspre­chen wollte, so bediente man sich der Befehle mysql_connect, mysql_select_db, mysql_query und Co. Das Pro­blem an die­ser API ist, das sie depre­ca­ted also ver­al­tet ist und damit nicht mehr genutzt wer­den 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");

Statt­des­sen soll man die MySQL Impro­ved Exten­sion kurz Mys­qli nut­zen. Dabei han­delt es sich um eine moderne objekt­ori­en­tierte API für den Zugriff auf MySQL in PHP. Eine ein­fa­che Abfrage mit­tels Mys­qli 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 unter­schei­det sich dabei nicht groß von der alten API, so das Umstieg hier rela­tiv ein­fach fal­len sollte. Auf der ent­spre­chen­den Doku­men­ta­ti­ons­seite auf php.net fin­den sich noch viele wei­tere Beispiele.

Auf der Suche nach einer Mög­lich­keit eine REST-Api auf die Beine zu stel­len, hatte ich mich mit eini­gen PHP-Microframeworks wie Slim oder Fat-Free beschäf­tigt. Hän­gen geblie­ben bin ich Schluss­end­lich bei Flight. Eine mini­male REST-Api sieht dabei so aus:

require 'flight/Flight.php';

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

Flight::start();

Flight besticht dabei durch sei­nen Umfang und die ein­fa­che Nutz­bar­keit. Die Doku­men­ta­tion ist schnell gele­sen und so kann schon nach weni­gen Minu­ten pro­duk­tiv ent­wi­ckelt wer­den. Flight ist unter der MIT-Lizenz lizen­ziert und damit freie Sof­ware. Der Quell­text ist auf Git­Hub, die offi­zi­elle Web­seite unter flightphp.com zu finden.

Bücher über PHP-Entwicklung gibt es wie Sand am Mehr. Bücher an denen man mit­ar­bei­ten kann aller­dings weni­ger. Zu die­ser Klasse von Büchern gehört PHP — The Right Way, deren Quell­text auf Git­Hub zu fin­den ist. In dem Buch geht es dabei nicht nur um die Spra­che PHP als sol­ches, son­dern auch um die Ent­wick­lungs­um­ge­bung, Sicher­heit und andere Themen.

Die deut­sche Ver­sion von PHP — The Right Way.

Neben der eng­li­schen Ori­gi­nal­ver­sion gibt es auch eine ganze Reihe von Über­set­zun­gen. Wäh­rend es sich bei den Ver­sio­nen bis zum 10. Juli 2012 noch um eine freie Ver­sion unter MIT-Lizenz han­delte, wird mitt­ler­weile die deut­li­che restrik­ti­vere Crea­tive Com­mons Lizenz BY-NC-SA genutzt. Diese schließt eine kom­mer­zi­elle Nut­zung aus. Die offi­zi­elle Seite ist unter phptherightway.com zu finden.

Wer eine REST- bzw. eine RESTful-API ent­wi­ckeln möchte, der kann natür­lich das Rad neu erfin­den und die kom­plette API von Grund auf ent­wi­ckeln. Ein­fa­cher wird es wenn man ein beste­hen­des Frame­work nutzt. Für die­sen Zweck bie­tet sich unter PHP Rest­ler an. Mit Hilfe die­ses Frame­works las­sen sich voll­wer­tige REST-APIs inner­halb weni­ger Stun­den ent­wi­ckeln. So unter­stützt Rest­ler unter ande­rem unter­schied­li­che Aus­ga­be­for­mate wie JSON, XML oder YAML. Abge­run­det wird das Paket durch eine aus­führ­li­che Doku­men­ta­tion und sehr viele gut doku­men­tierte Beispiele.

luracast.com/products/restler

Rest­ler ist unter der LGPL lizen­ziert und somit freie Soft­ware. Die offi­zi­elle Web­seite ist mit hilf­rei­chen Infor­ma­tio­nen gespickt, wäh­rend der Quell­text auf Git­Hub zu fin­den ist.

In den letz­ten Jah­ren sind sie aus dem Boden geschos­sen, soge­nannte „Read it later“-Dienste. Diese Dienste spei­chern dabei Arti­kel wel­che man erst spä­ter lesen möchte. Mög­lich wird dies durch Book­marklets, Add-Ons und Apps wel­che die jewei­li­gen Arti­kel zum ent­spre­chen­den „Read it later“-Dienst schie­ben. Mit der freien Soft­ware walla­bag, wel­che frü­her unter dem Namen poche bekannt war, kann man einen sol­chen Dienst sel­ber hosten.

Die Login-Seite von wallabag

walla­bag setzt auf PHP auf und ist unter der „DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE“ lizen­siert, und damit freie Soft­ware, wie man dem Lizenz­text ent­neh­men 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.

Wich­tig ist nur das der Name der Appli­ka­tion geän­dert wird, wenn man diese for­ken möchte. walla­bag kann auf der offi­zi­el­len Seite des Pro­jek­tes unter www.wallabag.org bezo­gen werden.

Wenn man eine PHP-Applikation schreibt, wel­che in irgend­ei­ner Form mit Daten han­tiert, so feh­len einem bei der Ent­wick­lung meist plau­si­ble Test­da­ten. An die­ser Stelle springt die Biblio­thek Faker ein. Mit die­ser Biblio­thek ist es mög­lich die unter­schied­lichs­ten Daten zu erzeu­gen. Ein Mini­mal­b­ei­spiel würde dabei so aussehen:

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

Mög­lich wird dies durch die unter­schied­lichs­ten Pro­vi­der wel­che ange­fan­gen bei Lorem Ipsum über Mail­adres­sen bis Datums­an­ga­ben und Has­hes alles lie­fern was das Herz begehrt. Die Biblio­thek selbst steht unter der MIT-Lizenz und ist somit freie Soft­ware. Zu fin­den ist Faker in einem Git­Hub Repo­sitory.

Wer Entity-Relationship-Modelle bzw. die ent­spre­chen­den Dia­gramme (ERD) erstel­len möchte, der kann hier­für Soft­ware wie die freie MyS­QL­Work­bench nut­zen. Für das platt­form­über­grei­fende Erzeu­gen sol­cher Dia­gramme kann man aller­dings auch die freie Webap­pli­ka­tion wwws­ql­de­si­gner nutzen.

Der ERD-Designer in Aktion

Auf der Web­seite des Autors gibt es eine Demo zum Aus­pro­bie­ren. Die in PHP und Java­script geschrie­bene Soft­ware steht dabei unter einer BSD-Lizenz und ist somit freie Soft­ware. Bei der Instal­la­tion muss das ent­spre­chende Archiv nur auf dem Web­ser­ver ent­packt wer­den und kann sofort genutzt wer­den. Nur wer die Mög­lich­kei­ten der ser­ver­sei­ti­gen Spei­che­rung nut­zen möchte, muss einige Para­me­ter kon­fi­gu­rie­ren.

Wenn man auf sei­nem Ser­ver in den zu PHP gehö­ren­den Log­da­teien 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.

fin­det, sollte man die Varia­ble „date.timezone“ in der „php.ini“ kon­fi­gu­rie­ren. Für Deutsch­land würde die Ein­stel­lung dabei wie folgt aussehen:

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

Nach­dem der PHP-Service neu­ge­star­tet wurde, gehö­ren diese War­nun­gen der Ver­gan­gen­heit an.

Seit der neuen Ubuntu-Version Saucy Sala­man­der (13.10) befin­det sich die JSON Unter­stüt­zung für PHP nicht mehr im Standard-PHP-Paket. Aus die­sem Grunde muss das ganze mittels:

apt-get install php5-json

nach­in­stal­liert wer­den. Nach einem Neu­start des PHP-Service (in die­sem Fall der Fast­CGI Variante):

service php-fpm restart

kann die PHP JSON Unter­stüt­zung unter Ubuntu 13.10 genutzt werden.