Tag: php

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.

201110Mai

Silex: Micro-Framework für PHP-Anwendungen

Für die Entwicklung von PHP-Anwendungen muss das Rad nicht immer neu erfunden werden: Der Einsatz von Frameworks wie CakePHP oder Symfony lohnt sich in bestimmten Fällen und wenn es noch etwas weniger sein soll, könnte auch ein Micro-Framework wie Silex behilflich sein: Die kompakte Bibliothek basiert auf den Symfony2-Komponenten, die ebenfalls als Standalone-Klassen verfügbar sind. Die Entwickler Fabien Potencier und Igor Wiedler haben ganze Arbeit geleistet, denn mit dem Mini-Framework lassen sich sehr komfortabel Anwendungen entwickeln, die einfach mit modernen Funktionen ausgestattet werden können. Dazu zählt beispielsweise eine Routing-Funktionalität, mit der sich GET-Anfragen direkt auf eine Funktion übertragen lassen, die anschließend eine Ausgabe liefert.

Silex - The PHP micro-framework based on Symfony2 Components

Benötigt wird für das Framework ledglich die Datei "silex.phar", die im PHP-Archiv-Format vorliegt und zu Beginn eingebunden werden muss. Eine Beispiel-Anwendung mit Silex sieht dann in etwa so aus:

  • require_once __DIR__ . '/silex.phar';
  •  
  • $app = new Silex\Application();
  •  
  • $app->get('/hello/{name}', function($name) {
  • return "Hello $name";
  • });
  •  
  • $app->run();

Hier wird eine Route auf "/hello/name" abgefragt und entsprechend wird eine Meldung im Browser ausgegeben. In Silex können also Controller für die allgemeinen HTTP-Methoden GET, POST, PUT oder DELETE erzeugt werden. Weiterhin steht ein flexibles Extension-System zur Verfügung, mit dem zusätzliche Funktionalitäten integriert werden können.
Insgesamt sieht Silex sehr interessant aus und stellt für bestimmte Projekte eine solide Basis dar.

201111Apr

JSON: Grundlagen in JavaScript und PHP

Wer sich mit Web Services, REST und SOAP auseinandersetzt, wird womöglich auch vor der Frage stehen, ob sich für das aktuelle Projekt XML oder JSON besser eignet. Beide Formate sind weit verbreitet und ziehen unterschiedliche Eigenschaften mit sich.
Die JavaScript Object Notation, kurz JSON, kommt im Vergleich zu XML mit weniger Overhead aus, da das Datenformat einer einfacheren Notation unterliegt. Zudem können JSON-Datensätze per "eval()" von JavaScript ausgeführt werden. JSON-Datensätze können zudem per "eval()" ausgeführt werden, wobei diese Möglichkeit nur in bestimmten Fällen ausgenutzt werden sollte. Somit stellt JSON gerade im Ajax-Bereich eine solide Lösung dar. Ein Nachteil wäre hingegen die fehlende Typisierung, doch das betrifft JavaScript im Allgemeinen.

JSON Basics - What You Need to Know

Da das Parsen von XML-Daten via JavaScript zum einen langsam und zum anderen von Browsern unterschiedlich ausgeführt wird, empfiehlt sich der Einsatz von JSON. Ein schöner Artikel über die Grundlagen von JSON wurde kürzlich bei Elated veröffentlicht. Darin wird das nötige Grundlagenwissen vermittelt und zudem finden sich darin Beispiele, wie JSON in JavaScript und PHP verwendet werden kann.
Wer XML-Daten in JSON konvertieren möchte, kann in JavaScript auch die Methode von David Walsh ausprobieren.

201024Okt

debugConsole: Schönere Fehlermeldungen in PHP

Im Bereich der PHP-Entwicklung sind Hinweise, Warnungen und Fehlermeldungen wichtig für eine gezielte Fehlersuche sowie eine stabile Anwendung. In PHP stehen verschiedene Fehlerebenen zur Verfügung, die Aufschluss über entsprechende Konflikte geben. Allerdings gestaltet sich die Fehlersuche auf Basis von einfachen Meldungen nicht immer einfach, da in komplexeren Anwendungen viele Faktoren in die Fehlersuche einfließen.
Abhilfe schafft eine kleine Bibliothek von Andreas Demmer: Mit der "debugConsole" werden Fehlermeldungen farbig und in einem kleinen Popup-Fenster anstatt in der eigentlichen Anwendung dargestellt. Weiterhin bietet die Bibliothek erweiterte Möglichkeiten wie Checkpoints, eine Watchlist für Variablen, Logging sowie einen Variablen-Inspektor. Echtzeit-Meldungen werden über JavaScript ausgegeben.

debugConsole

Die Einbindung von debugConsole erfolgt in etwa so:

  • <?php
  • require_once "debugConsole.php";
  •  
  • dc_here("Fehlerdiagnose gestartet");
  • echo $notSet; // führt zur Fehlermeldung
  • ?>

Mit einem Timer kann beispielsweise festgestellt werden, wann sich welche Variable ändert. Durch das Setzen von Checkpoints lässt sich herausfinden, wo sich der PHP-Interpreter gerade im Code befindet.
Weitere Infos über die Verwendung der Bibliothek finden sich unter Anderem in der Dokumentation.

UPDATE
Das Projekt wurde inzwischen eingestellt und steht leider nicht mehr zur Verfügung.

201018Aug

Webentwicklung: PHP-Endung bei URLs entfernen

Mit .htaccess-Befehlen lassen sich wichtige Aspekte der Suchmaschinenoptimierung umsetzen. Neben 404-Fehlerseiten oder dem Entfernen der "www"-Subdomain zählen vor allem saubere URLs zu den Vorzügen von .htaccess-Dateien. Wer eine einfache Website mit PHP realisiert hat und verschiedene Dateien in Form von "http://www.domain.com/name-der-seite.php" vorliegen hat, kann bei Bedarf die Erweiterung ".php" mit ein paar Zeilen .htaccess-Code ausblenden. Bei stuntSnippets findet sich dazu ein kleiner Artikel, in dem die Thematik behandelt wird.

stuntSnippets - Remove .php extension from URL

Neben diesem Beitrag finden sich bei stuntSnippets noch weitere interessante Code-Bausteine, so dass die kleinen Lösungen der Seite in vielen Fällen behilflich sein dürften.
Unabhängig davon folgt hier noch ein kleines .htaccess-Snippet, durch das saubere URLs mit PHP und einer Struktur im Stil von "index.php?id=seite" erreicht werden können:

  • RewriteEngine On
  •  
  • RewriteCond %{REQUEST_FILENAME} -f [OR]
  • RewriteCond %{REQUEST_FILENAME} -d
  • RewriteRule ^(.+) – [PT,L]
  •  
  • RewriteRule ^(.*) index.php?id=$1
  • RewriteRule ^(.*)/(.*) $2

Weitere nützliche .htaccess-Snippets finden sich unter Anderem hier.

201010Aug

Webentwicklung: Sammlung etlicher PHP-Snippets

Gute Snippet-Sammlungen finden sich mittlerweile häufig im Netz. Wer noch ein paar interessante PHP-Snippets sucht, sollte bei PHPSnippets.info vorbeischauen. Hier werden in kurzen Zeitabständen nützliche Code-Schnipsel aus unterschiedlichen Bereichen veröffentlicht. Dabei handelt es sich um knappe, aber hilfreiche Funktionen, die zudem in Kategorien eingeteilt sind.

PHP Snippets

In den Snippets finden sich so beispielsweise Funktionen zur Währungsumrechnung oder automatischen Backup-Erstellung einer MySQL-Datenbank. Weiterhin gibt es ein Snippet, mit dem sich der Ursprung einer "TinyURL"-Adresse anzeigen lässt.
Die Seite dürfte einen Platz in den Lesezeichen finden, da auch in der kommenden Zeit sicherlich weitere Snippets folgen werden.

UPDATE
Die Seite wurde inzwischen geschlossen und steht leider nicht mehr zur Verfügung.

201011Jul

Webentwicklung: GET- und POST-Daten ab PHP 5.2

Das Filtern von GET- oder POST-Daten, die über PHP eingelesen werden (per "$_GET" oder "$_POST"), stellt einen wichtigen Aspekt für die Absicherung von PHP-Anwendungen dar. Eingehende Daten, die von Benutzern stammen (etwa bei Formularen), müssen durch verschiedene Funktionen gefiltert werden (Escaping), um möglichen Angriffen vorzubeugen. Wer auf PHP 5.2 zurückgreifen kann, sollte sich zu diesem Thema den Artikel bei php|architect ansehen. Darin wird beschrieben, wie sich das eingebaute Filter-System von PHP nutzen lässt, um GET- und POST-Daten sicher zu filtern.

php|architect - Never Use $_GET Again

Die Funktionen werden mit "filter_input()" oder "filter_input_array()" aufgerufen und können genutzt werden wie folgt:

  • <?php
  • $string = filter_input(INPUT_GET, "string", FILTER_SANITIZE_STRING);
  • ?>

Mit dem Parameter "FILTER_SANITIZE_STRING" werden die Daten also von ungewünschten Zeichen befreit, die üblicherweise mit "stripslashes()", "strip_tags()", "htmlentities()" oder "htmlspecialchars()" gefiltert werden müssen. Neben der Option "INPUT_GET" sind zudem die Angaben "INPUT_POST", "INPUT_SERVER", "INPUT_COOKIE" oder "INPUT_ENV" möglich.