Tag: php

201202Mär

Webentwicklung: PHP in Version 5.4.0 veröffentlicht

Die Entwickler hinter PHP haben kürzlich die Skriptsprache in Version 5.4.0 veröffentlicht. Mit dieser Version wurden diverse Neuerungen eingeführt und alte Relikte begraben: Unter Anderem wurden die INI-Direktiven "safe_mode", "magic_quotes_gpc" und "register_globals" entfernt, was viele PHP-Entwickler freuen dürfte. Zudem gibt es neue Sprachfunktionen, die das Entwickeln von PHP-Anwendungen beschleunigen können. So können Arrays nun erstellt werden mit:

  • // Numerisch indiziert
  • $arrayA = [1, 2, 3, 4];
  •  
  • // Assoziativ
  • $arrayB = ["eins" => 1, "zwei" => 2, "drei" => 3];

Weiterhin können Array-Elemente direkt bei einem Funktionsaufruf referenziert werden, wie etwa "foo()[0]". Außerdem lassen sich Klassenobjekte schon bei der Instanziierung ansprechen.

PHP in Version 5.4.0 veröffentlicht

Eine Liste der Neuerungen findet sich hier und die neu eingeführten Funktionen gibt es auf dieser Seite. Ein weiteres Feature stellen Traits dar, mit denen sich Code einfacher wiederverwenden lässt. Durch "use TraitName;" können also Methoden und Attribute einfach in eine Klasse übernommen werden, was einer vereinfachten Vererbung entspricht.
Die neue PHP-Version steht hier zum Download bereit und eine Anleitung zur Migration findet sich auf dieser Seite.

201123Nov

Webentwicklung: Effektive URL-Ausdrücke in PHP

In Webanwendungen sind Validierungen ein wichtiges Thema, die nicht immer auf Anhieb gut zu lösen sind. Während beispielsweise HTML5 für Eingabefelder schon ein fertiges Attribut zur Validierung mitbringt, sind für andere Szenarien eigene Lösungen erforderlich. Eine beliebte Überprüfung, die etwas schwieriger zu erstellen ist, wäre so beispielsweise eine URL-Validierung. Durch reguläre Ausdrücke sollten hier entsprechende Maskierungen vorgenommen, so dass gefährliche Einträge oder Umgehungsversuche nicht an die Anwendung bzw. die Datenbank übergeben werden.
Mathias Bynens hat zu dieser Thematik eine Matrix zusammengestellt, in der vordefinierte URLs durch unterschiedliche Ausdrücke validiert werden.

In search of the perfect URL validation regex

In den Kopfzeilen der Tabelle finden sich die Autoren von regulären Ausdrücken, die unterschiedlich gut funktionieren. Jeder reguläre Ausdruck ist unterschiedlich lang: Während die Spoon Library 979 Zeichen benötigt, schlägt der Ausdruck von Diego Perini nur 502 Zeichen zu Buche. Seine Validierung beinhaltet auch die Verwendung von IP-Adressen im Bereich von 1.0.0.0 bis 223.255.255.255. Der "S"-Modifier wurde in den Tests zur Erhöhung der Geschwindigkeit eingesetzt, sollte aber in einer produktiven Umgebung nicht verwendet werden.
Wichtig bei einer Validierung ist auch die Überprüfung des HTTP-Protokolls und somit des Präfixes "http://". Zu diesem Bereich gibt es in der Übersicht eine separate Tabelle, in der diverse Beispiele für mögliche URLs aufgeführt sind.

201108Sep

HamlPHP: Haml-Templates in PHP verwenden

Wer schon einmal mit Ruby oder Rails gearbeitet hat, wird das Template-System "ERB" kennen. Durch die Metasprache wird es ermöglicht, Ruby-Quelltext in HTML-Templates zu implementieren und auszuwerten. Noch kürzer geht das Ganze mit Haml (HTML Abstraction Markup Language), einer vereinfachten Auszeichnungssprache, die in erster Linie als Ruby-Gem zur Verfügung steht. Mit Haml können HTML-Templates noch kompakter geschrieben und dennoch mit dynamischen Bereichen ausgestattet werden. Ein Merkmal der Sprache ist die Auswertung von Einrückungen (Leerzeichen), die Auswirkungen auf die semantische Struktur des Dokuments haben.
Mittlerweile stehen auch für PHP Implementierungen der Haml-Syntax zur Verfügung und einen Vertreter davon stellt HamlPHP dar.

Haml - HTML Abstraction Markup Language

Das Projekt besteht aus verschiedenen Klassen und erzeugt nach dem Parsen eines Haml-Templates eine temporäre PHP-Datei, die schließlich interpretiert und im Browser ausgegeben wird. Der HamlPHP-Parser kann nach der Einbindung von entsprechenden Klassen wie folgt verwendet werden:

  • <?php
  • $content = $parser->parseFile("template.haml");

Ein Haml-Template könnte dann so aussehen:

  • !!! 5
  •   %html
  •   %head
  •   %body
  •     #container
  •       %h1{"id" => "header"} Headline
  •     %a{href => "http://haml.info/"} Haml-Website

Die finale Ausgabe:

  • <!DOCTYPE html>
  • <html>
  • <head></head>
  • <body>
  • <div id="container">
  • <h1 id="header">Headline</h1>
  • </div>
  • <a href="http://haml.info/">Haml-Website</a>
  • </body>
  • </html>

Es können also beliebige Attribute gesetzt werden und zudem können über bestimmte Maskierungen auch CSS-, JavaScript- oder PHP-Bereiche integriert werden. PHP-Auswertungen können auch über eine spezielle Syntax direkt ausgeführt werden, die in HamlPHP als "Interpolation" bezeichnet werden.
In dem Paket sind zudem etliche Beispiele enthalten und wer Haml direkt ausprobieren möchte, kann dazu den Bereich auf der offiziellen Website nutzen.

201105Sep

Hyperpolyglot: Skriptsprachen im direkten Vergleich

Wer als Webentwickler unterwegs ist, hat je nach Projekt und Server-Umgebung die Wahl, welche Skriptsprache eingesetzt werden soll. Die Entscheidung dürfte in erster Linie von der bestehenden Erfahrung und den Anforderungen des Projekts abhängen. Mit PHP, Ruby, Python und Perl stehen gleich mehrere Skriptsprachen zur Auswahl, die für Webanwendungen eingesetzt werden können. Eine kleine Entscheidungshilfe könnte hier die Hyperpolyglot-Übersicht sein, die ähnlich wie meine JavaScript Framework Matrix die Unterschiede der Sprachen aufzeigt.

Hyperpolyglot - Scripting Languages - PHP, Perl, Python, Ruby

Die "Side-by-Side Reference Sheets" repräsentieren eine Tabelle, bei der jede Skriptsprache einer Spalte entspricht. In den Zeilen finden sich verschiedene Verhaltensweisen und Eigenschaften der jeweiligen Sprache. Dazu zählen im Allgemeinen etwa Blockbegrenzungen, Zuweisungen, Operatoren, Scoping, globale Variablen, Konstanten oder Kommentare. Unterteilt ist die Tabelle in mehrere Bereiche wie Logik, Arrays, reguläre Ausdrücke, Funktionen, Prozesse, Objekte, Reflexion oder Debugging. So gibt es also zu allen Skriptsprachen entsprechende Code-Beispiele. Ein Klick auf eine Eigenschaft führt zur Definition, so dass alle Begrifflichkeiten nachgeschlagen werden können. Weiterhin gibt es auch Hintergrundinformationen zu den verschiedenen Sprachen.
Die Matrix ist übrigens nur eine Auskopplung der gesamten Übersicht von Hyperpolyglot: Hier finden sich solche Referenzblätter zu nahezu allen Programmiersprachen.

201105Aug

PPI Framework: Flexible MVC-Bibliothek für PHP

Wer sich noch nicht ganz entscheiden kann, mit welchem PHP-Framework das nächste Projekt aufgesetzt werden soll, sollte sich einen Vergleich oder eine Matrix ansehen, in der die Features von großen Bibliotheken dargestellt werden. Wenn es etwas kompakter sein darf, leisten auch weniger populäre Frameworks gute Dienste. Das PPI Framework beispielsweise ist sowohl auf kleine Blog-Systeme als auch auf umfangreiche E-Commerce-Projekte ausgelegt und bietet neben der MVC-Struktur solide Features, mit denen sich Sessions und Request-Daten verarbeiten und Caching-Mechanismen integrieren lassen.

PPI Framework

Die Bibliothek enthält einen Bootstrapper, der für die Grundkonfiguration zuständig ist:

  • include('../ppi/init.php');
  • $app = new PPI_App();
  • $app->boot()->dispatch();
  •  
  • system.base_url = http://localhost/mysite/
  •  
  • system.masterController = home

Hier kann auch ein Master-Controller definiert werden, der aufgerufen wird, sobald keine Route in der URL definiert wird.
Das Routing ist sehr einfach zu verstehen und kann in etwa so aussehen:

  • // File: App/Controller/User.php
  • class APP_Controller_User extends APP_Controller_Application {
  •  
  • function index() {
  • echo 'Hello Index';
  • }
  •  
  • function profile() {
  • echo 'Hello Profile';
  • }
  •  
  • }

Hier werden die Methoden also auf folgenden Routes abgebildet:

  • http://localhost/myapp/user
  • http://localhost/myapp/user/index
  • http://localhost/myapp/user/profile

Das PPI Framework unterstützt verschiedene Template-Engines und so können Templates in gewöhnlichem PHP, Smarty oder Twig geschrieben werden. In der Dokumentation werden die restlichen Funktionalitäten des Frameworks beleuchtet und im Download-Bereich kann die aktuelle Version des Projekts sowie eine Offline-Dokumentation heruntergeladen werden.

201130Jul

Symfony 2: Neue Version des MVC-Frameworks final

In einem Blog-Eintrag ließ Fabien Potencier letzte Woche verlauten, dass Version 2 des Symfony-Frameworks nun fertiggestellt ist. Über 250 Entwickler haben an der neuen Version mitgearbeitet und Interessierte konnten in der Zeit davor schon fleißig Vorab-Versionen testen, die allerdings noch nicht für den produktiven Einsatz gedacht waren.
Das ändert sich nun mit dem Erscheinen der finalen Version und erste Eindrücke des neuen Frameworks sammelt man am besten in der Quick Tour, in der die Struktur der Bibliothek beleuchtet wird.

Symfony 2

Symfony zählt neben CakePHP und dem Zend Framework zu den bekannteren PHP-Frameworks, die eine große Anzahl an Funktionen mitbringen. Der Datenbankzugriff erfolgt über eine ORM-Ebene, die durch Doctrine gegeben ist. Konfigurationen können per YAML und Templates mit Twig geschrieben werden, wobei natürlich auch nativer PHP-Code und sogar das Deklarieren von Annotations möglich ist. Symfony unterstützt Plugins, wodruch beispielsweise die ORM-Ebene auch durch einen anderes System ersetzt werden kann. Komponenten für Sicherheit, Formulare, Validierung, Session-Verwaltung und Request-Handling machen das Framework zu einem robusten Werkzeug für komplexe Webanwendungen.
Die Einarbeitung in ein solches System ist nicht einfach und deshalb bedarf es hier einer guten Dokumentation. Bei Symfony 2 ist diese mehrfach verfügbar und es empfiehlt sich zuerst einen Blick in das Buch oder auch in das Kochbuch.

201116Jul

Laravel: PHP-Framework mit Routing und ORM

Für PHP gibt es neben den großen und umfangreichen Frameworks auch weniger komplexe Bibliotheken wie etwa Silex. Deartige Micro-Frameworks bieten zwar eine kleinere Schnittmenge an Funktionen, können aber dennoch sehr hilfreich bei der Entwicklung von PHP-gestützten Web-Anwendungen sein. Ein kompaktes Framework, über das ich letzte Woche gestoßen bin, nennt sich Laravel und bietet ausgereifte Werkzeuge wie Routing, ein View-Modell, ein Prozessor für HTTP-Requests und ORM (Object-relational mapping) für verschiedene Datenbanksysteme.

Laravel - A Clean and Classy PHP Framework

So lassen sich mit Laravel Routen im REST-Stil erzeugen, die auf entsprechende Views verweisen: Hierfür wird die Struktur des "applications"-Verzeichnisses verwendet, das im Framework integriert ist. Wenn sich also ein View in "application/views/ansicht.php" befindet, kann eine Route auf "/home" wie folgt erzeugt werden:

  • "GET /home" => function() {
  • return View::make("ansicht");
  • }

Innerhalb der "make"-Funktionen können zudem auch Unterverzeichnisse angegeben werden, wodurch sich auch komplexere Strukturen erstellen lassen. Laravel bietet eine große Vielfalt an Möglichkeiten und so lassen sich natürlich auch Daten an Views übergeben:

  • "GET /home" => function() {
  • return View::make("ansicht")->bind("email", "example@gmail.com");
  • }

Die dazugehörige View-Datei im Verzeichnis "application/views/ansicht.php":

  • <html>
  • <?php echo $email; ?>
  • </html>

Der Umfang des Frameworks ist sehr gut dokumentiert und so lohnt es sich, in der API zu stöbern. Abschließend noch ein Blick auf das ORM-Modul "Eloquent", das in Laravel integriert ist.

  • // Basis-Klasse von Eloquent erweitern
  • class Benutzer extends Eloquent {
  • public static $table = "users";
  • }
  •  
  • // Model auslesen
  • $benutzer = Benutzer::find(1);
  • echo $benutzer->email;
  •  
  • // Ausgeführt wird: SELECT * FROM "users" WHERE "id" = 1

Laravel unterstützt von Haus aus MySQL, PostgreSQL und SQLite. Neben einem gängigen Webserver wie Apache oder Nginx wird PHP 5.3 vorausgesetzt.

201108Jun

CSS Crush: Kompakter PHP-CSS-Preprocessor

Skripte, mit denen sich dynamischer CSS-Code schreiben lässt, der noch vor der Auslieferung an den Webbrowser konvertiert wird, sind inzwischen in vielfacher Form im Web zu finden. Projekte wie LESS, der CSS Cacheer von Shaun Inman oder Turbine dürften die bekanntesten Exemplare ihrer Art sein.
Wer noch etwas experimentieren möchte oder auf der Suche nach einer weiteren PHP-Lösung ist, die aus einer einzigen Datei besteht, keine zusätzlichen HTTP-Requests benötigt und auch CSS3-Makros ermöglicht, kann sich CSS Crush ansehen.

CSS Crush

Auch dieser Preprocessor bietet CSS-Variablen und die Möglichkeit, aus mehreren CSS-Dateien, die per "@import" geladen wurden, eine große Datei zu erstellen. Die Einbettung erfolgt über PHP:

  • <?php
  • include "css_crush.php";
  • $path_to_compiled_file = css_crush::file("/screen.css");
  • ?>
  •  
  • <link rel="stylesheet" type="text/css" href="<?php echo $path_to_compiled_file; ?>" media="screen" />

Noch ein Beispiel für CSS-Variablen, denn hierbei können auch Font-Stacks verwendet werden:

  • @variables {
  • times: Times, "Times New Roman", serif;
  • helvetica: "Helvetica Neue", Helvetica, Arial, sans-serif;
  • }
  •  
  • .example {
  • font-family: var(helvetica);
  • }

Das Projekt findet sich samt Wiki bei GitHub und könnte das Entwickeln von komplexeren Stylesheets wesentlich vereinfachen. Welcher Preprocessor der Bevorzugte ist, muss dann aber jeder Webentwickler für sich entscheiden.