seeseekey.net - Invictus Deus Ex Machina

Viele größere Firmen wie Apple, Google und auch Facebook sind in den letzten Jahren dazu übergegangen, Eigenentwicklungen zu veröffentlichen und unter eine freie Lizenz zu stellen. Eines dieser Projekt aus dem Hause Facebook ist dabei Phabricator. Dabei handelt es sich um ein auf PHP basierendes Werkzeug zur kollaborativen Softwareentwicklung.

Die Projektseite von Phabricator

Phabricator stellt dabei unter anderem Werkzeuge wie einen Repository Browser, ein Bug/Issue-Tracker, eine Wiki und Möglichkeiten zum Code Review zur Verfügung. Genutzt wird Phabricator nicht nur von Facebook, sondern auch andere Firmen und Projekte wie Blender, Bloomberg, Dropbox oder MediaWiki nutzen dieses Werkzeug für die Softwareentwicklung. Bezogen werden kann Phabricator über die offizielle Projektseite oder die entsprechende GitHub-Seite. Der Quelltext ist unter der Apache Lizenz lizenziert.

Zwar steht AJAX für Asynchronous JavaScript, aber trotzdem kann man solche Abfragen auch synchron durchführen. Mit jQuery kann man das ganze dabei wie folgt bewerkstelligen:

$.ajax({url: "getName.php", 
	type: "get",
	data:{lang:"american"},
	success: function(result){
		name=result;
}, async: false});

Wichtig ist, das der Schlüssel async auf false gesetzt ist — das Verhalten ist in neueren Versionen von jQuery als veraltet gekennzeichnet, kann aber noch genutzt werden.

In PHP gibt es (nach meinem Wissen) keine einfache Methode um die Dateien eines Ordner rekursiv zu ermitteln. Möchte man die Dateien eines Ordners ohne dessen Unterordner ermitteln, so kann man scandir nutzen. Auf Basis dessen, habe ich eine Funktion geschrieben, welche diesen Operation auf Wunsch auch rekursiv ausführt:

function GetFiles($directory, $recursiv)
{	
	if($directory[strlen($directory)-1]!='/') $directory.="/";
	
	$files = array();
	$subDirectories = array();
	
	$scandirFiles = scandir($directory); //Read files

	foreach ($scandirFiles as $file) 
	{
		if($file=="." || $file=="..") continue;

		if(is_dir($directory.$file))
		{
			array_push($subDirectories, $directory.$file);
		}
		else if(is_file($directory.$file))
		{
			array_push($files, $directory.$file);
		}
	}

	 if($recursiv)
	 {
		 foreach ($subDirectories as $dirs) 
		 {
			 $subDirectoryFiles=GetFiles($dirs, $recursiv);
			 $files = array_merge($files, $subDirectoryFiles);
		 }
	 }
	 
	 return $files;
}

Genutzt wird die Funktion wie folgt:

$files = GetFiles('images/', true);

Der Rückgabewert ist ein Array, in welchem die Dateien mit ihren relativen Pfaden enthalten sind.

Unter WordPress ist es ohne Probleme möglich Videos (z.B. von Youtube) und ähnliches einzubetten. Das Video wird dabei immer in einer Standardgröße dargestellt. Möchte man diese Standardgröße ändern, so kann man dies ohne Probleme bei der jeweiligen Einbettung tun. Alternativ kann man die functions.php des Themes um folgende Zeilen ergänzen:

add_filter( 'embed_defaults', 'set_embed_size' );

function set_embed_size() {
    return array('width' => 720, 'height' => 480);
}

Damit wird in diesem die Größe von eingebetteten Videos global festgelegt, so das jedes Video ohne weitere Konfiguration die gewünschte Größe besitzt.

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.